Warning - bad CRC, using default environment问题解决

环境:RedHat 9.0+u-boot-1.1.2+cross-2.95.3
现象:配置好u-boot,在RAM里正常启动如下:
--------------------------------
U-Boot 1.1.2 (Aug 17 2006 - 14:07:56)
U-Boot code: 21F00000 -> 21F156CC  BSS: -> 21F198D0
RAM Configuration:
Bank #0: 20000000 32 MB
Flash:  8 MB
*** Warning - bad CRC, using default environment
In:    serial
Out:   serial
Err:   serial
U-boot>
--------------------------------
flash读写擦除均正常,当设置好环境变量,固化到flash之后,启动仍然如上,即总是提示“*** Warning - bad CRC, using default environment”。使用md查看环境变量所在63扇区,发现设置的环境变量仍然在。
问题解决:
通过分析u-boot的启动流程,调试代码,得知问题出在cpu/at91rm9200/start.S中。其中有一段代码:
--------------------
        ldr     r0, =_start
        ldr     r1, =0x0
        mov     r2, #16
copyex:
        subs    r2, r2, #1
        ldr     r3, [r0], #4
        str     r3, [r1], #4
        bne     copyex
--------------------
它的作用是把中断向量表从flash reload到RAM,以提高速度。但是它没有进行remap。故而使得u-boot启动之后无法寻找到环境变量所在的第63扇区。更改如下:
--------------------
if 0       
        ldr     r0, =_start
        ldr     r1, =0x0
        mov     r2, #16
copyex:
        subs    r2, r2, #1
        ldr     r3, [r0], #4
        str     r3, [r1], #4
        bne     copyex
endif
--------------------
即把此段代码注释掉。
【或者是在此段前面加上remap部分,不过如果加上remap,则需要把前面的设置svc部分的代码注释掉,否则在u-boot>reset时会进入异常状态。】
此解决方案对u-boot-1.1.1也有效。

===============================================================================

u-boot: Warning - bad CRC, using default environment 问题的处理
 关于 "Warning - bad CRC, using default environment" 启动问题的解决:
 原因是flash中环境变量区无数据, 所以读取后会报错, 用户通过save或是saveenv保存变量之后再次启动便不会有此提示了. 


这个问题网络上很多大侠都讲过了.


 但是自己的u-boot试了几遍还是不行, 调了一个晚上才发现是自己的flash驱动有些问题.


 我的flash驱动是照着AMD的修改的, 自己太懒了, 只是修改了命令字以及地址, 别的部分也没细看, 粗心害死人啊!


 AMD的flash用DQ5作为操作错误的判断, 而SST好像没有, 这便导致我的擦除操作总是错误, 因而参数写入错误! 其实在程序里


注释掉下面两行基本就好了
//  if (!chip && ((result&0xFFFF)&BIT_PROGRAM_ERROR))
//   chip = ERR;
 下面将改写的flash.c作为附件给出, 希望可以给大家以参考.


  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值