This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
之前使用的flash是1bit/512,现在换成4bit/512的flash,容量不变.
对于ecc选择使用BCH8
uboot (U-Boot SPL 2011.09)中修改如下
board_nand_init
-> ti81xx_nand_switch_ecc(NAND_ECC_HW, 0)改成ti81xx_nand_switch_ecc(NAND_ECC_HW, 2)
->__ti81xx_nand_switch_ecc
->nand->ecc.mode = NAND_ECC_HW_SYNDROME;改成 nand->ecc.mode = NAND_ECC_HW;
kernel中
board_am335xevm.c
evm_nand_init
-> pdata->ecc_opt =OMAP_ECC_HAMMING_CODE_DEFAULT; 改成 pdata->ecc_opt =OMAP_ECC_BCH8_CODE_HW;
nandflash烧录MLO uboot uImage rootfs时候全部指定nandecc hw 2
启动的时候打印如下信息
NAND read: device 0 offset 0x280000, size 0x300000
NAND read from offset 280000 failed -74
0 bytes read: ERROR
## Booting kernel from Legacy Image at 80200000 ...
Image Name: Linux-3.2.0
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2691656 Bytes = 2.6 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... Bad Data CRC
ERROR: can't get kernel image!
请帮忙分析一下原因.
你好:
刚才把这个问题解决了,原因是nandboot=run nandargs;nandecc sw;中还是使用的sw校验方式,改成nandecc hw 2后kernel可以正常启动
现在出现新的问题挂载文件系统出错了
[ 1.725148] logo disp!!!
[ 1.730748] end_request: I/O error, dev mtdblock7, sector 0
[ 1.736634] Buffer I/O error on device mtdblock7, logical block 0
[ 1.743906] end_request: I/O error, dev mtdblock7, sector 0
[ 1.749782] Buffer I/O error on device mtdblock7, logical block 0
[ 1.756866] end_request: I/O error, dev mtdblock7, sector 8
[ 1.762740] Buffer I/O error on device mtdblock7, logical block 1
[ 1.769901] end_request: I/O error, dev mtdblock7, sector 8
[ 1.775779] Buffer I/O error on device mtdblock7, logical block 1
[ 1.782864] end_request: I/O error, dev mtdblock7, sector 16
[ 1.788833] Buffer I/O error on device mtdblock7, logical block 2
[ 1.795986] end_request: I/O error, dev mtdblock7, sector 16
[ 1.801954] Buffer I/O error on device mtdblock7, logical block 2
[ 1.809024] end_request: I/O error, dev mtdblock7, sector 24
[ 1.814987] Buffer I/O error on device mtdblock7, logical block 3
[ 1.822137] end_request: I/O error, dev mtdblock7, sector 24
[ 1.828106] Buffer I/O error on device mtdblock7, logical block 3
[ 1.834737] List of all partitions:
[ 1.838470] 1f00 128 mtdblock0 (driver?)
[ 1.843833] 1f01 128 mtdblock1 (driver?)
[ 1.849165] 1f02 128 mtdblock2 (driver?)
[ 1.854517] 1f03 128 mtdblock3 (driver?)
[ 1.859851] 1f04 1920 mtdblock4 (driver?)
[ 1.865196] 1f05 128 mtdblock5 (driver?)
[ 1.870533] 1f06 5120 mtdblock6 (driver?)
[ 1.875875] 1f07 4096 mtdblock7 (driver?)
[ 1.881219] 1f08 122880 mtdblock8 (driver?)
[ 1.886555] 1f09 127488 mtdblock9 (driver?)
[ 1.891889] No filesystem could mount root, tried: cramfs
[ 1.897684] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,7)
使用sdk6
Thanks!
hi 周工:
请问有没有可以参考的修改呢?没想到要修改的原因
要修改的主要是这个部分?
case NAND_ECC_HW:
/* Use standard hwecc read page function? */
if (!chip->ecc.read_page)
chip->ecc.read_page = nand_read_page_hwecc;
if (!chip->ecc.write_page)
chip->ecc.write_page = nand_write_page_hwecc;
if (!chip->ecc.read_page_raw)
chip->ecc.read_page_raw = nand_read_page_raw;
if (!chip->ecc.write_page_raw)
chip->ecc.write_page_raw = nand_write_page_raw;
if (!chip->ecc.read_oob)
chip->ecc.read_oob = nand_read_oob_std;
if (!chip->ecc.write_oob)
chip->ecc.write_oob = nand_write_oob_std;
thanks!
hi 周工:
我使用的是sdk6,之前您回复说这个sdk下的kernel ecc需要修改。
我现在将sdk7的BCH8移植到sdk6上了,可以正常挂载cramfs文件系统。
现在情况是这样的,我们有2个文件系统,一个cramfs,另一个是yaffs2。
每次挂载yaffs2的时候,发现总会多一个坏块,百度yaffs2文件系统发现,yaffs2文件系统,对于oob中保存ecc校验数据的能力有限,
无法保存所有的BCH8产生的ecc校验数据。
这样的话是不是说明,对于2k+64B page的flash,无法使用BCH8和yaffs2这样的组合呢?
新的flash datasheet上标注的是4bit/512B,如果现在为了使用yaffs2,把ecc改成1bit/512B的话,使用过程中会不会有什么影响?
Thanks!