分享

s3c44b0存储器初始化简介

 BeautymengRoom 2013-11-20

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 ,英文的,难~~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约