内存读写数据出错原因之一
时间:2009-06-04 来源:neilengineer
今天,在U-boot中把数据写到内存,再读出来发现数据不对,CRC校验也失败了。
分析了一下原因,好像是因为内存寄存器初始化时,设置的refresh间隔时间太长了,导致内存不稳定,数据丢失。
在cpu/arm926ejs/start.S调用的lowlevel_init中,加入的内存初始化程序中的一段如下:
ldr r1, =0x32200020 //0x32200040
str r1, [0x90300004]
0x90300004是内存的time1寄存器如下:
可见,6-0这几位设置内存的refresh间隔。这个值要根据具体CPU的主频来计算。
我原来设为0x32200040,也就是6-0位是0x40出问题;修改为0x20问题解决。
当然,具体设置什么值好,要考虑内存稳定性,性能和效率等问题,还是比较复杂的。一般设置一个估计的值后,经过一些测试,如果各方面都符合要求,就用这个值了。
/*
*By Neil Chiao (neilchiao at gmail.com)
*转载请注明出处:neilengineer.cublog.cn
*欢迎访问:新星湾(www.xinxingwan.com)
*/
相关阅读 更多 +