基於STM32F429的SDRAM使用

2021-08-09 20:06:15 字數 2105 閱讀 5257

使用st的hal庫進行開發,sdram使用的是w9825g6kh-6。

w9825g6kh-6共有4個bank,13位行位址,9位列位址,位寬是16位,

所以晶元的容量是:4x8192x512x16=256mbits=32mbytes。

w9825g6kh-6的原理圖如下:

fmc_d0~15:16位資料線;

fmc_sdnwe:低電平時寫,高電平時讀;

fmc_sdne0:片選訊號,低電平有效;

fmc_ba0~1:bank選擇訊號;

fmc_sdcke0:時鐘使能訊號;

fmc_sdclk:時鐘訊號;

fmc_nbl0~1:寫訪問的輸出位元組遮蔽。

stm32f429自帶fmc外設,可以對多種外部儲存器進行控制,儲存區域對應如下:

我們使用的是bank5,也就是sdram bank1。

我們要做的就是對sdram進行初始化配置,初始化成功後即可對指定的記憶體進行訪問,微控制器和外部sdram之間的讀寫時序

是由外設自動產生的,不需要程式進行控制,非常方便。

使用stm32cubemx生成fmc的初始化**,如下:

void mx_fmc_init(void)

}

上述fmc的初始化**完成了sdram初始化中的1、2兩個步驟;

接下來新增sdram初始化中的步驟3~8:

uint8_t sdram_sendcommand(uint32_t commandmode, uint32_t bank, uint32_t refreshnum, uint32_t regval)

void sdram_init(void)

函式sdram_sendcommand()用來傳送命令,內部呼叫了hal的庫函式hal_sdram_sendcommand()傳送配置命令;

函式sdram_init()完成了sdram初始化中的步驟3~8。

至此,我們就完成了對sdram的初始化操作,此時外部sdram已經被對映到了相應的記憶體位址;需要注意的是,

sdram bank1的位址是從0xc0000000~0xcfffffff,sdram bank2的位址是從0xd0000000~0xdfffffff,

我們使用的是sdram bank1,並且外部sdram的大小是32m位元組,所以對應的記憶體位址範圍是0xc0000000~0xc1ffffff。

接下來就測試一下sdram的讀寫:

#define     sdram_bank1_base_address    0xc0000000                                  //sdram bank1起始位址

#define sdram_half_word_size 0x1000000 //定義16m個的16bits資料,共32m位元組

__no_init uint16_t uhsdramarray[sdram_half_word_size] @sdram_bank1_base_address; //強制定義陣列在sdram的記憶體中

void sdram_test(void)

for(i = 0; i < sdram_half_word_size; i += 4096)

}

串列埠列印結果如下,資料太多,沒有全部顯示,

sdram測試結束。

STM32F429除錯記錄(一)

stm32f429的晶元有兩路can介面 四路串列埠 內部乙太網以及內部dsp處理器等硬體,硬體的豐富程度可見一斑,而且主頻達到180mhz,雖然比a8 a9架構的arm晶元還是差一大截,但是在工業控制上的應用還是比較多的。在程式編寫方面stm32f4系列不管在mdk還是庫函式都有挺大改動,剛著手除...

STM32F429 如何使用SDRAM

關於stm32f429 控制sdram fmc 擴充套件外部sdram 1 原理介紹 為什麼是fmc 不是 fsmc 區別在那裡!stm32f429使用fmc外設來管理擴充套件的儲存器,fmc是flexible memory controller的縮寫,譯為可變儲存控制器。它可以用於驅動包括sram...

STM32F429 如何使用NAND Flash

1 原理介紹 flash即是儲存晶元的一種,其結合了rom和ram的特點,既具備電可擦除程式設計的效能,又可以快速讀取資料,資料不會因斷電丟失。目前市面上flash主要有nor flash和nand flash。nor flash具有隨機訪問和隨位元組執行寫操作的能力,即可以訪問到儲存器內部的任意乙...