您好!
使用的是am335x6.0sdk的,nandflash使用的是MT29F02G08AB。使用的是BCH8的,uboot中也是默认BCH8。
现在遇见的问题是,能在uboot写入一些环境变量并且保存,重新启动时候,变量的写入的数据还在。
但是在想把uboot写入nandflash中的时候,通过手动写入,然后重新重启,串口那边还是答应CCCC,所以不能从nand的启动起来。
我们的启动配置nand的启动是第一位,usb第二位,串口是第四位的。
手动写入的是参考下面这个来写的!
# erase NAND
nand erase.chip
# get MLO
tftp 0x80200000 MLO
# make 4 copies in the RAM
cp.b 0x80200000 0x80220000 20000
cp.b 0x80200000 0x80240000 20000
cp.b 0x80200000 0x80260000 20000
# get u-boot.img
tftp 0x80280000 u-boot.img
# write the whole block (4*MLO + u-boot.img) to NAND
nand write 0x80200000 0x0 0x260000
Tony Tang:
zhi wei lintftp 0x80280000 u-boot.img
这个u-boot.img多长?
Tony Tang:
如果有仿真器的话,把下图中的Vector trace读来出,根据TRM Table 26-42的描述看一下启动状态。
昨夜无眠:
回复 Tony Tang:
感谢您的回复! 我在MT29F2G08AB这款芯片中8位宽的存储单元结构,有2048个块,一个块有64个页,每个页大小为2048个数据存储区和128个字节的备用区域;应该是这个ecc校验出的问题。有没相关uboot中的nandflash的修改的文章推荐的,我在看Omap_gpmc.c中的nand_init()这个函数发现有些定义不理解,不知道怎么去修改,#ifdef CONFIG_AM33XX nand->ecc.mode = NAND_ECC_HW; nand->ecc.layout = &hw_bch16_nand_oob; nand->ecc.size = CONFIG_SYS_NAND_ECCSIZE; nand->ecc.bytes = CONFIG_SYS_NAND_ECCBYTES; //这个值为3是怎么确定的,怎么得来的, nand->ecc.hwctl = omap_enable_ecc_bch; nand->ecc.correct = omap_correct_data_bch; nand->ecc.calculate = omap_calculate_ecc_bch; nand->ecc.read_page = omap_read_page_bch; omap_hwecc_init_bch(nand, NAND_ECC_READ);有相关的资料可以推荐的吗?
Tony Tang:
回复 昨夜无眠:
To select ECC algorithm for NAND:
U-Boot# nandecc [sw | hw <hw_type>]Usage:
sw – Set software ECC for NAND hw <hw_type> – Set hardware ECC for NAND <hw_type> – 0 for Hamming code 1 for bch4 2 for bch8 3 for bch16 Currently we support only Software, Hamming Code and BCH8. We do not support BCH4 and BCH16
试试:
U-Boot# nandecc hw 2