我正在使用在TSOP48中具有NAND闪存芯片,SK Hynix H27U1G8F2BTR(1Gbit / 128Mbyte,2048byte(+ 64byte备用)页,128K块)的设备。将内容转储到文件中。该文件还包含OOB(带外)数据,从而产生138412032byte文件。

我使用以下命令创建了一个新的模拟NAND MTD器件: br />
所得到的设备具有正确的参数:指示转储包含OOB信息:

modprobe nandsim first_id_byte=0xad second_id_byte=0xf1 third_id_byte=0x00 fourth_id_byte=0x1d


然后我可以使用nandwrite转储映像: >这将导致没有OOB数据的134217728byte文件。这个文件是明智的(例如,包含我可以挂载的文件系统)。

几次,在播放时,我在运行-o时看到ECC错误。

nanddumpnanddumpnandsim的组合如何决定使用哪种ECC方案?闪存来自TI AM335系统,据我所知,ECC方案由处理器和OS的组合决定。这些实用程序如何知道该怎么办?

评论

您可能有更好的运气,而不是在这里询问electronics.stackexchange.com。

如果我在这里一无所获,我想我会尝试将其移开。我在其他地方尝试过,答案一直是不知道或“不读代码”(这很好,但是我仍然无法弄清楚它的工作原理)。

#1 楼

首先,对于所有闪存擦除块而言,不一定必须使用ECC方案。通常,使用3种不同类型的闪存分区,每种类型指定使用的ECC代码的方法各不相同:


由ROM引导代码访问的那个
引导程序(通常是u-boot)访问的文件
操作系统(假设您使用的是Linux)访问的文件

通常使用特定的ECC方法受闪存的OOB大小限制。 AM335x_U-Boot_User's_Guide(由于声誉原因,无法在此处发布链接)在BCH Flash OOB Layout部分中说明了该示例,并且该示例与您使用的Flash芯片匹配。每2k页64个字节有效地将可用ECC算法限制为BCH8,BCH4或HAMMING代码。


BCH Flash OOB布局

对于任何ECC方案,我们都需要在写入时添加一些额外的数据,以便检测和纠正(如果可能)NAND部分引入的错误。如果使用BCH方案,则需要一些字节来存储ECC相关信息。

NAND存储器中存储诸如ECC数据之类的附加信息的部分称为带外或OOB部分。 />
前2个字节用于坏块标记– 0xFFFF =>好块

下一个'N'字节用于BCH字节

N = B *页面中512字节扇区的数量

B = BCH4中每512字节扇区中的8个字节
B = BCH8中每512字节扇区中的14个字节
B = BCH16中的每512字节扇区26个字节

因此,对于具有64字节OOB大小的2k页大小的NAND闪存,我们将使用BCH8。在64个可用字节中,这将消耗2 +(14 * 4)= 58个字节。 ROM引导代码使用的ECC

AM335x处理器的ROM引导代码根据AM335x技术参考手册中阐述的机制来决定将哪种ECC方案用于NAND闪存。第26.1.7.4章NAND


ECC校正
应用的默认ECC校正是使用GPMC和ELM硬件的BCH 8b /扇区。
对于设备ID代码D3h,C3h,D5h,C5h,D7h,C7h,DEh,CEh当制造商代码(第一个ID字节)为98h时,将在ID数据的第4个字节中检查单元类型信息。如果等于10b,则应用的ECC校正为BCH 16b /扇区。
另外,可以通过使用SYSBOOT [9]完全关闭ROM完成的ECC计算。当与内置ECC引擎的NAND设备接口时,此功能特别有用。


其他控制ECC行为的方法是ONFI或I2C EEPROM,但H27U1G8F2BTR数据表确实可以。更不用说ONFI了,所以我想闪存芯片不支持它。
引导程序使用的ECC

引导程序自行决定。例如,对于U-boot,此信息也被编译为u-boot和第一级引导程序(SPL / MLO)。该信息由编译时设置的U-Boot配置设置控制。最新版本的U-boot可以使用nandecc命令在运行时切换ecc。

操作系统使用的ECC

选择完全是特定于操作系统的。对于使用AM335x处理器的Linux嵌入式系统,我知道此信息是使用设备树传递给内核的。可以传递给nandsim模块
以选择ecc代码。从代码中,我猜它被初始化为零,因此它不会使用任何ECC代码。因此,nandsim似乎可以使用BCH8和BCH16,但对于整个模拟闪存只能使用一个。


同样,这取决于您用于转储闪存的OS / Linux。类似于nandsim模块,实际的mtd驱动程序具有指定使用的ECC方案(内核参数,设备树)的方法。但您也可以指示nanddump也忽略ECC信息。

参考文献


AM335x技术参考手册http://www.ti.com/lit/ gpn / am3359

band nandsim的Linux内核参数http://lxr.free-electrons.com/source/drivers/mtd/nand/nandsim.c#L175

AM335x_U-Boot_User's_Guide