首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
X86
» 轻量级 NAND 坏块管理方法分析及改进(1)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
轻量级 NAND 坏块管理方法分析及改进(1)
发短消息
加为好友
look_w
当前离线
UID
1066743
帖子
8283
精华
0
积分
4142
阅读权限
90
在线时间
233 小时
注册时间
2017-6-23
最后登录
2019-5-18
论坛元老
UID
1066743
1
#
打印
字体大小:
t
T
look_w
发表于 2018-6-18 12:43
|
只看该作者
轻量级 NAND 坏块管理方法分析及改进(1)
NAND 及其坏块NAND Flash 是一种高密度低成本的存储体,它在各种各样的嵌入式系统中获得了广泛的应用, USB 存储设备、SD 卡、手机、相机和固态硬盘等各种设备中使用的都是 NAND 芯片。其内部结构是按照块/页进行组织的,一个 NAND 芯片包含若干个块,而块内部又是由若干个页构成的。NAND 芯片出厂时就可能包含若干个坏块,在使用过程中也可能会产生新的坏块,当一个块被标记为坏块后,不应再对其写入数据,以免出现数据丢失。由于 NAND 擦写次数是有限的,而且会在使用过程中产生新的坏块,一般都需要额外的软件或硬件来配合它进行使用。
NAND 坏块管理方法分类目前,NAND 坏块管理方法可分为如下几类:
基于
FTL
芯片的坏块管理
它使用一个额外的 FTL (Flash Translation Layer)芯片对 NAND 进行管理,对外部屏蔽了坏块信息,U 盘、SD 卡、MMC 卡以及固态硬盘都使用这种管理方法。这种方式简化了 NAND 操作,但也使坏块信息对外部而言不可见,如果系统中出现了可能和坏块相关的问题,定位和调试变得困难,另外,FTL 芯片也需要额外的硬件成本。
基于
NAND
文件系统的坏块管理
JFFS2、 YAFFS2、 FlashFx 这些专门针对 NAND 的文件系统可以对坏块进行管理。
NAND
管理中间件
有一些中间件(Middleware)专门用于 NAND 管理,比如 UBI。
轻量级 NAND 坏块管理
对 NAND 进行管理的硬件或软件模块,不仅提供坏块管理,同时也支持对 NAND 的擦写操作进行负载平均。而轻量级的坏块管理只专注于坏块,并不提供擦写负载平均的支持,而且,它也不依赖于任何第三方的库。因此,轻量级的坏块管理方式降低了系统的复杂度,而且免去了加载文件系统或初始化中间件的时间,在嵌入式系统中有着广泛的应用。
图 1 展示了几种典型的嵌入式系统中 NAND 内部的内容布局。如果需要频繁地对 NAND 写入各种数据,最好使用 NAND 文件系统或者 NAND 管理中间件对需要写入的区域进行管理。而那些很少需要更新的区域,比如 bootloader、VPD 和 Kernel,只需进行轻量级的坏块管理,不需要进行负载平均。很多的嵌入式系统中,需要写入 NAND 的数据量很少,频度也较低,比如路由器、打印机、PLC 等,这些系统完全可以仅使用轻量级的坏块管理方式。
图 1.典型嵌入式系统的 Nand Memory Map
Uboot 的轻量级坏块管理方法NAND 坏块管理都是基于坏块表(BBT)的,通过这张表来标识系统中的所有坏块。所以,不同的管理方法之间的差异可以通过以下几个问题来找到答案。
如何初始化和读取坏块表?
产生新的坏块时,如何标记并更新坏块表?
如何保存坏块表?是否有保存时断电保护机制?
对 NAND 写入数据时,如果当前块是坏块,如何找到可替换的好块?
Uboot 是目前使用最为广泛的 bootloader,它提供了两种轻量级坏块管理方法,可称之为基本型和改进型。通过下表,我们可以看到两者的差异。
表 1. Uboot 的两种坏块管理方法对比
基本型改进型 初始化、读取 BBT 系统每次初始化时,扫描整个 NAND,读取所有块的出厂坏块标志,建立 BBT,占用较多启动时间。 系统第一次初始化时,扫描整清单 1. BBM 头信个 NAND 建立 BBT。之后每次初始化时,扫描 BBT 所在区域,如果发现当前块的签名和坏块表的签名(一个特定的字符串)相符,就读取当前块的数据作为 BBT。 更新 BBT 擦写操作产生新的坏块时,更新内存中的 BBT,同时将坏块的出厂坏块标记从 0xFF 改为 0x00。
擦写出错后仍然对坏块进行操作—更改出厂坏块标记,存在安全风险。而且,也无法区分哪些是出厂坏块,哪些是使用过程中产生的坏块。 擦写操作产生新的坏块时,更新内存中的 BBT,同时将更新后的 BBT 立刻写入 NAND 或其他 NVRAM 中。 保存 BBT 不保存 在 NAND 或其他 NVRAM 中保存一份,无掉电保护机制。 坏块替换方法 如果当前块是坏块,将数据写入下一个块。 如果当前块是坏块,将数据写入下一个块。
虽然 uboot 的改进型坏块管理方法的做了一些改进,但它仍然有三个主要的缺点。
出现坏块,则将数据顺序写入下一个好块。如果 NAND 中存放了多个软件模块,则每个模块都需要预留一个较大的空间作为备用的好块,这会浪费较多的 NAND 空间。通常,每个模块预留的备用好块数为 NAND 芯片所允许的最大坏块数,该值因不同的芯片而有所不同,典型值为 20 或 80。假设 NAND 是大页类型,总共有 N 个模块,则总共需要预留的空间大小为 N*80*128KB。
读取 BBT 时仅检查签名,没有对 BBT 的数据做校验。
没有掉电保护机制。如果在保存 BBT 时断电,BBT 将丢失。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议