韦东山Linux嵌入式课程社区
直播中

王鑫

7年用户 159经验值
私信 关注

2410 NAND FLASH控制器自身的ECC模块

在2410的NAND控制器里有硬件ECC模块,看2410的手册中是这么介绍的:
ECC generator block executes the followings:
1. When MCU writes data to NAND, the ECC generator block generates ECC code.
2. When MCU reads data from NAND, the ECC generator block generates ECC code and compares it with prewritten ECC code.

现在的问题是关于上面的第二点,按照手册的说明,我的理解是ECC每传输512字节后就校验出3字节的ECC数据,但在使用连续读取时(K9F1208U0B),Flash芯片会连续输出528字节(包括了16字节的OOB),此时是不是ECC数据又更新了(512字节结束后又重新计算ECC)?还有就是按照他的说明,compares it with prewritten ECC code,ECC模块根谁比得呢?

回帖(2)

杨靖

2019-5-20 13:52:46
我自己做的试验,写512字节至K9F1208U0B,ECC由硬件生成,生成的code是ECC[0]0x99, ECC[1]0x99, ECC[2]0xA5, 但通过回读产生的是ECC[0]0xf,  ECC[1]0xfc, ECC[2]0xf0.
通过printf输出数据没有问题,还是ECC模块问题。
举报

李丹

2019-5-20 14:06:58
第2点指是用硬件ECC部件,
我只用它来产生过ECC码,没用来较验过。

硬件ECC是这样产生的:
1. 启动ECC
2. 每传输一个字节,硬件会自动计算ECC
3. 传完数据后,你自己停止ECC,读出ECC值
这表明:
ECC码可以是任意字节数据的ECC码,当ECC只有3字节时,通常是以512为单位来产生ECC码的

较验的过程如下:
一.写flash
1. 启动ECC
2. 写512字节数据,这时ECC自动产生
3. 停止ECC
4. 把3字节ECC写入OOB
二.读flash
1. 启动ECC
2. 读512字节数据,这时ECC自动产生
3. 停止ECC, 把3字节ECC记录下来
4. 读OOB中保存的3字节ECC
5. 两个ECC比较
举报

更多回帖

发帖
×
20
完善资料,
赚取积分