嵌入式linux学习笔记 1-12 内存控制器与SDRAM

目录

1. 内存控制器的概念

2. 内存控制器与不同位宽的内存关于地址位的连接

3.芯片的访问地址范围怎么看

3.时序图分析

4.SDRAM

关于SDRAM的内容参考下面这个链接的SDRAM部分。

原文链接:https://blog.csdn.net/qq_51118175/article/details/114882036


1. 内存控制器的概念

        CPU通过访问内存地址查看或修改各种寄存器,从而控制各个引脚接口的输入输出。CPU和各个寄存器之间还有一个控制单元叫内存控制器。内存控制器会根据地址选择不同的模块 ,并把数据发给这个模块或从这个模块中得到数据返回给CPU(会有引脚LnOE/LnWE确定数据的传输方向,是CPU==>外设 or CPU<==外设)。

        内存模块通过片选引脚(GCS chip select)与内存控制器相接,内存控制器读CPU发出的指令的地址,根据不同的地址发送不同的片选信号(GCSn), 只有被选中的芯片会工作。GPIO,UART,IIC,SDRAM,DM9000,NOR等都属于CPU的统一编址,NandFlash比较特殊,不参与CPU统一编址,有单独的控制器,只有CPU访问控制器中的某寄存器时才会发出片选信号(CE chip enable)选中nand flash。

2. 内存控制器与不同位宽的内存关于地址位的连接

        如图,fig5-4当连接的是8-bit的ROM时,内存控制器发出的A0~A15与8bitROM的A0~A15一一对应,fig5-5 fig5-7当连接的是16-bitROM/2*8bitROM时,内存控制器是从A1开始与内存的A0开始依次相连,fig5-11当连接的是2*16bitROM时,内存控制器是从A2开始与内存的A0开始依次相连。

Q:为何内存的位宽不同,地址线的接法会有差异?

        如下图所示,8bitROM每次读取数据都是以1字节为单位,16bitROM每次读取数据都是以2字节为单位,32bitROM每次读取数据都是以4字节为单位,当取的地址为0x00000003对于8bitROM改地址在内存的第一个单元格内,对于16BitROM,在第2个单元格内,对于32bitROM则在第一个单元格内。因此8bitROM是地址位是一一对应的关系,位宽每翻倍,内存控制器的地址位会左移一位,(eg. A0-A0 ==> A1-A0),内存控制器根据地址取内存中的值,8bitROM则返回8bit数据,16bitROM则返回16bit数据。CPU拿到数据后,再根据没有接内存的地址引脚来判断(eg. 若A1==>A0,则看没接的A0是多少),取返回数据中的具体某一字节使用。

 若CPU某一地址的4字节数据,对于8bitROM,每次只能读1个字节,需要由内存控制器读4次,然后将4次的值整合,发回给CPU,16bit则是读2次,32bit读一次。因此,总结来说,内存控制器要根据连接的内存位宽以及CPU需要的数据大小,做读取内存和整合数据的操作。

3.芯片的访问地址范围怎么看

step1: 根据片选引脚(nGCSN)确定基地址

        eg. 若芯片上片选引脚为nGCS4,则由下图可知基地址为0x2000_0000

step2: 根据芯片所接地址线(LADDRN)确定范围,看LADDR有多少跟线接到了芯片上

        eg. 如图,只有LADDR2接到了芯片上,且看LDATA判断这是一个16bit的芯片,所以另外只需未接上的LADDR0来判断需要的数据是16bit中是高8位还是低8位。基地址是0x2000_0000,所以范围为0x2000_0000 ~ 0x2000_00101

 

3.时序图分析

一个问题:所连接的这些线是如何协同工作的?
2440和Nor Flash 之间有地址线,数据线,还有各种数据线连接。

nCS:片选信号
nOE:读信号(output enable)
nWE:写信号 (write enable)
nreset:复位引脚

        以Nor Flash为例,分析下如何设置它的时序。

        如图是S3C2440的Nor Flash控制器的读时序图,里面很多参数都需要根据外接芯片的性能进行设置,有的芯片性能好、响应时间快,就可以把参数时间设置小一点,释放更好的性能。

        如下图为可编程访问周期,从左往右读,先发出地址信号,再发出片选信号,再发出读信号,然后数据才有效,可以把数据读走,接着释放读信号,接着释放片选信号,最后才可以开始新的地址周期。

        如下图是Nor Flash芯片的读时序。



        我们需要做的就是设置S3C2440的Nor Flash控制器时序去满足Nor Flash芯片的时序。每个参数的参考范围可以通过AC CHARACTERISTICS得到。



