s3c2440内存控制器与SDRAM基本测试
前面我們實驗的LED和串口程序,是cpu發送地址給特定的寄存器,在寄存器中寫相應的位,達到控制要求。
第一類是GPIO門電路如LED,第二類是協議類如串口,這些都不是cpu直接給地址信息,而是通過寄存器來控制的。
第三類是內存接口,cpu發出的地址可以直接傳遞給這種設備如nor flash,sdram,網卡。注意nand flash不屬于這種類型。
關于SDRAM,可以參考這篇文章,這對于了解sdram很重要,非常有必要閱讀一波。
《高手進階,終極內存技術指南(完整/進階版)》
這篇文章能夠讓你了解sdram這個內存介質。
然后,查看2440的芯片資料:
2440已經有針對sdram的控制器,2440可以直接通過地址線和sdram通信。
關于寄存器方面的東西就不再貼出來了。需要注意的是,操作sdram還是比較繁瑣的,時序要求需要根據2440手冊和所對應的sdram芯片手冊進行配置。
現在,我們開始編寫程序。
void sdram_init(void) {BWSCON = 0x22000000;BANKCON6 = 0x18001;BANKCON7 = 0x18001;REFRESH = 0x8404f5;BANKSIZE = 0xb1;MRSRB6 = 0x20;MRSRB7 = 0x20; }int sdram_test(void) {volatile unsigned char *p = (volatile unsigned char *)0x30000000;int i;// write sdramfor (i = 0; i < 1000; i++)p[i] = 0x55;// read sdramfor (i = 0; i < 1000; i++)if (p[i] != 0x55)return -1;return 0; }上面是sdram的初始化和測試,直接通過地址訪問sdram,我們對sdram進行寫入,并且再讀出來,看看是否相等。這樣可以測試是否成功配置sdram。
#include "s3c2440_soc.h"#include "init.h"int main(void) {sdram_init();if (sdram_test() == 0)led_test();return 0; }如果測試通過,返回0,led被點亮,屏蔽掉sdram初始化之后,led不會再閃爍。
昨天實驗到這里的時候以為韋老大代碼有bug,其實是由于下載器有時候保持一直連接會讓新下載的程序無響應,可以拔下下載器或再重啟單板就可以看到現象了。
需要注意的是,如同sdram 這樣的內存,訪問地址時加上volatile能夠讓你少點煩惱。。。
轉載于:https://www.cnblogs.com/yangguang-it/p/7858121.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的s3c2440内存控制器与SDRAM基本测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】Nginx反向代理和负载均衡
- 下一篇: 2017-2018-1 20155223