uboot移植(十三)实现 NAND 8 位硬件 ECC

smdkv210.h 中定义宏 CONFIG_S5PV210_NAND_HWECC CONFIG_SYS_NAND_ECCSIZE
CONFIG_SYS_NAND_ECCBYTES


CONFIG_SYS_NAND_ECCSIZE 定义了消息长度,即每多少字节进行 1 ECC 校验
CONFIG_SYS_NAND_ECCBYTES 定义为 13Byte,参考裸机编程 4.10
drivers/mtd/nand/s5pv210_nand.c 中的 CONFIG_S3C2410_NAND_HWECC 替换为
CONFIG_S5PV210_NAND_HWECC
我们只进行 ECC 校验写, ECC 校验读使用三星提供的函数,我们必须按照三星手册规定的 ECC 校验
码在
Spare Field 中的存储格式进行存储。


因此我们需要自定义 nand_ecclayout 结构体,这个结构体描述了如何存储 ECC 数据,同时将这个结
构体赋值给
nand->ecc.layout

参考裸机编程修改 s5pv210_nand_enable_hwecc s5pv210_nand_calculate_ecc 函数,同时,我们还
要使用三星提供的
8 位硬件 ECC 拷贝函数来自定义一个读页函数, 将它赋值给 nand->ecc.read_page

其他的代码请看源码。
重新编译,成功生成 u-boot.bin,将它烧写到 SD 卡的扇区 32,从 SD 卡启动开发板

首先保存环境变量,然后重启

成功读取环境变量。
下面进行
NAND 启动试验,将裸机编程中的 1-led_on_c 程序烧写到 NAND,然后从 NAND 启动,可
以看到
LED 流水灯效果。
首先我们先编译
1-led_on_c,生成 led.bin,然后使用 addheader 添加 16B 的头信息生成 210.bin,然
后将
210.bin 拷贝到 tftp 服务器目录。

然后使用最新的 u-boot 210.binz 烧写到 NAND 的第 0 页,然后从 NAND 启动

NAND 启动可以看到 2 LED 交替闪烁。

猜你喜欢

转载自blog.csdn.net/jerrygou/article/details/80645271