之前学过DDR然后断更了,现在买了个明德扬的视频课来重新学习下,付费就是赚便宜,开源骚客的也挺好,大家自己看着选择吧,个人听明德扬比较习惯(没收广告费哈哈哈)
SDRAM理解:
下图可以帮助大家理解SDRAM是原理,个人理解很像程序语言的数组的概念,其实就是把一个存储器分成了几个bank,一个bank里面可以存储一些数据,这里对每个bank的读写存储是给出了行列地址进行索引。
几个基本的概念:
1、容量
存储单元的数量:行数X列数(得到一个L-BANK的存储单元的数量)X L-BANK的数量
产品文档中会用M X W的方式来表示芯片的容量
M是芯片中的存储单元的总数
W是每个存储单元的容量
2、初始化
SDRAM 上电后要第一步要初始化。
3、突发burst
突发读写
突发burst是指的是同一行中相邻的存储单元连续进行数据传输的方式,只需要给出读写命令和开始地址,就就开始读/写一定长度的数据,地址自动递增。
突发读操作时序
突发长度
连续传送石所涉及到的存储单元列的数量就是突发长度(Burst Lengths)简称BL,常见的突发长度为1、2、4、8和全页(一行)。
4、刷新refresh
存储阵列是需要不断刷新来保证存储的数据不会丢失,由于SDRAM是电容存储数据,时间一长就会漏电丢失。
刷新可以认为是:将一行的数据读出来再存进去
公认的标准:电容存储数据的时间是64ms,也就是每隔64ms,所有的单元都要刷新一遍 。
- 刷新周期
刷新周期:64ms/BANK行数,例如,1个bank的行数为4096,那么至少每隔64ms/4096=15.625us就要刷新一次。
给出刷新命令,SDRAM就进行刷新操作,一般需要9个时钟周期时间(具体参看datasheet)。此时不能对SDRAM进行任何操作。
正常工作状态下的刷新
- 自刷新(self refresh)SR
休眠状态下的刷新
5、预充电precharge
由于SDRAM的寻址的独特性,所以在进行完读写操作后,如果要对同一L-Bank的另一行进行寻址,就要将原来有效(工作)的行进行关闭,重新发送行/列地址。L-BANK关闭现有的工作行,准备打开新行的操作就是预充电。
可以设置让芯片每次进行读写操作后,自动进行预充电,这样设计时,只需要进行等待几个时钟周期即可
6、模式寄存器
SDRAM支持多个工作模式,突发相关的有:是否突发读写,突发长度,突发类型等,还可以配置延时(latency)
7、SDRAM命令
通过CKE、CS、RAS、CAS、WE等信号的组合,就可以产生下面命令:
- NOP:空指令
- ACTIVE:读写操作之前的激活操作
- READ:读
- WRITE:写
- BURST TERMINATE:突发读写结束命令
- PRECHARGE:预充电命令
- AUTO REFRESH:自动刷新
- SELFREFRESH:自刷新
- LOAD MODE REGISTER:修改模式寄存器