全部博文(65)
分类: LINUX
2009-06-04 17:16:47
分析了一下原因,好像是因为内存寄存器初始化时,设置的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问题解决。
当然,具体设置什么值好,要考虑内存稳定性,性能和效率等问题,还是比较复杂的。一般设置一个估计的值后,经过一些测试,如果各方面都符合要求,就用这个值了。
/*