關於stm32f429 控制sdram( fmc—擴充套件外部sdram )
(1)原理介紹:
》為什麼是fmc 不是 fsmc ?區別在那裡!
stm32f429使用fmc外設來管理擴充套件的儲存器,fmc是flexible memory controller的縮寫,譯為可變儲存控制器。
它可以用於驅動包括sram、sdram、nor flash以及nand flsah型別的儲存器。
在其它系列的stm32控制器中,只有fsmc控制器(flexible static memory controller),譯為可變靜態儲存控制器,
所以它們不能驅動sdram這樣的動態儲存器,因為驅動sdram時需要定時重新整理,stm32f429的fmc外設才支援該功能,
且只支援普通的sdram,不支援ddr型別的sdram。我們只講述fmc的sdram控制功能。
》fmc特點:
fmc連線好外部的儲存器並初始化後,就可以直接通過訪問位址來讀寫資料,這種位址訪問與i2c eeprom、spi flash的不一樣,
後兩種方式都需要控制i2c或spi匯流排給儲存器傳送位址,然後獲取資料;在程式裡,這個位址和資料都需要分開使用不同的變數儲存,
並且訪問時還需要使用**控制傳送讀寫命令。而使用fmc外接儲存器時,其儲存單元是對映到stm32的內部定址空間的;
在程式裡,定義乙個指向這些位址的指標,然後就可以通過指標直接修改該儲存單元的內容,fmc外設會自動完成資料訪問過程,
讀寫命令之類的操作不需要程式控制。
(2)關於sdram暫存器配置的講解:
(3)sdram的一些學習資料:
(4)sdram的記憶體操作
使用指標的方式訪問sdram儲存器,完成初始化sdram後,我們就可以利用它儲存資料了,由於sdram的儲存空間是被對映到核心的定址區域的,我們可以通過對映的位址直接訪問sdram,訪問這些位址時,fmc外設自動讀寫sdram,程式上無需額外操作。
通過位址訪問記憶體,最直接的方式就是使用c語言的指標方式了:/sdram起始位址儲存空間2的起始位址/
#define sdram_bank_addr ((uint32_t)0xd0000000) /sdram大小,8m位元組/
#define is42s16400j_size 0x800000
uint32_t temp;
( uint8_t) (sdram_bank_addr ) = (uint8_t)0xaa; /向sdram寫入8位資料/
temp = ( uint8_t) (sdram_bank_addr ); /從sdram讀取資料/
( uint16_t) (sdram_bank_addr+10 ) = (uint16_t)0xbbbb;/寫/讀 16位資料/
temp = ( uint16_t) (sdram_bank_addr+10 );
( uint32_t) (sdram_bank_addr+20 ) = (uint32_t)0xcccccccc;/寫/讀 32位資料/
temp = ( uint32_t) (sdram_bank_addr+20 );
為方便使用,**中首先定義了巨集sdram_bank_addr表示sdram的起始位址,該位址即fmc對映的儲存區域2的首位址;巨集is42s16400j_size表示sdram的大小,所以從位址(sdram_bank_addr)到(sdram_bank_addr+is42s16400j_size)都表示在sdram的儲存空間,訪問這些位址,直接就能訪問sdram。配合這些巨集,使用指標的強制轉換以及取指標操作即可讀寫sdram的資料,使用上跟普通的變數無異。
直接指定變數儲存到sdram空間,每次訪問資料都使用指標來訪問太麻煩了,為了簡化操作,可以直接指定變數儲存到sdram空間.#define sdram_bank_addr ((uint32_t)0xd0000000) /sdram起始位址儲存空間2的起始位址/
uint8_t testvalueattribute((at(sdram_bank_addr)));/絕對定位方式訪問sdram,這種方式必須定義成全域性變數/
testvalue = 0xdd;
這種方式使用關鍵字"attribute((at()))"來指定變數的位址,**中指定testvalue儲存到sdram的起始位址,從而實現把變數儲存到sdram上。要注意使用這種方法定義變數時,必須在函式外把它定義成全域性變數,才可以儲存到指定位址上。
更常見的是利用這種方法定義乙個很大的陣列,整個陣列都指定到sdram位址上,然後就像使用malloc函式一樣,使用者自定義一些記憶體管理函式,動態地使用sdram的記憶體,我們在使用emwin寫gui應用的時候就是這樣做的。在本書的《mdk編譯過程及檔案型別全解》章節將會講解使用更簡單的方法從sdram中分配變數,以及使用c語言標準庫的malloc函式來分配sdram的空間,更有效地進行記憶體管理。
(5)如果要把sdram對映到fmc sdram的儲存區域1,需要如何修改stm32與sdram的硬體連線?程式上需要修改哪些內容?
STM32F429 如何使用NAND Flash
1 原理介紹 flash即是儲存晶元的一種,其結合了rom和ram的特點,既具備電可擦除程式設計的效能,又可以快速讀取資料,資料不會因斷電丟失。目前市面上flash主要有nor flash和nand flash。nor flash具有隨機訪問和隨位元組執行寫操作的能力,即可以訪問到儲存器內部的任意乙...
STM32F429 如何使用LCD
1 硬體介面 要明白rgb888控制lcd 和8080控制方式的區別 tft液晶顯示器使用的是rgb介面,rgb介面包含24根rgb訊號線 畫素同步訊號線 水平同步訊號線 垂直同步訊號線和資料使能訊號線。效能一般的晶元,通常不會自帶液晶控制器,需要使用自帶液晶控制器器的液晶屏,這類觸控螢幕通常使用i...
STM32F429 如何使用SDRAM
origin 關於stm32f429 控制sdram fmc 擴充套件外部sdram 1 原理介紹 為什麼是fmc 不是 fsmc 區別在那裡!stm32f429使用fmc外設來管理擴充套件的儲存器,fmc是flexible memory controller的縮寫,譯為可變儲存控制器。它可以用於驅...