在调用nand write命令的时候总是出错,实验显示是最后一块校验错误.
在nand_base.c的1708行有这么几句:
if (!(page & (ppblock - 1))){
int ofs;
this->data_poi = bufstart; //有误
ret = nand_verify_pages (mtd, this, startpage,
page - startpage,
oobbuf, oobsel, chipnr, (eccbuf != NULL));
if (ret) {
DEBUG (MTD_DEBUG_LEVEL0, "nand_write_ecc: verify_pages failed %d/n", ret);
goto out;
}
*retlen = written;
其中
this->data_poi = bufstart; 是不对的,因为这是校验当前块,所以内存的地址应该是写入这么多块后的地址,改为:
this->data_poi = bufstart + (startpage-ostartpage)*mtd->oobblock;
在最后也还有一个verify_page,照做即可.
不知道我的分析对不对?
本文针对使用nandwrite命令时出现的最后一块校验错误问题进行了详细分析,并提出了具体的解决方案,包括修改内存地址计算方式及进行最终的页面验证。
4104

被折叠的 条评论
为什么被折叠?



