最近在网上看到了A11的NAND驱动,开始怀疑有批次平板的闪存芯片是不是质量有严重问题,是不是在用所谓的“固件升级”在隐瞒什么呢?
如果各位经常出现data丢失、文件系统损坏、甚至不能刷固件的现象,请回复下以下信息:
1. 机器版本,固件版本
2. 是否开启了barrier=1,看http://www.ondabbs.cn/thread-219815-1-1.html
3. 进行测试。首先取出外置TF卡避免测试结果发生干扰,取出后要重启下。没有外置TF卡的可直接开始。
4. 开机一段时间后,在adb或者终端模拟器应用上输入su回车,然后输入dmesg|busybox grep PHY回车。把结果回复在本贴子里。
结果解析:
如果命令输出结果有这个:PHY_PageRead : too much ecc err,bank xxxx block yyy,page zzz
说明你的NAND坏得有点厉害。虽然说任何NAND芯片都会有一定的坏块,但是连ECC检验算法都救不活的闪存明显是不合格的。
如果是PHY_PageRead: ecc limit aa bb cc dd这种也是种错误,是遇到坏块了,ECC检验算法达到最大允许量,要比先前一种好点。
我先来我的:
1. v972 v.133
2. 开了barrier=1
3. 输出结果:
接近30个:PHY_PageRead: ecc limit, 0xa, 0x0, 0xa, 0x0
附:为什么说PHY_PageRead: ecc limit是闪存有问题的证据:
看drivers/block/sun5i_nand/src/physic/nand_phy.c(A11闪存驱动,A31应该也差不多),788行,PHY_PageRead函数中:
if(ret == ECC_LIMIT)
{
PHY_ERR(“%s : %d : ecc limitn”,FUNCTION,LINE);
}
再看drivers/block/sun4i_nand/src/include/nand_type.h,340行左右:
//define the return value
#define ECC_LIMIT 10 //reach the limit of the ability of ECC
#define ERR_MALLOC 11 //request buffer failed
#define ERR_ECC 12 //too much ecc error
#define ERR_NANDFAIL 13 //nand flash program or erase fail
#define ERR_TIMEOUT 14 //hardware timeout
#define ERR_PHYSIC 15 //physical operation module error
#define ERR_SCAN 16 //scan module error
#define ERR_FORMAT 17 //format module error
#define ERR_MAPPING 18 //mapping module error
#define ERR_LOGICCTL 19 //logic control module error
#define ERR_ADDRBEYOND 20 //the logical sectors need be accessed is beyond the logical disk
#define ERR_INVALIDPHYADDR 21
注释说的很清楚,ECC_LIMIT是因为ECC已经达到极限,而ERR_ECC(也就是PHY_PageRead : too much ecc err)是连ECC都救不活的坏块。
以上代码均出自全志官方源代码。
结论
建议只出现PHY_PageRead : ecc limit的用户,可以打开barrier=1再观察下还出现错误不。如果没出问题可以算了。
建议出现大量PHY_PageRead : too much ecc err、PHY_PageRead: read timeout、PHY_PageWrite: writetimeout这些错误的用户立即要求昂达返修平板。
此类平板闪存有严重问题,无法用固件修复。除非你能忍受一个三天两头数据全丢失的平板。