因为SDRAM是动态内存,也就是需要不断刷新才能保存数据,也就是存储体中的电容需要不断地刷新才能不会因为电容的自消耗而产生电位变化。这个我是理解的。但是又看到一句话:在刷新过程中,所有L-Bank都停止工作,而每次刷新所占用的时间为9个时钟周期,之后就可进入正常的工作状态,也就是说在这九个时钟周期内,所有工作指令只能等待而无法执行。那么问题来了,如果我就是在SDRAM自刷新的9个时钟周期间对其发送了命令,那怎么办?
根据我的理解:
因为电容数据的有效期为64ms,也就是说刷新整个SDRAM需要在64ms之内。而我们使用的SDRAM是8192行,所以刷新速率=64ms/8192行=7.81us/行。
SDRAM的时钟频率为96MHZ,那么也就是说,一个时钟周期为1/96M(s),也就是刷新一行的周期为7.81us/(1/96M)s = 750
但是原子却设置为750-20=730。我原先不明白,原来这个20个时钟周期就是提前刷新的周期,否则正正好好750个周期刷新,就有可能让电容数据失效。
也就是我们在初始化的时候向SDRAM设置它的刷新计数器为730,在CKE的为高的时候SDRAM为自动刷新模式。每过了730个时钟周期后就等待状态机为IDLE(空闲),就开始9个时钟周期的刷新。之后刷新计数器复位,且行计数器+1,下一次刷新就会去刷新下一行。
再刷新过程中,所有命令都要等待。
这样,就能够既能刷新又不影响工作了。但是再往细里深究仍有很多不明白的地方,比如等待的时候还没有执行,而mcu认为成功了,切换为其他命令时那不就失败了吗?我也是没有再继续深究下去,如果有明白的朋友不妨分享一下
————————————————
版权声明:本文为CSDN博主「坛城」的原创**,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nianzhu2937/article/details/103608988 |