问题描述:
设备采用美光的NandFlash 512M大小作为存储介质,生产好一批机器,放在库房
过一段时间拿出来,就有个别机器会开不出来,查看调试信息,发现NandFLASH
中存储内核系统的数据区内容发生变化,导致校验位错误。有个别机器拿到客户那里
也发生开机开不出来的问题。重新烧写片子后,又可以正常启动,反复重启也能正常工作。
原来,偶尔碰到过这个开不出来的现象,没在意, 那么现在用户那里碰到这个问题,就得尽快找到原因了。
问题的根本现象是,Flash中的数据发生变化了,启动时,内核数据校验出错。
Net: cpsw
Hit any key to stop autoboot: 0
Card did not respond to voltage select!
Booting from nand ...
HW ECC BCH8 Selected
NAND read: device 0 offset 0x280000, size 0x360000
3538944 bytes read: OK
## Booting kernel from Legacy Image at 80007fc0 ...
Image Name: Linux-3.2.0
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3328824 Bytes = 3.2 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!
U-Boot#
我前天回到公司,拿出20台机器,测试,目前这个问题还没重现。
这批设备,当时是先烧写好Flash的内容,再去回流焊的,当时焊接回来后,里面的数据被破坏了,就重新烧写并测试后入库了。
不知道这个过程,对芯片质量有无影响。
问题:
那么是什么原因导致设备放置一段时间后,并重新开机时,内核数据存储区的数据发生变化?
如果是软件逻辑问题,应该是具有普遍性,或者规律性,应该能反复重现, 况且,
软件是在内存运行,对外部数据的修改是在文件系统数据区的,手也伸不到内核存储区。
如果是FLASH质量问题,那么概率好像高了些?