新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > SDRAM初始化過程的詮釋

        SDRAM初始化過程的詮釋

        作者: 時間:2016-11-11 來源:網絡 收藏
        幾天前看初始化SDRAM代碼時覺得比較困難,主要是因為之前沒有接觸過這方面,毫無經驗,現在看來不難,麻煩在需要根據datasheet進行設置,好在是移植,很多強人的文章可參考。自己很容易忘事,就記錄下來吧。

        我的板子是sbc2410,使用兩片容量為32MB、位寬16bit的HY57V561620CT-H芯片拼成容量為64M、32bit的SDRAM存儲器。根據2410datasheet,要使用SDRAM需配置13個寄存器,以下逐個來看:

        本文引用地址:http://www.104case.com/article/201611/316620.htm

        BWSCON:Bus width & wait status control register總線位寬和等待狀態控制寄存器。

        此寄存器用于配置BANK0 – BANK7的位寬和狀態控制,每個BANK用4位來配置,分別是:

        ● ST(啟動/禁止SDRAM的數據掩碼引腳。對于SDRAM,此位置0;對于SRAM,此位置1)

        ● DWSDRAM是32位,故將DW6設為10)

        特殊的是bit[2:1],即DW0,設置BANK0的位寬,又板上的跳線決定,只讀的。我這板子BWSCON可設置為0x22111110。其實只需將BANK6對應的4位設為0010即可。

        用來分別配置8個BANK的時序等參數。SDRAM是映射到BANK6和BANK7上的(內存只能映射到這兩個BANK,具體映射多大的空間,可用BANKSIZE寄存器設置),所以只需參照SDRAM芯片的datasheet配置好BANK6和BANK7,BANKCON0 – BANKCON5使用默認值0x00000700即可。

        (1)MT(bit[16:15]):設置本BANK映射的物理內存是SRAM還是SDRAM,后面的低位就根據此MT的選擇而分開設置。本板子應置0b11,所以只需要再設置下面兩個參數

        (2)Trcd(bit[3:2]):RAS to CAS delay(00=2 clocks,01=3 clocks,10=4 clocks),推2410手冊上的薦值是0b01。我們PC的BIOS里也可以調節的,應該玩過吧。

        (3)SCAN(bit[1:0]):Column address number(00 = 8-bit,01 = 9-bit,10= 10-bit),SDRAM列地址位數。查閱HY57V561620CT-H芯片手冊得知此值是9,所以。

        此寄存器的bit[23:11]可參考默認值,或自己根據經驗修改,這里用0x008e0000,關鍵是最后的Refresh Counter(簡稱R_CNT,bit[10:0])的設置,2410手冊上給出了公式計算方法。SDRAM手冊上“8192 refresh cycles / 64ms”的描述,得到刷新周期為64ms/8192=7.8125us,結合公式,R_CNT=2^11 + 1 – 12 * 7.8125 = 1955。所以可得REFRESH=0x008e0000+1995=0x008e07a3。

        BANKSIZE:設置SDRAM的一些參數。其中BK76MAP(bit[2:0])配置BANK6/7映射的大小,可設置為010 = 128MB/128MB或001 = 64MB/64MB,只要比實際RAM大都行,因為bootloader和linux內核都可以檢測可用空間的。BANKSIZE=0x000000b2。

        MRSRB6、MRSRB7:Mode register set register bank6/7

        可以修改的只有CL[6:4](CAS latency,000 = 1 clock, 010 = 2 clocks, 011=3 clocks),其他的全部是固定的(fixed),故值為0x00000030。這個CAS在BIOS中應該也設置過吧,對PC的速度提升很明顯哦J

        至此,13個寄存器全部配置好了,下面就可以把代碼復制到SDRAM中執行了,同樣的程序速度要比片內SRAM運行的慢不少。


        關鍵詞: SDRAM初始化過

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 铁力市| 白沙| 左权县| 读书| 延长县| 即墨市| 那曲县| 东平县| 华坪县| 马关县| 晋中市| 伊金霍洛旗| 西宁市| 塔城市| 达孜县| 宝鸡市| 壤塘县| 柘城县| 德安县| 肇州县| 承德市| 昔阳县| 宜州市| 高密市| 上饶县| 宁蒗| 新乡市| 旬邑县| 抚顺市| 南雄市| 拜泉县| 洛川县| 宁城县| 通山县| 永平县| 务川| 崇文区| 太仓市| 屏南县| 长泰县| 枝江市|