Taa:发出address后多长时间data才有效
Tce:接收到片选信号,能保证经过70ns之后肯定能提供数据
Toe:多长时间之后才有效
Tdf:数据输出浮动。辨明释放后段时间不能再运行其他芯片,因为信号还没有稳定(Tdf一般不用管)
Toh:数据保持时间,为0,表示不需要在数据线上保持那些数据
Trc:读周期时间,即每读一次所需要花费的时间

结合Nor Flash芯片的两张图,可以得到如下信息:

    发出地址数据(Addresses)后,要等待Taa(要求大于等于70ns)时间,地址数据才有效;
    发出片选信号(CE#)后,要等待Tce(要求大于等于70ns)时间,片选信号才有效;
    发出读信号(OE#)后要等待Toe(要求大于等于30ns)时间,读信号才有效;

        为了简单我们把地址数据(Addresses),片选信号(CE#),读信号(OE#),同时发出,然后让它们都等待70ns(等待信号有效)。对应S3C2440的Nor Flash控制器的读时序图,需要让地址信号A[24:0]、片选信号nGCS、读信号nOE同时发出,保持Tacc大于等于70ns。

        查阅S3C2240的参考手册,Nor Flash是接在BANKCON0上的,因此只需要设置BANKCON0即可。


可以看到Tacc上电初始值是111,对应14个clocks。系统上电采用12MHz的晶振,HCLK=12MHz,Tacc=(1000/12*14)≈1166ns,这个值很大,几乎可以满足所有Nor Flash的要求。

启动后,将HCLK设置为100MHz,T=1000/100=10ns,Tacc需要大于等于70ns,因此设置Tacc等于101,8个clocks即可。

4.SDRAM

        根据2440的芯片手册,配置bank6的SDRAM。由于是sdram,所以将BANKCONn的[16:15]配置为11,[14:4]也与sdram无关,只需要配置[4:0]

         查看sdram的芯片手册,可以看到列地址是从A0~A8, 共九位,所以[1:0]为01 9-bit。

        另外,内存控制器会先发行地址再发列地址,当中会有一个延迟(RAS to CAS delay),查看芯片手册可知。当HCLK为100MHz时,即一个时钟周期为10ns, 当我们取Trcd=20ns 时,即为两个时钟周期,所以[3:2]为00。

        由于sdram储存数据,需要周期性地充电才能存下数据。所以需要通过寄存器配置刷新周期。

         然后是第四个寄存器banksize register。

         最后一个寄存器MSMR,除了[6:4]其他位都定死了。CASlatency为发完列地址与发数据之间的间隙,由于芯片的性能问题,发完列地址并不是马上数据就能发出来的。所以要约定好发完列地址之后,多少个时钟周期后发数据。

 

关于SDRAM的详细内容参考下面这个链接的SDRAM部分。

原文链接:https://blog.csdn.net/qq_51118175/article/details/114882036

        

        以下摘自《高手进阶,终极内存技术指南——完整/进阶版》,可以帮助理解SDRAM的概念、工作原理,更好地看懂时序图。

        货物基地(主板)连接着物资(数据)的供求方。基地的货物调度厂房(北桥芯片)掌
管着若干个用于临时供货/生产与存储的仓库基地(P-Bank),它们通常隶属于某一仓储集
团(DIMM),这种基地与调度厂房之间必须由64 条传送带联系着(P-Bank 位宽),每条传
送带一次只能运送一个标准的货物(1bit 数据),而且一次至少要传送64 个标准货物,这
是它们之间的约定,仓库基地必须满足。

        上图就是这样的一个仓库基地(P-Bank),它由4 个大仓库(内存芯片)组成,它们的
规模都相当大,每个大仓库为基地提供16 条传送带(芯片位宽为16bit),总共加起来刚好
就是64 条。每个大仓库里都有四个规模和结构相同的子仓库(L-Bank),它们都被统一编了
号。而子仓库中有很多层(行),每层里又有很多的储藏间(列),每个储藏间可以放置16
个标准货物,虽然子仓库的规模很大,但每一层和每一个房间也都编好了号,而且每一层都
有一个搬运工在值班。
        为了与外界联系方便,仓储集团与调度室设置了专线电话,和一个国家一样,每个仓库
基地有一个区号(片选),另外还有四个子仓库号码(L-Bank 地址),是所有大仓库共享
的,一个号码对应所有大仓库中编号相同的子仓库。而专线电话的数量也是四个,这样可保
证与某个子仓库通话时不会妨碍给其他子仓库打电话。在子仓库的每层则设立分机给搬运工
使用。子仓库的楼下就是传送带,找到货物把它扔到上面。但每个大仓库只有一个传送带,
也就是说同一时间内只能有一个子仓库在工作。每个子仓库都有一个自己的生产车间(读出
放大器)负责指定货物的生产,并且每个大仓库都有一个外运站(数据输出寄存器)和寄存
托运处(数据输入寄存器与写入驱动器)与传送带相连,前者负责货物的输出中转,后者负
责所接受货物并寄存然后帮助搬运工运送到指定储藏间。那么它是如何与调度厂房协同工作
的呢?
1、需求方有货物请求了,这个请求发送到调度厂房,调度人员开根据货主的要求
给指定的子仓库打电话,电话号码是:区号+子仓库号码+楼层分机(片选+L-Bank
寻址+行有效/选通)。那一层的搬运工接到电话后就开始准备工作。
2、当搬运工点亮所有储藏间的门牌(tRCD)之后,调度人员会告诉搬运工,货物
放在哪个储藏间里(列寻址),如果货物很多,并且是连续存放的,调度员会
通知搬运工:“一会儿要搬的时候,从起始房间开始连续将后面的n 个房间的
货物都搬出来,我就不再重复了”(突发传输)。但是,他告诉搬运工要等一
下,要求所有大仓库的人员统一行动,先别出货。
3、根据事先的规定,搬运工在经过指定的时间后开始将货物扔到传送带上,传送
带开始运转并将货物送到生产车间,由它来复制出全新的货物,然后再送到传
送带上通过外运站向调度厂房运去。人们通常把从搬运工找到具体储藏间开始,
到货物真正出现在送往调度厂房的传送带上的这段时间称之为“输出潜伏期”
(CL),而从值班人把货物扔到传送带到货物开始传向调度厂房的这段时间,
被称为“货物输出延迟”(tAC),它体现了值班人员的反应时间和生产车间的
效率,也影响着仓库基地所在集团(DIMM)的名声。
4、在这个搬运工工作的同时,由于电话对于编号相同的子仓库是并联的,所以其
他子仓库相同楼层的搬运工也收到相同的命令,从相同编号的房间搬出货物,
运向各自的生产车间。此时,同一批货物同时出现在各自的16 条传送带上,并
整齐地向调度厂房运去。
5、当货物传送完后,原始货物还要送回储藏间保管,这是必须的,但如果没有要
求,货物可以一直保留在生产车间,如果再有需要就再生产,而不用再麻烦搬
运工了(读出放大器相当于一个Cache)。调度人员接着会进行下一批货物的
调度,当他发现下一批货物在上次操作的子仓库中,但不在刚才通话的那一层,
只能再重新拨电话。这时,他通知各子仓库货物翻新运回,清理生产车间,之
后挂断电话(预充电命令),这一切必须要在指定时间里(tRP)完成,然后才
能给新的楼层打电话。搬运员接到通知后,就将这一 层中所有房间的货物都拿
到生产车间进行翻新(没有货物的就不用翻新),然后再搬回储藏间。干完这
一切之后,搬运工挂了电话(关闭行)就可以休息了,他们称这种工作为“货
23
物清理返运”(预充电)。这个工作的速度也要快,否则同样会影响集团名声。
当然,这个工作可以让搬运工自动完成(自动预充电),只需调度员在当初下
搬运指令时提醒一他:“货物运送完了,就进行货物清理返运吧,我不管了”
(用A10 地址线)。
6、当有货物要运来存储时,调度员在向子仓库发送货物的同时就给指定的楼层打
电话,让他们准备好房间,此时货物已经到了寄存托运处,没有任何的运送延
迟(写入延迟=0),搬运工在托运间的帮助下,向指定的储藏间运送货物,这
可需要一定的时间了,他们称之为货物堆放时间(tWR),必须给足搬运工们这
一时间,而不能在这期间里让他们干其他的工作,否则他们会令货物丢失并罢
工…… 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值