内存控制器

tiny4412之内存控制器工作时序(DDR3 SDRAM)(二)

半腔热情 提交于 2020-02-13 11:01:52
Table of Contents 一、SDRAM 简易工作流程 二、tRCD 行列延迟RAS to CAS Delay 三、 CL(RL,Read Latency)读取潜伏期 四、tWR 写延迟 五、突发长度--(Burst Lengths) 六、预充电时间tRP 七、刷新时间 八、例说 一、SDRAM 简易工作流程 二、 tRCD 行列延迟 RAS to CAS Delay 行地址确定之后,就要对列地址进行寻址了。读写的信号和列地址是同时发过来的,读写的操作取决于WE#引脚,当他使能则为写,否则为读。 在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为 tRCD,即 RAS to CAS Delay (RAS 至 CAS 延迟),大家也可以理解为行选通周期,简单说就是, 发完行地址再延迟tRCD时间发送列地址 ,这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定的延迟。 广义的 tRCD 以时钟周期(tCK,Clock Time)数为单位,比如 tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时间,则要根据时钟频率而定,对于PC100 SDRAM,tRCD=2,代表1000/100 * 2 = 20ns 的延迟,下图是tRCD=3的时序图。 三、 CL(RL,Read Latency) 读取潜伏期 在选定列地址后

S3C2440-裸机篇-08 | 使用S3C2440操作SDRAM(配置内存控制器)

删除回忆录丶 提交于 2020-01-30 03:09:13
1. 前言 提起SDRAM,大家都会觉得太难了,要编程写出SDRAM的控制时序更是难上加难,对的,没错!一年前我也是这样想的,学习这一节内容的时序觉得非常难,视频看了好几遍不太懂,对于SDRAM的控制原理更是没看懂,一年后回过头来再看视频,茅塞顿开,看不懂的原因是因为:我自己把它想的太难了,其实, 它很简单,总共也就5行代码,设置5个寄存器即可 。 简单的原因要归功于S3C2440内部的内存控制器,它的作用就是 负责向外部扩展的存储类设备提供控制信号 ,所以当CPU要去访问属于SDRAM时,只需要去访问属于SDRAM的映射地址即可,内存控制器会发出信号,控制时序去和SDRAM打交道,写入数据或者是读出数据。 尽管我们不用手写操作时序了,我们仍然要 编写程序去控制时序 。 因为S3C2440的内存控制器是普遍的,不可能只能接一种SDRAM芯片,而是所有的SDRAM芯片都可以接,但是 不同厂商的SDRAM芯片性能有差异 ,也就是说,虽然所有SDRAM芯片的控制时序都一样,但是A厂商生产的SDRAM芯片在发出控制信号之后70ns之后才有数据,B厂商生产的SDRAM芯片在发出控制信号后60ns就有有效数据,这就叫做不同的SDRAM芯片的性能不同。 所以内存控制器设置了一些寄存器, 允许用户根据实际接的SDRAM芯片性能去配置具体的时间参数即可 ,称之为SDRAM初始化或者内存控制器初始化

s3c2440裸机-内存控制器(四、SDRAM原理-cpu是如何访问sdram的)

对着背影说爱祢 提交于 2019-12-16 12:20:25
1.SDRAM原理 (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=2^20*2^6=2^26,那么需要26条地址线,再看看原理图,我们发现SDRAM的地址线A[12:0]只有13条,那么最多只能访问2^13=8K的数据,地址线明显配不上这么大的容量

s3c2440裸机编程-内存控制器(二、不同位宽设备的连接)

妖精的绣舞 提交于 2019-12-10 11:44:57
不同位宽设备的连接 我们先看一下2440芯片手册上外设rom是如何与CPU地址总线连接的。 8bit rom与CPU地址线的连接 8bit*2 rom与CPU地址线的连接 8bit*4 rom与CPU地址线的连接 16bit rom与CPU地址线的连接 16bit*2 rom与CPU地址线的连接 从上面的图中,我们知道可以对2片位宽为8bit的外设扩展级联成1个16bit的外设,同理可用4片位宽为8bit的外设进行级联成1个32bit的外设... 从上面的图中,我们还看见一个规律: 当外设总线位宽为8bit时, 外设A0接CPU的地址总线ADDR[0], A[1]->ADDR[1] ...A[15]->ADDR[15] 当外设总线位宽为16bit时,外设A0接CPU的地址总线ADDR[1], A[1]->ADDR[2] ...A[15]->ADDR[16] 当外设总线位宽为32bit时,外设A0接CPU的地址总线ADDR[2], A[1]->ADDR[3] ...A[15]->ADDR[17] 那么为什么要这样设计呢? 我们先看一个例子: 假设CPU执行: MOV R0, #3 LDRB R1, [R0] @ 从内存地址为3的地方,读出一个字节 如图有8bitROM、16bitROM、32bitROM (1)对于8bitROM ,8bit是一次读写的最小单位

s3c2440裸机编程-内存控制器(一、内存接口概念)

痴心易碎 提交于 2019-12-09 13:26:56
1.内存接口概念 S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚(GPA-GPH)),有串口控制器 (接有TXD RXD引脚),有memory controller内存控制器,有Nand控制器等... 1.不同类型的控制器: (1)GPIO控制器属于门电路,不涉及到时序,相对简单。 (2)串口控制器属于协议类接口,类似的协议类接口还有iic、iis、spi等。 (3)前面的GPIO/门电路接口、协议类接口,都不会把地址输出到外部设备,仅仅只是将地址写入到相应的控制器。 接下来的内存类接口,会把地址输出到外部,cpu将地址写入内存控制器,内存控制器还需访问外部设备,比如NorFlash、网卡、SDRAM。 2.CPU是如何访问各个不同的寄存器的呢? GPIO/门电路接口、协议类接口、内存类接口都属于CPU的统一编址。但对于Nand Flash,它没有独立的地址线和cpu的地址总线相连接,因此它不参与CPU的统一编址。 (1)对于门电路接口、协议类接口,直接访问寄存器即可。 (2)对于内存类接口,交给内存控制器去处理。下面详细分析: CPU只管发出一个地址,内存控制器根据该地址范围选择不同的模块,然后从模块中得到数据或者发送数据到模块中。 如下图,SDRAM、DM9000网卡、Nor Flash都接在JZ2440的数据总线和地址总线上,CPU把数据和地址发送出去