s3c44b0存儲器初始化簡介
貼段代碼先:
本文引用地址:http://cafeforensic.com/article/201611/323259.htmSMRDATA DATA
DCD BWSCON_val ;bank0=OM[1:0] bank1-bank7=16bit bank2=8bit
DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC));bankcon0
DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC));bankcon1
DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC));bankcon2
DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC));bankcon3
DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC));bankcon4
DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC));bankcon5
DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) ;bankcon6
DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) ;bankcon7
DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT) ;refresh register
DCD 0x16 ;SCLK power mode bank6/7size=8M/8M
DCD 0x20 ;MRSR6 CL=2clk
DCD 0x20 ;MRSR7
ALIGN
ADS1.2下的存儲器初始化代碼。剛開始看到的時候一頭霧水,因為不懂的:SMRDATA DATA 。。。ALIGN
格式怎么用的,后來再慢慢看,在該段代碼前發(fā)現(xiàn)這一段代碼:
ldr r0,=SMRDATA
ldmia r0,{r1-r13}
ldr r0,=BWSCON
stmia r0,{r1-r13}
總算才明白,原來是定義了13個4字節(jié)數(shù)據(jù) 用于初始化以BWSCON寄存器開始的連續(xù)13個寄存器。
BWSCON=0x01c80000 BANKCON0=0x01c80004 BANKCON1=0x01c80008
BANKCON2=0x01c8000c BANKCON3=0x01c80010 BANKCON4=0x01c80014
BANKCON5=0x01c80018 BANKCON6=0x01c8001c BANKCON7=0x01c80020
REFRESH=0x01c80024 BANKSIZE=0x01c80028 MRSRB6=0x01c8002c
MRSRB7=0x01c80030 這13個寄存器用于存儲器的讀寫時鐘及刷新等的設置,且只能用STMIA指令來操作。所以這就是為什么存儲器初始化的操作都是如上的形式。
這篇日志的重點也許并不在這,而在于怎么求的上述分配數(shù)據(jù)空間所給的初始值。
BWSCON用于定義存儲器的數(shù)據(jù)寬度,由于板子上的flash,sdram都是16bit的,故BSWCON_val=0x01000000
由于只用到板子上的flash為BANK0 sdram為BANK6 故只需設置BANKCON0 BANKCON6。
現(xiàn)給出相關參數(shù)及其解釋:
Tacs:設置nGCSn有效前地址的建立時間
Tcos:設置nOE有效前片選信號的建立時間 //讀
Tacc:訪問周期
Tcoh:nOE無效后片選信號的保持時間
Tcah:nGCSn無效后地址信號的保持時間
Tacp:頁模式的訪問周期
PMC:頁模式的配置,每次讀寫的數(shù)據(jù)數(shù)
依據(jù)flash芯片手冊(sst39vf160-90)得知下列AC CHARACTAR
tRC(min) = 90 ns tACC(max) = 90 ns tCE(max) = 90 ns tOE(max) = 45 ns
依據(jù)flash讀時序和s3c44b0存儲器操作時序圖得知:
Tacs = tACC - tCE = 90 - 90 =0
Tcos = tCE - tOE = 90 - 45 = 45 ns
Tacc = tRC - tACC +tOE = 90 - 90 + 45 = 45 ns
Toch = 0
Tcah = 0
并通過s3c44b0手冊上如下描述:All types of master clock in this memory controller correspond to the bus clock. For example, MCLK in DRAM and SRAM is same as the bus clock, and SCLK in SDRAM is also the same as the bus clock. In this chapter (Memory Controller), one clock means one bus clock.
可知:存儲器操作周期與總線時鐘頻率的關系,故可知道BANKCON0 中各參數(shù)字段的取值如下:
pllout=40Mhz (板子系統(tǒng)時鐘設置為40MHZ)
Tclk = 1 / 40Mhz = 25ns
Tacs = 0/25ns =0 clk
Tcos = 45/25 = 1.8 clk (4clk)(11) (取大于計算的時鐘周期是為了使系統(tǒng)運行的更穩(wěn)定)
Tacc = 45/25 = 1.8 clk (2clk) (001) (同上)
Toch = 0 = 0 clk
Tcah = 0 = 0 clk
MRSRB6,BANKCON6及REFESH各寄存器求值如下:
據(jù)HY57V641620HGT -7芯片手冊,SCAN = 00 column address number = 8-bit (Column addrdess:CA0~CA7)
Trcd = 20 ns CL = 2 clk Fsdram = 100MHZ T=10 ns 所以
Trcd = 20/10 = 2 clk (01) Trp = 2 clk(00) Trc = 7clk(11)
同樣,查看s3c44b0芯片手冊:
Refresh period(us) = (2^11 - refresh_count +1)/MCLK(Mhz)
4096 refresh cycles / 64ms
refresh period(us) = 64ms/4096 = 15.625 us
MCLK = 40 Mhz
refresh_count = 1424
BWSCON_val= 0x11110090
而據(jù)sdram芯片手冊,得知其大小均為8M(B)= 4(bank)*1M*16bit(SDRAM)
至此,有關存儲器的初始化的一些數(shù)值上的計算算是完了~~
難點還是時序圖的理解吧,其實只要理解了所要用的幾個參數(shù)段的意義就容易在復雜的時序圖中找出其中的換算關系~~~~關鍵還是要看得懂datasheet ,英文的,難~~
評論