Chinaunix首页 | 论坛 | 博客
  • 博客访问: 286252
  • 博文数量: 65
  • 博客积分: 1490
  • 博客等级: 上尉
  • 技术积分: 835
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-16 20:00
文章分类

全部博文(65)

文章存档

2015年(1)

2012年(3)

2010年(7)

2009年(54)

我的朋友

分类: LINUX

2009-06-04 17:16:47

    今天,在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 ()

*转载请注明出处:neilengineer.cublog.cn

*欢迎访问:新星湾()

*/

阅读(1119) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~