{"id":1391,"date":"2017-12-16T18:01:56","date_gmt":"2017-12-16T17:01:56","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=1391"},"modified":"2017-12-31T00:03:42","modified_gmt":"2017-12-30T23:03:42","slug":"03-sdram-library-stm32f746","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=1391","title":{"rendered":"03-SDRAM-Library (STM32F746)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=1389\" title=\"02-Button-Library (STM32F746)\"><span class=\"meta-nav\">\u2190<\/span> 02-Button-Library (STM32F746)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=1393\" title=\"04-LCD-Library (STM32F746)\">04-LCD-Library (STM32F746) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p><strong>Beschreibung :<\/strong><\/p>\n<p>Mit dieser Library kann das externe SD-RAM auf dem STM32F746 Discovery-Board benutzt werden.<\/p>\n<p>Das RAM hat eine Speichergr\u00f6\u00dfe von 128MBit (8MByte nutzbar) und h\u00e4ngt am FMC-Bus der CPU. Ich habe mehrere Funktionen geschrieben um Daten auf das RAM zu lesen und zu schreiben.<\/p>\n<p><strong>Module :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">stm32_ub_sdram.h, stm32_ub_sdram.c\r\n<\/pre>\n<p><strong>Includes :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">#include \"stm32_ub_system.h\"\r\n<\/pre>\n<p><strong>Defines :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">#define SDRAM_MAX_ADR         0x800000  \/\/ max=8MByte\r\n#define SDRAM_START_ADR      ((uint32_t)0xC0000000)\r\n\r\n#define SDRAM_MEMORY_WIDTH               FMC_SDRAM_MEM_BUS_WIDTH_16\r\n#define SDCLOCK_PERIOD                   FMC_SDRAM_CLOCK_PERIOD_2\r\n#define SDRAM_TIMEOUT                    ((uint32_t)0xFFFF)\r\n#define REFRESH_COUNT                    ((uint32_t)0x0603)\r\n\r\n#define SDRAM_MODEREG_BURST_LENGTH_1             ((uint16_t)0x0000)\r\n#define SDRAM_MODEREG_BURST_LENGTH_2             ((uint16_t)0x0001)\r\n#define SDRAM_MODEREG_BURST_LENGTH_4             ((uint16_t)0x0002)\r\n#define SDRAM_MODEREG_BURST_LENGTH_8             ((uint16_t)0x0004)\r\n#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL      ((uint16_t)0x0000)\r\n#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED     ((uint16_t)0x0008)\r\n#define SDRAM_MODEREG_CAS_LATENCY_2              ((uint16_t)0x0020)\r\n#define SDRAM_MODEREG_CAS_LATENCY_3              ((uint16_t)0x0030)\r\n#define SDRAM_MODEREG_OPERATING_MODE_STANDARD    ((uint16_t)0x0000)\r\n#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000)\r\n#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE     ((uint16_t)0x0200)\r\n<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">ErrorStatus UB_SDRAM_Init(void);\r\nvoid UB_SDRAM_Write8b(uint32_t adr, uint8_t wert);\r\nuint8_t UB_SDRAM_Read8b(uint32_t adr);\r\nvoid UB_SDRAM_Write16b(uint32_t adr, uint16_t wert);\r\nuint16_t UB_SDRAM_Read16b(uint32_t adr);\r\nvoid UB_SDRAM_Write32b(uint32_t adr, uint32_t wert);\r\nuint32_t UB_SDRAM_Read32b(uint32_t adr);\r\nErrorStatus UB_SDRAM_WriteBuffer32b(uint32_t* ptrBuffer, uint32_t startAdr, uint32_t lenBuffer);\r\nErrorStatus UB_SDRAM_ReadBuffer32b(uint32_t* ptrBuffer, uint32_t startAdr, uint32_t lenBuffer);\r\n<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 01.01.2016\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F746\r\n\/\/ Board    : STM32F746-Discovery-Board\r\n\/\/ IDE      : OpenSTM32\r\n\/\/ GCC      : 4.9 2015q2\r\n\/\/ Module   : CubeHAL\r\n\/\/ Funktion : Hauptprogramm\r\n\/\/--------------------------------------------------------------\r\n\r\n\r\n#include \"stm32_ub_system.h\"\r\n#include \"stm32_ub_sdram.h\"\r\n#include \"stm32_ub_led.h\"\r\n\r\nint main(void)\r\n{\r\n  uint32_t adr;\r\n  uint8_t sollwert, istwert;\r\n  ErrorStatus ramcheck;\r\n\r\n  \/\/ init vom System\r\n  UB_System_Init(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  \/\/ init der LEDs\r\n  UB_Led_Init();\r\n\r\n  \/\/ init vom externen SDRAM (und test ob es vorhanden ist)\r\n  ramcheck=UB_SDRAM_Init();\r\n  if(ramcheck==SUCCESS) {\r\n    \/\/ zum test RAM komplett f\u00fcllen\r\n    sollwert=0xA1B2;\r\n    for(adr=0;adr&lt;SDRAM_MAX_ADR;adr+=2) {\r\n   \t  UB_SDRAM_Write16b(adr,sollwert);\r\n      sollwert++;\r\n    }\r\n\r\n    \/\/ Ram wieder auslesen und pr\u00fcfen\r\n    sollwert=0xA1B2;\r\n    for(adr=0;adr&lt;SDRAM_MAX_ADR;adr+=2) {\r\n      istwert=UB_SDRAM_Read16b(adr);\r\n      if(istwert!=sollwert) {\r\n        \/\/ RAM-Inhalt fehlerhaft\r\n        ramcheck=ERROR;\r\n      }\r\n      sollwert++;\r\n    }\r\n  }\r\n\r\n  while(1) {\r\n    if(ramcheck==SUCCESS) {\r\n      \/\/ wenn kein Fehler -&gt; gruene LED leuchtet\r\n      UB_Led_On(LED_GREEN);\r\n    }\r\n    else {\r\n      \/\/ wenn Fehler -&gt; gruene LED blinkt\r\n      UB_Led_Toggle(LED_GREEN);\r\n      HAL_Delay(500); \/\/Delay in ms\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p>03 = SDRAM :\u00a0<a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2015\/07\/f746_sdram_v100.zip\">f746_sdram_v100<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Beschreibung : Mit dieser Library kann das externe SD-RAM auf dem STM32F746 Discovery-Board benutzt werden. Das RAM hat eine Speichergr\u00f6\u00dfe von 128MBit (8MByte nutzbar) und h\u00e4ngt am FMC-Bus der CPU. Ich habe mehrere Funktionen geschrieben um Daten auf das RAM &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=1391\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":182,"menu_order":3,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[130],"tags":[9,154,105],"class_list":["post-1391","page","type-page","status-publish","hentry","category-stm32f746","tag-library","tag-sdram","tag-stm32f746"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/1391","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1391"}],"version-history":[{"count":7,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/1391\/revisions"}],"predecessor-version":[{"id":1549,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/1391\/revisions\/1549"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/182"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1391"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1391"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}