{"id":291,"date":"2017-11-23T20:12:03","date_gmt":"2017-11-23T19:12:03","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=291"},"modified":"2017-12-30T19:28:55","modified_gmt":"2017-12-30T18:28:55","slug":"05-sdram-library-stm32f429","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=291","title":{"rendered":"05-SDRAM-Library (STM32F429)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=288\" title=\"04-DigIn-Library (STM32F429)\"><span class=\"meta-nav\">\u2190<\/span> 04-DigIn-Library (STM32F429)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=293\" title=\"06-SPI_LoLevel-Library (STM32F429)\">06-SPI_LoLevel-Library (STM32F429) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Mit dieser Library kann das externe SD-RAM auf dem STM32F429 Discovery-Board benutzt werden.<\/p>\n<p>Das RAM hat eine Speichergr\u00f6\u00dfe von 64Mbit (8MByte) 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>Benutzte Pins :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">PB5  = SDCKE1 (CKE)      PF0  = A0\r\nPB6  = SDNE1  (\/CS)      PF1  = A1\r\nPC0  = SDNWE  (\/WE)      PF2  = A2\r\nPD0  = D2                PF3  = A3\r\nPD1  = D3                PF4  = A4\r\nPD8  = D13               PF5  = A5\r\nPD9  = D14               PF11 = SDNRAS (\/RAS)\r\nPD10 = D15               PF12 = A6\r\nPD14 = D0                PF13 = A7\r\nPD15 = D1                PF14 = A8\r\nPE0  = NBL0   (LDQM)     PF15 = A9\r\nPE1  = NBL1   (UDQM)     PG0  = A10\r\nPE7  = D4                PG1  = A11\r\nPE8  = D5                PG4  = BA0    (BANK A0)\r\nPE9  = D6                PG5  = BA1    (BANK A1)\r\nPE10 = D7                PG8  = SDCLK  (CLK)\r\nPE11 = D8                PG15 = SDNCAS (\/CAS)\r\nPE12 = D9\r\nPE13 = D10\r\nPE14 = D11\r\nPE15 = D12<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">ErrorStatus UB_SDRAM_Init(void);                                                             \/\/ zum init vom RAM\r\nvoid UB_SDRAM_Write8b(uint32_t adr, uint8_t wert);                                           \/\/ zum schreiben von einem 8bit Wert\r\nuint8_t UB_SDRAM_Read8b(uint32_t adr);                                                       \/\/ zum lesen von einem 8bit Wert\r\nvoid UB_SDRAM_Write16b(uint32_t adr, uint16_t wert);                                         \/\/ zum schreiben von einem 16bit Wert\r\nuint16_t UB_SDRAM_Read16b(uint32_t adr);                                                     \/\/ zum lesen von einem 16bit Wert\r\nvoid UB_SDRAM_Write32b(uint32_t adr, uint32_t wert);                                         \/\/ zum schreiben von einem 32bit Wert\r\nuint32_t UB_SDRAM_Read32b(uint32_t adr);                                                     \/\/ zum lesen von einem 32bit Wert\r\nvoid UB_SDRAM_WriteBuffer32b(uint32_t* ptrBuffer, uint32_t startAdr, uint32_t lenBuffer);    \/\/ zum schreiben von einem Block von 32bit Werten\r\nvoid UB_SDRAM_ReadBuffer32b(uint32_t* ptrBuffer, uint32_t startAdr, uint32_t lenBuffer);     \/\/ zum lesen von einem Block von 32bit Werten<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 24.10.2013\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      : STM32F429\r\n\/\/ IDE      : CooCox CoIDE 1.7.4\r\n\/\/ GCC      : 4.7 2012q4\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der SDRAM-Library\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/ In Configuration diese Define hinzuf\u00fcgen :\r\n\/\/ \"STM32F429_439xx\" , \"__ASSEMBLY__\" , \"USE_STDPERIPH_DRIVER\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_sdram.h\"\r\n#include \"stm32_ub_led.h\"\r\n\r\nvoid Delay(__IO uint32_t nCount)\r\n{\r\n  while(nCount--)\r\n  {\r\n  }\r\n}\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  SystemInit(); \/\/ 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      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  {\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; rote LED blinkt\r\n      UB_Led_Toggle(LED_RED);\r\n      Delay(5000000);\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"wp-content\/uploads\/2013\/10\/sdram_f429_v100.zip\">sdram_f429_v100<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"wp-content\/uploads\/2013\/10\/Demo_F429_05.zip\">Demo_F429_05<\/a><\/p>\n<hr \/>\n<h3 id=\"comments-title\">22 Antworten auf <em>05-SDRAM-Library (STM32F429)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-918\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-918\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/bf40f1fce6ebc9fa4ea1155e3d9fe7eb?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Holger<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">29. Oktober 2013 um 23:12<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Sorry, wenn es eine Anf\u00e4nger-Frage ist. Habe seit letztem Wochenende auch das stm32f429 Discovery hier\u2026 Wie adressiet der Controller die 8 MB SDRAM mit den oben erw\u00e4hnten benutzten Pins? Mit den insgesamt. 12 Axx Pins alleine geht das doch nicht vollst\u00e4ndig, oder?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-919\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-919\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">30. Oktober 2013 um 10:00<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Wenn du rausgefunden hast, das A0-A11 nicht f\u00fcr 8MByte reichen bist du doch kein Anf\u00e4nger mehr <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":-)\" \/> \u2026 Das RAM ist als 2D-Matrix aufgebaut. Eine \u201cRAM-Zelle\u201d wird mit Reihe und Spalte Adressiert (Row mit A0 bis A11, Col mit A0 bis A7) . Zum unterscheiden ob Row oder Col gibt es die RAS und CAS Leitungen. Damit sind 1048576 Zellen Adressierbar. Jetzt gibt es noch die 2 Bank Leitungen (BA0,BA1) und der Umstand das eine Zelle 16bit breit ist. Damit w\u00e4ren wir auch bei der Bezeichnung des RAMs : 1M x 4 x 16 = 8MByte<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1776\" class=\"comment even thread-odd thread-alt depth-1\">\n<div id=\"comment-1776\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/5c98d9eb9878155d61ced27149322c1d?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Flo<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">22. Mai 2014 um 22:21<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Erstmal vielen Dank f\u00fcr die ganzen Sourcen, das macht alles sehr viel einfacher!<\/p>\n<p>Bei der SDRAM-Library habe ich per \u201c__attribute__ ((section(\u201c.sdram\u201d)))\u201d und entsprechendem Linkerfile-Eintrag<\/p>\n<p>sdram (rwx) : ORIGIN = 0xD0100000, LENGTH = 7M \/* first MB is used as LCD frame buffer *\/<\/p>\n<p>.sdram (NOLOAD) :<br \/>\n{<br \/>\n. = ALIGN(4);<br \/>\n*(.sdram .sdram.*)<br \/>\n} &gt; sdram<\/p>\n<p>versucht, einen gr\u00f6\u00dferen Puffer ins SDRAM auszulagern. Laut Map-File liegt er auch dort, sobald ich aber etwas mehr als ein paar Byte da rein schreibe (ohne die Library-Funktionen zu verwenden, bis auf UB_SDRAM_Init() nat\u00fcrlich) h\u00e4ngt sich der Mikrocontroller auf.<\/p>\n<p>In deinen Write\/ReadBuffer Funktionen wartest du auf das Busy-Flag. Kann man den FMC nicht auch so einstellen, dass man das SDRAM transparent nutzen kann?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1779\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1779\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">23. Mai 2014 um 08:36<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>alle Grafik routinen von mir nutzen das SDRAM mit direktem zugriff<br \/>\nz.B.<\/p>\n<pre lang=\"c\" line=\"1\">uint32_t LCD_CurrentFrameBuffer=((uint32_t)0xD0000000);\r\n\r\n  for (index = 0x00; index &lt; LCD_FRAME_OFFSET; index+=2) {\r\n    *(volatile uint16_t*)(LCD_CurrentFrameBuffer + index) = color;\r\n  }\r\n<\/pre>\n<p>du machst da wohl etwas falsch<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1827\" class=\"comment even depth-3\">\n<div id=\"comment-1827\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/5c98d9eb9878155d61ced27149322c1d?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Flo<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">30. Mai 2014 um 12:20<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Stimmt, ich hatte die Initialisierung vergessen\u2026 mein Fehler <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_wink.gif\" alt=\";)\" \/><\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1877\" class=\"comment odd alt thread-even depth-1\">\n<div id=\"comment-1877\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/90c9e15cb118a9e9f69c0f697f2942b0?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Lurch<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">16. Juni 2014 um 14:37<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>typo in Demo: uint8_t sollwert, istwert; sollte wohl uint16_t sein<br \/>\nDanke f\u00fcr die tolle Arbeit. Sch\u00f6ne Libs!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1882\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-2\">\n<div id=\"comment-1882\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">17. Juni 2014 um 17:43<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>so ein shi\u2026 du hast recht (danke), komisch das der Compiler nicht meckert. Wenn ich dazukomme \u00e4nder ich es ab.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-2624\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"comment-2624\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/29a6aa9315722147ea09af0e3ad34ef8?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Falko<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">3. Dezember 2014 um 16:27<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo und vielen Dank f\u00fcr den tollen Code.<br \/>\nIch habe dein Beispielprojekt mit emwin am laufen. Leider habe ich ein mysteri\u00f6ses Problem, wenn ich in einer Funktion die \u00fcberhaupt nichts mit dem Display zu tun hat, eine Variable entferne, ist das Display pl\u00f6tzlich dunkel. Kann es etwas mit dem externen Ram zu tun haben? Ich habe den RAM etwas anders angeschlossen, anstelle Bank 2 verwende ich Bank 1 (Chip ist an SDNE0 und SDCKE0) angeschlossen. Ich habe die stellen die stellen im code wo bank2 steht in bank1 ge\u00e4ndert. Die Start Adresse im SDRAM Header habe auf #define SDRAM_START_ADR ((uint32_t)0xC0000000) ge\u00e4ndert. Ist das richtig? Muss ich noch irgendwas anderes beachten?<br \/>\nLG Falko<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-2627\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-2\">\n<div id=\"comment-2627\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">3. Dezember 2014 um 20:07<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>wenn du das Linker-Script von mir benutzt, muss dort die Adresse auch ge\u00e4ndert werden.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-2632\" class=\"comment odd alt depth-3\">\n<div id=\"comment-2632\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/29a6aa9315722147ea09af0e3ad34ef8?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Falko<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">4. Dezember 2014 um 11:14<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Danke! Habe ich jetzt ge\u00e4ndert. Der Fehler ist leider immer noch da <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_sad.gif\" alt=\":-(\" \/> . Wo finde ich eigentlich die Startadresse in den Datenbl\u00e4ttern? Mir ist aufgefallen das das Display eigentlich noch geht, nur die PWM der Hintergrundbeleuchtung ausgeht (Auf meinen Board sitzt ein Step-Up Stromregler, der per PWM gedimmt wird) und dadurch nichts mehr zu sehen ist. Grade ist mir noch aufgefallen, das der Fehler nicht mehr auftaucht, wenn ich die Compiler Optimierung (-Os) EINschalte. Sehr sehr merkw\u00fcrdig\u2026 ich brauch jetzt ne gro\u00dfe Tasse Kaffee\u2026<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-2910\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-2910\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/8ee1edc4df18d1afd12eb0c4c8a55091?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Christian<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">24. Februar 2015 um 17:47<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<\/p>\n<p>ohne es ausprobiert zu haben: Es gibt in der CMSIS Boot Lib ein .h. File wo drinsteht, dass man eine Zeile auskommentieren soll, wenn das SDRAM verwendet werden soll. Muss man das?<\/p>\n<p>Ich versuche eigentlich soweit es geht die Funktionen der Std_Peripherals zu nutzen oder direkt auf die Hardware zuzugreifen, damit ich nicht so viele Libs habe, die meine Applikation ausbremsen.<\/p>\n<p>PS: Falls Du mal Lust hast w\u00e4re eine \u201cRTC Kalibration\u201d mal ganz nett, wie sowas geht. Meine RTC l\u00e4uft 3s pro Tag falsch, die w\u00fcrde ich gern raustrimmen aber so einfach ist das wohl nicht.<\/p>\n<p>Gruss,<br \/>\nChristian<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-2914\" class=\"comment odd alt depth-2\">\n<div id=\"comment-2914\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/a1409b1fe6254bc7fbdcfa48b73a1ee9?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Joerg B.<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">26. Februar 2015 um 11:06<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Ich versuche eigentlich soweit es geht die Funktionen der Std_Peripherals zu nutzen oder direkt auf die Hardware zuzugreifen, damit ich nicht so viele Libs habe, die meine Applikation ausbremsen.<\/p>\n<p>Das widerspricht sich aber Christian, gerade durch die Std_Peripherals Libs machst du keine direkten Register Zugriffe und bremst damit letztendlich dein Programm aus. Bei 168 MHz wirst du da aber sicher kaum mal Probleme bekommen <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_biggrin.gif\" alt=\":D\" \/><\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-2916\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-3\">\n<div id=\"comment-2916\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">26. Februar 2015 um 12:15<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>das sehe ich genauso. Ich verstehe das gemeckere \u201cdie STD-LIB ist zuviel Overhead\u201d sowieso nicht. In welcher Anwendung spielt es eine Rolle ob die Initialisierung vom DAC\/DMA\/SPI\/UART usw. 10us oder 10ms dauert ? OK da liegt der Faktor 1000 dazwischen aber wen st\u00f6rt es denn ?Die Zeiten von Befehlszyklen sparen und Speicherplatz sparen sind m.M. nach mit einer MCU die das DOS-Spiel \u201cDOOM\u201d fl\u00fcssig laufen lassen kann vorbei. Aber wer alle Register selbst setzen will, soll damit gl\u00fccklich werden <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_wink.gif\" alt=\";-)\" \/><\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-2926\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"comment-2926\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/8ee1edc4df18d1afd12eb0c4c8a55091?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Christian<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">2. M\u00e4rz 2015 um 11:48<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hi,<\/p>\n<p>ihr habt sicher recht. Ich bin total Z80 und PIC gesch\u00e4digt, wo man absolut effizient sein muss, jeden Takt rausoptimieren bei rund 750.000 Befehlen\/sec . Bei einer CPU wie der M4 mit 2MB Flash (also unendlich viel) werde ich mich wohl dran gew\u00f6hnen m\u00fcssen, dass die Frage nicht mehr lautet \u201cWelches register muss ich wie setzen, damit das passiert was ich will?\u201d sondern \u201cWelche Library Funktionen muss ich wie aufrufen? Der LPC2368 war noch gut per Register beherrschbar, in die man dieBits reingeklopft hat. Beim M4 sehe ich da kaum mehr Land, allein schon mit dieser Matrix Geschichte und den vielen Bussen.<\/p>\n<p>Wie gesagt baucht es f\u00fcr das SDRAM aber keine Libs, das ist einfach als Section definierbar im Linkerfile und dann kann man es mit \u201cvariable _attribute (.section sdram)\u201d oder \u00e4hnlich auch benutzen wie jede normale Var auch.<\/p>\n<p>Gruss,<br \/>\nChristian<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<li id=\"li-comment-2964\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-2964\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/3523828f5c993a58b1b411329dfcf59a?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Frank<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">12. M\u00e4rz 2015 um 08:39<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<\/p>\n<p>ich versuche gerade den Einstieg in die STM32 Controller zu vollziehen. Mit deinen Beispielen wird einem das doch sehr erleichtert. Klasse Arbeit. Das muss doch auch mal erw\u00e4hnt werden.<\/p>\n<p>Nun zu meinem Problem:<br \/>\nWenn ich mir im Memorybrowser den Speicher ab 0xD0000000 anzeigen lasse, so werden mir hier nur lauter Nullen angezeigt. Dein Speichertest l\u00e4uft aber anstandslos durch. Auch kann ich hier keinen neuen Wert hineinschreiben.<br \/>\nMach ich hier irgendetwas falsch ? muss noch irgendetwas anders konfiguriert werden damit ich im Debugger auch den Speicherbereich auslesen kann oder ist das ein Problem der CoIDE (1.7.8)<\/p>\n<p>Gruss<br \/>\nFrank<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-2974\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-2974\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">14. M\u00e4rz 2015 um 11:43<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>bin mir nicht sicher ob man per debugger externen Speicher anzeigen lassen kann\u2026hab ich noch nie ausprobiert.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-2993\" class=\"comment even depth-3\">\n<div id=\"comment-2993\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/3523828f5c993a58b1b411329dfcf59a?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Frank<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">17. M\u00e4rz 2015 um 12:18<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Also dazu kann ich nur sagen, dass es beim Keil-MDK \u00fcber den Debugger problemlos funktioniert. Da kann ich das Externe RAM im Debugger auslesen. Dann muss das also am Debugger der Coocox-IDE liegen.<\/p>\n<p>Gruss<br \/>\nFrank<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-4246\" class=\"comment odd alt depth-4\">\n<div id=\"comment-4246\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/3c6f4d5fd4d31714e3875e3f60963c55?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Sakul Relda<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">19. Oktober 2015 um 15:38<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo Frank,<\/p>\n<p>kannst du mir das Keil Projekt mal zuschicken?<br \/>\nW\u00e4re wirklich super <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":)\" \/><\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-4245\" class=\"comment even thread-odd thread-alt depth-1\">\n<div id=\"comment-4245\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/3c6f4d5fd4d31714e3875e3f60963c55?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Sakul Relda<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">19. Oktober 2015 um 15:37<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo an alle,<\/p>\n<p>ist es m\u00f6glich dieses Testprojekt auch in Keil uVision 5 zum laufen zu bringen und welche \u00c4nderungen brauche ich daf\u00fcr?<\/p>\n<p>Danke f\u00fcr die Hilfe <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":)\" \/><\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-4253\" class=\"comment odd alt depth-2\">\n<div id=\"comment-4253\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/3c6f4d5fd4d31714e3875e3f60963c55?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Sakul Relda<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">21. Oktober 2015 um 13:48<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Also mein Problem ist, dass wenn ich das Projekt in Keil versuche zum laufen zu bekommen, bekomme ich Unmengen an Fehlern und ein Problem im Scatterfile \u2013 Section wird nicht richtig angesprochen.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-4325\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-4325\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/3c6f4d5fd4d31714e3875e3f60963c55?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Sakul Relda<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">12. November 2015 um 14:19<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo ihr,<\/p>\n<p>der externe SDRAM f\u00fcr das STM32F429 Disco funktioniert jetzt. Die Frage f\u00fcr mich ist, wie viel langsamer ist der externe SDRAM?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-4329\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-4329\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">13. November 2015 um 20:25<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>schreib einfach eine test funktion zum messen der Geschwindigkeit.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Mit dieser Library kann das externe SD-RAM auf dem STM32F429 Discovery-Board benutzt werden. Das RAM hat eine Speichergr\u00f6\u00dfe von 64Mbit (8MByte) und h\u00e4ngt am FMC-Bus der CPU. Ich habe mehrere Funktionen geschrieben um Daten auf das RAM zu lesen und &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=291\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"parent":160,"menu_order":5,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[129],"tags":[9,154,102],"class_list":["post-291","page","type-page","status-publish","hentry","category-stm32f429","tag-library","tag-sdram","tag-stm32f429"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/291","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\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=291"}],"version-history":[{"count":3,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/291\/revisions"}],"predecessor-version":[{"id":1664,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/291\/revisions\/1664"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/160"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}