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