NAND FLASH 坏块管理 申酷啊,,

2019-07-21 06:23发布

关于NAND FLASH 的坏块管理


就现在的NAND FLASH ,有串口和并口两种,
并口就是48PIN的数据的输入和输入公用IO的
串口的就是使用SPI接口的NAND FLASH


说下NAND FLASH 管理的核心思维:
1 识别坏块,标记坏块,
2 如何保存坏块信息
3 交换区概念
4 保留去概念


1,NANDFLASH 的工艺不能保证写进去的每个块里面的数据,和读出来的数据一致,所以是存在坏块的,
而NAND FLASH的数据组织结构是这样的,
由N个块组成,而块由M个PAGE组成+MXSPARE区

比如 K9F1G08U0D 以这个片子为例子,
BLOCK 大小为 128K 用户可以写的,
实际大小为 128K + 64*4*16
至于后面64*4*16的意思是这样的, 因为该片子每个PAGE的大小为2048 也就是2K,
而因为NAND 存在坏块,所以,在每写512个字节后,都会产生一个校验码,而这个校验码用来标记,该块是坏块还是可以正常使用的,
当然这个512是针对大页的NAND FLASH,小页的话是每256个字节产出一个校验码,当然现在这样的小页的NAND FLASH很少见了,
老了,即使有,也是拆机弄下来的,
坏块的识别的话,这几种,并口的:一个是可以根据ECC校验算法来,判断是否为坏块,具体算法可以去百度查查,
一个是可以判断在写玩数据之后,来判断SPARE数据区域来判断段坏块,而对于小页和大页的有区别
小页的NANDFLASH ,比如一个页的大小为1K,那么,在读取1K后面数据的16个数据,
如果第一个数据不为FF,那么标记该块为坏块,在标记的时候,可以标记的数据为全部为00,也就是在标记16个数据的时候表示为0
而在标记的时候,一般标记的区域是这个块的第一个PAGE后的16个数据
 串口:串口的,里面有自校验,硬件的,所以在识别的时候,可以直接装载要判断的PAGE的地址,然后去读取状态寄存器即可,
同样的也可以去标记坏块,标记花开的话和并口的一样


2 如何保存坏块信息,
坏块信息一般包括:
1 ,保存坏块的信息的地址,也就是你要获得坏块信息的话,一般去哪个地址去读,可以是固定的,也可以不是固定的,不固定的花费的时间长点,管理起来复杂
2,坏块信息要保存交换区的信息:这个信息是,你所使用的交换区,某个块是坏块,还是好块 后面会介绍
3,保留区的地址映射状态,后面会介绍
4 ,如何去标记该块是作为,保存坏块信息表格呢,,


至于如何保存坏块信息,很多种方法,核心就是,用特殊的数据去标记,
比如,我在用来保存坏块信息表的时候,一般这样标记
 
该块的第一个PAGE的前面八个数据是这样的,,0xff55aa00,0x0000000
该块的最后一个PAGE ,最后8个数据是0X33445588.0XFF00FF00
然后该块的倒数第二个PAGE,标记交换区的信息和保留去地址映射关系,+一个校验和


而对于保存坏块信息表格所用的块,一般是3个或者5个不等,,交替使用,或者也可以不交替使用,,
对于不交替使用的情况就是,一旦发生坏块标记的情况的话,那么3或者5个块都要被写数据,而却写的数据是一样的,


有人会说,占用这么多块不是浪费,其实,对于整个芯片来说,占用这几个块,而有个坏块管理程序是值得的



3 交换区概念:
比如,块0 ,该块大小为128K, 在0X000-0X18000里面有数据,0x18800 - 0x20000这个有数据是文件系统认为的, 
而文件系统要在0x18000-0x18800这个512的范围内要写数据,那该怎么办呢,
肯定要这个块个擦除掉的,如果没有交换区的话,那么擦除的话,会导致在0X000-0X18000,,0x18800 - 0x20000之间的数据都会丢失的,那该怎么办呢,
那就要使用交换区,交换区的作用就是这样的,
如果要擦除某个块的话,那么首先要将这个块里面的数据拷贝到另外一个块里面,而这个另外一个块,称之为交换区,
首先将整个块的数据,全部放到一个可以用的交换区,然后再将0这个块擦除,擦除之后0这个块里面的数据就是FF了,那么在擦除之后,在将交换区里面的数据回写到0这个块里面
那么出现的情况就是0X000-0X18000,,0x18200 - 0x20000 这个两个区间内的数据还是原来的数据,在将原来的数据回写到0块之后,然后在将这次文件系统要写的数据写到
0x18000-0x18200这个区域里面,这样既保证数据的完整性,又能将新数据写进去


4保留区概念:
保留区的作用就是这个,当在写数据的时候发生坏块的话,那么得将这个块的数据要保存另外一个块里面,同时要对产生的那个坏块进行标记,

具体可以参考附件:标记该坏块管理参考圈圈的NANDFLASH坏块管理思维

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
flybit
2019-07-22 08:06
正点原子 发表于 2016-5-22 17:07
下个月发布, 基于STM32 的NAND FLASH管理程序,带ECC校验.

Hi ,原子哥。对于你们 FTL的代码和教程,我有个疑惑,当FATFS 重复写同一个sector时,那这个sector对应nandflash page里面原先的数据如何处理?是直接进行覆盖吗?需不需要对比下原有数据和重复写入的数据,然后进行合并后写入数据?

我在调试时发现FATFS会重复写一个sector。

一周热门 更多>