s3c2440 存储控制器

  s3c2440存储控制器提供了访问外部设备的信号。比如像nandflash、sram、sdram、dm9000网卡之类的。那么s3c2440存储设备有哪些特性呢?

  — Little/Big endian (selectable by a software)
       支持小字节序、大字节序(通过软件选择)

  — Address space: 128Mbytes per bank (total 1GB/8 banks)
       每个bank地址空间为128,总共八个,即1GB

  — Programmable access size (8/16/32-bit) for all banks except bank0 (16/32-bit)
       编程控制访问总线位度:8/16/32bit,但bank0只有16/32bit两种选择

  — Total 8 memory banks; Six memory banks for ROM, SRAM, etc. Remaining two memory banks for ROM, SRAM, SDRAM, etc .
       总共八个bank,前6个bank支持ROM,SRAM等,剩下的两个支持ROM,SRAM,SDRAM等

  — Seven fixed memory bank start address
       前七个bank的起始地址是固定的。

  — One flexible memory bank start address and programmable bank size
       bank7有灵活的起始地址和可编程的大小

  — Programmable access cycles for all memory banks
       可编程控制所有bank的访问周期

  — External wait to extend the bus cycles
       外部的wait信号可以延长总线的访问周期

  — Supporting self-refresh and power down mode in SDRAM

       外接sdram,支持自刷新和省电模式

 

 

  上面为s3c2440存储控制器的地址空间分布图,分别为不是boot from nandflash 和boot from nand flash两种。s3c2440对外引出了27地址线ADDR0~ADDR26的访问范围只有128MB,这是总共八个bank的每个bank的大小。其次cpu对外引出了八个片选信号nGCS0~nGCS7。这样总共有1GB的访问空间。

 

  上面提到s3c2440的bank6、7的地址空间大小是可编程控制的,上面便是不同的空间大小分配情况。当时请注意,bank6和bank7的大小分配必须要是相同的。

 

  bank0可配置为16bit或者32bit宽度。bank0是作为启动rom,所以其总线宽度应该在第一次访问之前被确定,由OM[1:0]的电平决定。

  有关于内存地址引脚连接,如SROM/SDRAM,如数据位宽为8bit,A0对应存储芯片的ADDR0,16bit位宽,A1对应ADDR0,32bit位宽,A2对应ADDR0。为什么要这样做呢?这样可以确保唯一的地址访问唯一的内存区域,比如对应32bit数据位宽来说,如数据在[0:3]地址为100,对于发地址信号0、1、2、3都是相同的,因为他们访问了同一个内存区域。

  对于各个bank上面连接的类存储设备,可以根据其位宽、存储容量和bank数目决定bank地址线的连接方式,如64MB、32 bit位宽和128MB内存的bank地址为来自于A[25:24]。

 

  下面看下我的开发板jz2440开发板上的存储控制器的八个bank的使用情况:

    bank0 接nor flash MX29LV800BBTC;

    bank1、bank3与bank5 为接上外部扩展插座

    bank2 未接设备

    bank4 外接DM9000A网卡

    bank6 外接sdram 两个32M的 K4S561632N

    bank7 未接设备

  现在看下具体的各个寄存器,存储控制器涉及到13个寄存器,这里bank6的sdram初始化做解释。

    1. BUS WIDTH & WAIT CONTROL REGISTER (BWSCON) 总线宽度和等待信号控制寄存器

 

     

  

      这个寄存器主要用来决定8个bank设置方法相同,比如我的板子上面bank6接了64MB的16bit的sdram,则[27:24]对应位为0010,STx::sdram设为0,sram设为1;至于等待信号通常设为0。

      至于bank0的设置是只读的,开机时根据OM[1:0]确定,上面已有提到。

    2. bank控制寄存器,主要分为两类,一类为bank0~5不可以支持sdram的,另一类为bank6~7可以支持sdram的。

  

     这是用来设置bank0~bank5的访问时序,此不支持sdram,根据具体接入设备设置各个时间参数即可,这涉及到阅读外设的芯片的工作。

 

    首先设置外接存储设备的类型,MT表示存储设备类型,这里是sdram,bit[16:15]为11,已经确定为sdram类型,只用考虑bit[3:0];

    Trcd设置RAS to CAS delay,查看芯片手册,最小值为20ns,我们这里设置的时钟为100MHZ,1clock约为10ns,这里使用3clock即可,稍微大于临界值比较好,设置即01;

    SCAN设置,我这里使用的sdram的column为9bit,所以设置为01。

  3. 刷新控制寄存器

 

    REFEN[23]:0 = 禁止sdram刷新,1=使能sdram刷新,此处设为1使能;

    TREFMD[22]:sdram刷新模式,0=CBR/Auto刷新,1=自刷新模式,这里设为0模式;

    Trp[21:20]:此sdram的trp值最小为20ns,此处我设为3clock,1clock10ns,稍微大于临界值,即01;

    Tsrc[19:18]:此sdram的trc最小值为65,此处设为7clock,时间70ns,即11

    Refresh Counter[10:0]:设置Refresh count,此处存储控制器的时钟频率为100MHZ,从sdram芯片上面找到64ms refresh period (8K Cycle),由上述公式count=2^11+1-100*64000/8192=0x008c04F2。

  4. BANKSIZE寄存器REFRESH

  

    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]:bank67大小可变,但是必须连续并且相等,我的bank6接sdram为64MB,bank67应设为64MB/64MB,虽然bank7没有使用。

  5. 最后的MRSRBx模式设置寄存器

  

    CL[6:4]:可以修改的此值,也是和sdram的时序有关,看芯片手册,这里只支持2和3两种情况,这里设置为2clock,即0x30;

 

  以上就是本人对于s3c2440存储控制器的理解,如发现错误!请帮助纠正,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波罗学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值