您的位置:首页 > 其它

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

2012-03-22 23:49 691 查看
环境: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作为附件给出, 希望可以给大家以参考.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