作者 QQ: 35327864,msn: fgwf1@hotmail.com,mail: agooou@gmail.com
smp8652, smp8653, smp8654, smp8655
NAND 编程指导
一,概述
在产品线中,NAND编程器需要将一个事先生成的image烧写到NAND闪存中。为此,我们需要了解NAND的工作原理和编程方法。本文主要介绍如下几个方面:
1,明白image的格式
2,明白编程方法
3,明白坏块管理方法
4,如何判断坏的NAND芯片
二,实现
1,image格式
image是一个由程序员使用工具生成的,要写往NAND闪存的二进制文件。
A)image是2112字节对齐的。2112字节由一页2048字节大小数据和64个字节的备用数据组成。备用数据包含ECC及其他管理信息。在这种模式下,我们每次直接读取2112字节,并直接写往NAND闪存。
B)编程者不需要自己做ECC校验和填充。可以在创建image的时候由工具自动处理。
C)开头的10个块供系统引导和NAND管理使用。一个块的大小为一个可擦除块的大小。一般为一页数据及备用数据的整数倍,如,128*2112个字节。
D)除了这10个块的其他区域为数据区,可以存放操作系统,文件系统,bootloader等。
E)image的格式如下(前面数字为块索引):
0 Boot Block
1 Boot Block
2 Boot Block
3 Boot Block
4 NAND Super Block
5 NAND Super Block
6 NAND Super Block
7 NAND Super Block
8 NAND Management Blocks
9 NAND Management Blocks
10----- Operating System or File System or Bootloader
2,编程方法
A)image的前10块必须对应拷贝到NAND的前10块。image的开头10块是极其重要的,前4块是引导相关的,如果全部坏块,则无法使用NAND启动。
B)image前10块拷贝到NAND后,其余内容则必须写入到第264块(从0算起,第264块)开始的地址中。
C)此步骤可选。每写一页的时候,可以做ECC校验,如果校验错误,则表示写失败。ECC算法和备用数据区格式由simga提供。
D)image和NAND的块对应简图(数字为块索引)。
image NAND 含义
0 0 boot block
1 1 ...
2 2 ...
3 3 ...
4 4 NAND Super Block
5 5 ...
6 6 ...
7 7 ...
8 8 NAND Management
9 9 ...
10 264 OS, file system, bootloader...
3,坏块管理模式
如果在写NAND过程中发现坏块,则需要将此块忽略,并写往下一个可用块。
NAND闪存的前10块在系统引导过程中是非常关键的,只有有限的容错能力。其他区域的没有什么特殊性。
4,不合格的NAND
就像上面说的,NAND的前10块对于系统引导有关键作用。过多的坏块将导致引导失败。
0-3这4个boot块,只允许存在一个坏块,否则就这个NAND就算废品。
4-7这4个超级块(super),只允许存在一个坏块,否则NAND为废品。
8-9这2个管理块(management),用于块管理,这2个块没有什么特殊要求,不会造成NAND报废。
在0-263这264个块中,如果坏块数超过32,则NAND也报废。
三,备用区域数据格式
uint16 w_counter; // 2 bytes
uint8 ecc[12]; // 12 bytes total
uint8 Page_status; // 1 byte
uint8 Block_status; // 1 byte
四,ECC
每一页数据,有4个24bit的ECC校验码,即每512字节的数据有一个24bit的ECC校验码。
每当读取一页数据时,需要计算他们的ECC校验码,并与存放在备用数据区的ECC码做运算。如果运算结果全0,则没有数据冲突,如果运算结果全1,则表示仅有一位冲突,并且可以修复,其他情况则不能修复。
运算式(其中x=0,1,2,3):
NAND_ECC_codex[23:12] ^ Software_ECC_codex[23:12] ^ NAND_ECC_codex[11:0] ^ software_ECC_codex[11:0]
五,NAND编程方法