OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12850|回复: 10

NAND FLASH 坏块管理 申酷啊,,

[复制链接]

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2015-7-14 23:24:02 | 显示全部楼层 |阅读模式
关于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坏块管理思维

nand_flash.rar

4.18 KB, 下载次数: 1668

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-5-22 17:07:35 | 显示全部楼层
下个月发布, 基于STM32 的NAND FLASH管理程序,带ECC校验.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 1 反对 0

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
 楼主| 发表于 2015-7-14 23:27:44 | 显示全部楼层
有些写的有点错误,但是核心思维是这样的,望见谅,,
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-7-14 23:54:52 | 显示全部楼层
写的不错。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2013-12-9
在线时间
48 小时
发表于 2016-1-8 16:19:56 | 显示全部楼层
谢谢分享~
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2016-3-22
在线时间
8 小时
发表于 2016-3-22 19:23:43 | 显示全部楼层
本帖最后由 602863505 于 2016-3-22 20:29 编辑

不错,赞。请教下nf_phy_get_ecc,nf_phy_mark_bad_block这两个函数怎么实现的呢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-5-22 17:07:07 | 显示全部楼层
我们也搞了nand flash
带坏块管理.速度不错.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2015-1-19
在线时间
26 小时
发表于 2016-6-12 22:19:48 来自手机 | 显示全部楼层
mark一下
回复 支持 反对

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2016-12-27
在线时间
34 小时
发表于 2017-7-14 09:14:20 | 显示全部楼层
正点原子 发表于 2016-5-22 17:07
下个月发布, 基于STM32 的NAND FLASH管理程序,带ECC校验.

原子哥,你说的这个 “基于STM32 的NAND FLASH管理程序,带ECC校验.”的程序,现在发布了吗,如果发布了是在哪下载啊
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2018-12-24
在线时间
3 小时
发表于 2018-12-27 10:53:16 | 显示全部楼层
正点原子 发表于 2016-5-22 17:07
下个月发布, 基于STM32 的NAND FLASH管理程序,带ECC校验.

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

我在调试时发现FATFS会重复写一个sector。
回复 支持 反对

使用道具 举报

22

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
157
金钱
157
注册时间
2015-3-4
在线时间
8 小时
发表于 2021-4-26 17:58:41 | 显示全部楼层
正点原子 发表于 2016-5-22 17:07
下个月发布, 基于STM32 的NAND FLASH管理程序,带ECC校验.

原子哥,代码发布在哪了?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 05:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表