s3c44b0存储器初始化的问题困扰已久,今日总算是搞了解了点,如下总结吧。
贴段代码先:
SMRDATA 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
格局怎样用的,后来再渐渐看,在该段代码前发现这一段代码:
ldr r0,=SMRDATA
ldmia r0,{r1-r13}
ldr r0,=BWSCON
stmia r0,{r1-r13}
总算才了解,原来是界说了13个4字节数据 用于初始化以BWSCON寄存器开端的接连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指令来操作。所以这便是为什么存储器初始化的操作都是如上的方式。
这篇日志的要点或许并不在这,而在于怎样求的上述分配数据空间所给的初始值。
BWSCON用于界说存储器的数据宽度,因为板子上的flash,sdram都是16bit的,故BSWCON_val=0x01000000
因为只用到板子上的flash为BANK0 sdram为BANK6 故只需设置BANKCON0 BANKCON6。
现给出相关参数及其解说:
Tacs:设置nGCSn有用前地址的树立时刻
Tcos:设置nOE有用前片选信号的树立时刻 //读
Tacc:拜访周期
Tcoh:nOE无效后片选信号的坚持时刻
Tcah:nGCSn无效后地址信号的坚持时刻
Tacp:页模式的拜访周期
PMC:页模式的装备,每次读写的数据数
根据flash芯片手册(sst39vf160-90)得知下列AC CHARACTAR
tRC(min) = 90 ns tACC(max) = 90 ns tCE(max) = 90 ns tOE(max) = 45 ns
根据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 中各参数字段的取值如下:
pllout=40Mhz (板子体系时钟设置为40MHZ)
Tclk = 1 / 40Mhz = 25ns
Tacs = 0/25ns =0 clk
Tcos = 45/25 = 1.8 clk (4clk)(11) (取大于核算的时钟周期是为了使体系运转的更安稳)
Tacc = 45/25 = 1.8 clk (2clk) (001) (同上)
Toch = 0 = 0 clk
Tcah = 0 = 0 clk
MRSRB6,BANKCON6及REFESH各寄存器求值如下:
据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
而据sdram芯片手册,得知其巨细均为8M(B)= 4(bank)*1M*16bit(SDRAM)
至此,有关存储器的初始化的一些数值上的核算算是完了~~
难点仍是时序图的了解吧,其实只需了解了所要用的几个参数段的含义就简单在杂乱的时序图中找出其间的换算联系~~~~要害仍是要看得懂datasheet ,英文的,难~~