zoukankan      html  css  js  c++  java
  • s3c2440裸机-内存控制器(四、SDRAM原理-cpu是如何访问sdram的)

    1.SDRAM原理

    black
    (1)SDRAM内部存储结构

    (2)再看看与2440连接的SDRAM原理图

    sdram引脚说明:

    A0-A12:地址总线
    D0-D15:数据总线(位宽16,2片级联成位宽32)
    BA0-BA1:bank选择
    nSCS:片选
    nSRAS:行地址选择
    nSCAS:列地址选择
    nWE:写使能
    SCLK:时钟
    SCKE:时钟使能
    

    (3)SDRAM的地址范围:

    之前我们讲“二、不同位宽外设与CPU地址总线的连接”这一节的时候,我们留下了一个问题,SDRAM的地址范围是多少?

    我们知道地址范围肯定是base_addr + size。我们根据片选接了nGCS6,base_addr=0x3000,0000,那么size是多大呢?
    下图是我截取的sdram手册上的特性描述:

    我们看见容量为:4M word x 16-bit x 4-bank = 32M,再看原理图我们是两片级联,所以容量为4M word x 32-bit x 4-bank=64M。所以地址范围是[0x3000_0000 ~ 0x33ff_ffff]

    (4)SDRAM数据访问原理:

    我们知道64M=220*26=226,那么需要26条地址线,再看看原理图,我们发现SDRAM的地址线A[12:0]只有13条,那么最多只能访问213=8K的数据,地址线明显配不上这么大的容量,那么它是如何解决的呢?

    答:当然是拆分地址了,地址分多次传输。我们从SDRAM的内部存储结构得知要确定SDRAM的一个存储单元,先确定是哪个bank,然后再确定在哪一行、哪一列即可。

    SDRAM有4个bank,由BA0、BA1决定选中哪个bank,查看SDRAM手册见下图;

    然后通过选中nSRAS选中行地址,从而发送行地址;最后通过选中nSCAS选中列地址,从而发送列地址。

    举个栗子:
    CPU执行如下指令:

    ldr	r0, =0x30000000;
    ldr r1, [r0]; 从SDRAM基地址读取4byte数据
    

    过程分析:

    1.发出片选信号nGCS6,选中SDRAM
    2.发出bank选中信号(BA0,BA1),确定是SDRAM上的哪个bank,从原理图得知CPU的ADDR24、ADDR25对应SDRAM上的BA0,BA1,所以让BA0、BA1=00,选中bankA。
    

    从SDRAM手册确定行列地址的数目,如下图:

    3.发出行地址信号nSRAS,使能行地址传输。传输行地址,确定是哪一行(看SDRAM手册确定行地址数(A12-A0)13条)
    
    4.发出列地址信号nnSCAS,使能列地址传输。传输列地址,确定是哪一列(看SDRAM手册确定列地址(A8-A0)9条)
    

    从而发送完整的0x30000000地址到了SDRAM,SDRAM返回4byte数据给CPU。

  • 相关阅读:
    Linux使用退格键时出现^H解决方法
    Linux centos7下php安装cphalcon扩展的方法
    Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
    在Vmware中安装CentOS7
    php stomp.dll 下载地址
    WIN7 64位系统安装JDK并配置环境变量
    SVN如何将版本库url访问地址中的https改为http
    两个日期这间的间隔天数
    vi/vim 命令速查手册
    判断PC或mobile设备
  • 原文地址:https://www.cnblogs.com/fuzidage/p/12023742.html
Copyright © 2011-2022 走看看