<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM開(kāi)發(fā)步步深入之SDRAM編程示例

ARM開(kāi)發(fā)步步深入之SDRAM編程示例

作者: 時(shí)間:2016-12-05 來(lái)源:網(wǎng)絡(luò ) 收藏

  實(shí)驗目的:改變“點(diǎn)燈大法”的執行地點(diǎn),從NandFlash的Steppingstone轉到中執行,借此掌握存儲控制器的使用。

本文引用地址:http://dyxdggzs.com/article/201612/341119.htm

  實(shí) 驗環(huán)境及說(shuō)明:恒頤S3C2410開(kāi)發(fā)板H2410。H2410核心板擴展有64MB的,用于設置程序堆棧和存放各種變量。選用了兩 片三星公司的K4S561632(4M*16bit*4BANK),兩片拼成32位數據寬度的SDRAM存儲系統,并映射到S3C2410的 SROM/SDRAM的BANK6,地址范圍是0x30000000~0x33FFFFFF。

  實(shí) 驗思路:開(kāi)發(fā)板上電啟動(dòng)后,自動(dòng)將NandFlash開(kāi)始的4K數據復制到SRAM中,然后跳轉到0地址開(kāi)始執行,然后初始化存儲控制器,把程序本身從 SRAM中復制到SDRAM中,最后跳轉到SDRAM中運行。故問(wèn)題的關(guān)鍵是SDRAM的初始化,根據S3C2410的Datasheet,要使用 SDRAM,就需配置存儲控制器的13個(gè)寄存器。

  知識掌握:SDRAM和13個(gè)存儲控制器的寄存器。

  一、SDRAM:

  CPU 提供了一組用于SDRAM的信號:SDRAM時(shí)鐘有效信號SCKE;SDRAM時(shí)鐘信號SCLK0/SCLK1;數據掩碼信號DQM0/DQM1 /DQM2/DQM3;SDRAM片選信號nGCS0(與nGCS6是同一引腳的兩個(gè)功能);SDRAM行地址選通脈沖信號nSRAS;SDRAM列地址 選通脈沖信號nSCAS;寫(xiě)允許信號nWE(不是SDRAM專(zhuān)用的);

  ★SDRAM結構:SDRAM的內部是一個(gè)存儲陣列,檢索時(shí)先指定一個(gè)行,再指定一個(gè)列,就可以準確地找到所需要的單元格,這就是SDRAM尋址的基本原理;單元格被稱(chēng)為存儲單元,表格就是邏輯BANK,SDRAM一般含有4個(gè)邏輯BANK。

  ★SDRAM 的訪(fǎng)問(wèn):SDRAM片選信號nGCS0有效;邏輯BANK選擇;對選中的芯片進(jìn)行統一的行/列尋址;CPU會(huì )從32位的地址中自動(dòng)分出 邏輯BANK選擇信號、行地址信號、列地址信號,然后先后發(fā)出行地址信號、列地址信號,邏輯BANK選擇信號在發(fā)出行地址信號的同時(shí)發(fā)出,并維持到列地址 信號結束;找到了存儲單元后,被選中的芯片就要進(jìn)行統一的數據傳輸了。

  二、存儲控制器的寄存器:

  ★BWSCON(Bus width & wait status control register,總線(xiàn)位寬和等待狀態(tài)控制寄存器):此寄存器用于配置BANK0~BANK7的位寬和狀態(tài)控制,每個(gè)BANK用4位來(lái)配置,分別是:

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

  ● WS(是否使用存儲器的WAIT信號,通常置0為不使用)

  ● DW(兩位,設置位寬。此板子的SDRAM是32位,故將DW6設為10)

  特 殊的是bit[2:1],即DW0,設置BANK0的位寬,由板上的跳線(xiàn)決定,只讀的。其實(shí)只需將BANK6對應的4位設為0010即可,在此處 BWSCON先設置為0x02000000。SDRAM接BANK6對應的[27:24]位,同時(shí)注意BANK0比較特殊,如下圖所示:

  '700')this.width='700';if(this.offsetHeight>'700')this.height='700';" src="http://www.arm79.com/attachment/Mon_1005/73_67_39515ea9d909f2c.jpg" onclick="if(this.width>=700) window.open('http://www.arm79.com/attachment/Mon_1005/73_67_39515ea9d909f2c.jpg');" border="0" width="700">

  '700')this.width='700';if(this.offsetHeight>'700')this.height='700';" src="http://www.arm79.com/attachment/Mon_1005/73_67_03cf877c1a65f25.jpg" onclick="if(this.width>=700) window.open('http://www.arm79.com/attachment/Mon_1005/73_67_03cf877c1a65f25.jpg');" border="0" width="700">

  ★BANKCON0~BANKCON7: 用來(lái)分別配置8個(gè)BANK的時(shí)序等參數。SDRAM是映射到BANK6和BANK7上的(內存只能映射到這兩個(gè)BANK,具體映射多大的空間,可用 BANKSIZE寄存器設置),所以只需參照SDRAM芯片的Datasheet配置好BANK6和BANK7,BANKCON0~BANKCON5使用 默認值0x00000700即可。對于BANKCON6和BANKCON7中的各個(gè)位的描述:

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

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

  ●SCAN(bit[1:0]):Column address number(00 = 8-bit,01 = 9-bit,10= 10-bit),SDRAM列地址位數。查閱K4S561632芯片手冊得知此值是9,所以SCAN=0b01。如果使用其他型號的SDRAM,您需要查 看它的數據手冊來(lái)決定SCAN的取值:00-8位、01-9位、10-10位。綜合以上各值,BANKCON6~BANKCON7設為 0x00018005。

  ★REFRESH(刷新控制寄存器):此寄存器的bit[23:11]可參考默認值,或自己根據經(jīng)驗修改,這里用 0x008e0000,關(guān)鍵是最后的Refresh Counter(簡(jiǎn)稱(chēng)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。

  ●Trp([21:20]):設置為0即可。

  ●Tsrc([19:18]):設置默認值即可。

  ★BANKSIZE: 設置SDRAM的一些參數。位[7]=1:Enable burst operation(0=核禁止突發(fā)傳輸,1=核支持突發(fā)傳輸);位[5]=1:SDRAM power down mode enable(0=不使用SCKE信號令SDRAM進(jìn)入省電模式,1=使用SCKE信號令SDRAM進(jìn)入省電模式);位[4]=1:SCLK is active only during the access (recommended);位[2:1]=010:BANK6、BANK7對應的地址空間與BANK0-5不同。BANK0-5的地址空間都是固定的 128M,地址范圍是(x*128M)到(x+1)*128M-1,x表示0到5。但是BANK6-7的起始地址是可變的,您可以從S3C2410數據手 冊第5章"Table 5-1. BANK6-7 Addresses"中了解到BANK6-7的地址范圍與地址空間的關(guān)系。本開(kāi)發(fā)板僅使用BANK6的64M空間,其中 BK76MAP(bit[2:0])配置BANK6/7映射的大小,可設置為010 = 128MB/128MB或001 = 64MB/64MB,只要比實(shí)際RAM大都行,多出來(lái)的空間程序會(huì )檢測出來(lái),不會(huì )發(fā)生使用不存在的內存的情況(Bootloader和Linux內核都會(huì ) 作內存檢測)。BANKSIZE=0x000000b2。

  ★MRSRB6、MRSRB7(Mode register set register BANK6/7,SDRAM模式設置寄存器):可以修改的只有CL[6:4](CAS latency,000 = 1 clock, 010 = 2 clocks, 011=3 clocks),其他的全部是固定的(fixed),故值為0x00000030。SDRAM 不支持CL=1的情況,所以位[6:4]取值為010(CL=2)或011(CL=3),開(kāi)發(fā)板保守的值為0b11。

  至此,13個(gè)存儲控制器的寄存器全部介紹完了,下面就可以配置各寄存器的值,完成SDRAM初始化,實(shí)現代碼復制到SDRAM中執行的操作(注:同樣的程序速度要比片內SRAM運行的慢)。

  存儲控制器13個(gè)寄存器的設置值:

  mem_cfg_val:

  .long 0x02000000 @BWSCON;此處只用到BANK6對應的[27:24],其它位沒(méi)理會(huì ),想理論上應該可以?

  .long 0x00000700 @BANKCON0;BANKCON0~BANKCON5沒(méi)用到,使用默認值0x00000700

  .long 0x00000700 @BANKCON1

  .long 0x00000700 @BANKCON2

  .long 0x00000700 @BANKCON3

  .long 0x00000700 @BANKCON4

  .long 0x00000700 @BANKCON5

  .long 0x00018005 @BANKCON6

  .long 0x00018005 @BANKCON7

  .long 0x008e07a3 @REFRESH

  .long 0x000000b1 @BANKSIZE

  .long 0x00000030 @MRSRB6

  .long 0x00000030 @MRSRB7

  匯編過(guò)程主要代碼:

  .equ MEM_CTL_BASE, 0x48000000 @ 定義存儲控制器寄存器基址

  .equ SDRAM_BASE, 0x30000000 @ 定義SDRAM起始地址

  .text

  .global _start

  _start:

  bl disable_watch_dog @ 去關(guān)門(mén)喂狗

  bl mem_control_setup @ 去設置存儲控制器

  bl copy_steppingstone_to_sdram @ 復制代碼到SDRAM中

  ldr pc, =on_sdram @ 跳到SDRAM中繼續執行

  on_sdram:

  ldr sp, =0x34000000 @ 設置堆棧,執行C點(diǎn)燈代碼

  bl main

  halt_loop:

  b halt_loop



關(guān)鍵詞: ARM SDRAM

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>