嵌入式linux學習筆記(三)-儲存控制器
一、使用儲存控制器訪問外設的原理
1、s3c2440的位址空間
s3c2440對外引出27根位址線addr0-addr26,訪問範圍只有128mb,cpu對外還引出8根片選訊號ngcs0-ngcs7,對應bank0-bank7,當訪問bankx的位址空間時,ngcsx引腳輸出低電平來選中外接裝置。
左邊是ngcs0片選的nor flash啟動模式下的儲存分配圖,右邊是nand flash啟動模式下的儲存分配圖
s3c2440是32位cpu,可以使用的位址範圍理論達到4gb,除去上面連線外設的1gb空間外,還有一部分是cpu內部暫存器的位址,剩下的位址空間沒有使用。
2、儲存控制器與外設的關係
bank0-bank5的連線方式類似,bank6連線sdram時複雜一些,sdram內部是乙個儲存陣列,指定乙個行,再指定乙個列,就可以準確找到所需要的單元格,而sdram有4個邏輯**(l-bank)
那麼sdram的訪問步驟為:
1)cpu發出片選訊號nscs0(與ngcs6是同一引腳)有效,選中sdram晶元
2)sdram有4個l-bank,需要兩個位址訊號來選中其中乙個,即addr24、addr25,如下圖
3)對被選中的晶元進行同一的行/列(儲存單元)定址
根據sdram晶元的列位址線數目設定cpu相關暫存器後,cpu會從32位位址中自動分出l-bank選擇訊號、行位址訊號、列位址訊號,然後先後發出行位址訊號、列位址訊號。l-bank選擇訊號在發出行位址訊號的同時發出,並維持到列位址訊號結束
如上圖:行位址、列位址公用位址線addr2-addr14,使用nsras(r=row)、nscas(c=column)兩個訊號來區分它們,當nsras訊號有效時,addr2-addr14發出的是行位址,對應位址空間bit[23:11],當nscas訊號有效時,addr2-addr14發出的是列位址,對應位址空間bit[10:2]。
4)找到儲存單元後,被選中的晶元就要進行統一的資料傳輸。
開發板使用兩片16bit的sdram晶元併聯形成32位的位寬,與cpu的32根資料線data0-data31相連,bank6的起始位址位0x30000000
3、儲存控制器的暫存器使用方法
儲存控制器共有13個暫存器,bank0-bank5只需要設定bwscon和bankconx兩個暫存器,bank6、bank7外接sdram時,還要設定refresh,banksize,mrsrb6,mrsrb7,等4個暫存器,下面分別說明
1)位寬和等待控制暫存器bwscon
bwscon中每四位控制乙個bank,最高4位對應bank7、接下來4位對應bank6,依次類推,如下圖
stx:啟動/禁止sdram的資料掩碼引腳
wsx:是否使用儲存器的wait訊號
dwx:設定對應bank的位寬,0b00對應8位,0b01對應16位,0b10對應32位,0b11表示保留
比較特殊的是bank0,它沒事st0和ws0,dw0唯讀,由硬體跳線決定,0b01表示16位,0b10表示32位,bank0只支援16、32兩種位寬
所以可以確定bwscon暫存器值為:0x22011110
2)bank控制暫存器bankconx(x為0-5)
這些暫存器用來控制bank0-bank5外接裝置的訪問時序,使用預設0x0700即可
3)bank控制暫存器bankconx(x為6-7)
mt[16:15]:設定bank外接rom/sram還是sdram,00=rom/sram,01=保留,10=保留,11=sdram
mt=0b00時,與bankcon0-bankcon5類似
mt=0b11時,
trcd[3:2]:ras to cas delay,設為推薦值0b01
scan[1:0]:sdram的列位址數,本開發板使用的sdram列位址數為9,0b00=8位,0b01=9位,0b10=10位
所以本開發板,bankcon6/7均設為0x00018005
4)重新整理控制暫存器refresh
refen[23]: 0=禁止sdram的重新整理功能,1=開啟sdram的重新整理功能
trefmd[22]: sdram的重新整理模式,0=cbr/auto refresh,1=selfrefresh
trp[21:20]: sdram ras預充電時間 00=2 clocks,01=3clocks,10=4clocks,11=不支援
tsrc[19:18]: sdram半行週期時間 00=4clocks,01=5clocks,10=6clocks,11=7clocks,sdram行週期時間trc=tsrc+trp
refresh counter[10:0]: sdram重新整理計數,重新整理時間=(2^11+1-refresh_count)/hclk,在未使用pll時,hclk=晶振頻率12mhz,重新整理周期為7.8125us
refresh_count=2^11+1-12*7.8125=1955
refresh=0x008c0000+1955=0x008c07a3
5)banksize暫存器
burst_en[7]: 0=arm核禁止突發傳輸,1=arm核支援突發傳輸
scke_en[5]: 0=不使用scke訊號令sdram進入省電模式,1=使用scke訊號令sdram進入省電模式
sclk_en[4]: 0=時刻發出sclk訊號,1=僅在方位sdram期間發出sclk訊號
bk76map[2:0]: 設定bank6/7的大小,0b010=128mb/128mb,0b001=64mb/64mb,0b000=32m/32m,0b111=16m/16m,0b110=8m/8m,0b101=4m/4m,0b100=2m/2m
本開發板外接64mb的sdram
則本開發板banksize設為0xb1
6)sdram模式設定暫存器mrsrbx(x為6-7)
cl[6:4]: 0b000=1clocks,0b010=2clocks,0b011=3clocks
本開發板取0b011,所以mrsrb6/7取值為0x30
二、儲存控制器操作例項:使用sdram
從nand flash啟動cpu時,cpu會通過內部的硬體將nand flash開始的4kb資料複製到成為"steppingstone"的4kb的內部ram(起始位址為0)中,然後跳到位址0開始執行。
本程式先設定好儲存控制器,使外接的sdram可用,然後把程式本身從steppingstone複製到sdram中,最後跳到sdram中執行
儲存控制器
在s3c2410 s3c2440中,儲存控制器提供了訪問外設 所需的訊號。其中,位址線addr0 addr26的訪問範圍為128m,此外cpu還對外引出了8根片選訊號,ngsc0 ngsc7,對應於bank0 bank7,如此一來,位址空間達到了1g。每乙個bank其實可以對應一種外設。比如 ban...
儲存控制器
個人看資料的理解,可能有誤,歡迎指正 這一部件是用於擴充套件的外設的,它所產生引導出的rom的8個bank是應用於擴充套件的外設 如網絡卡,sdram等 使得這些擴充套件外設可以通過匯流排形式來訪問擴充套件的外設。對於32位cpu,它可使用的位址範圍達到4gb。其中的1gb就是該部件所引申對應的,另...
ARM 儲存控制器
初入領悟 1 bank l bank的概念 2 s3c2440內部管理sdram暫存器配置 frist part 原理分析 s3c2440為32位微處理器,其可訪問空間為4g 但其中提供1g外設訪問空間,這1g空間有8個bank組成 及平均每個bank有128m的訪問空間 其中8bank的特性為 1...