你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】Nand Flash 文件系统解决方案

[复制链接]
STMCU小助手 发布时间:2022-3-1 12:37
一. Nand Flash 结构及特性% |% v- `* s8 s* V. m& z+ ^
NAND Flash 的结构如图 1 所示:, w' i9 b! f! h8 ^) q8 k# Q, O
UDL$R{GS]WRC}WOV30HBA2G.png
! Y8 z. r8 e! c3 h( w( y3 W
; m2 u' x; z0 \  X* M2 y; @. `NAND Flash 由块(block)组成,每块又由若干页(page)组成,每页由数据区和冗余区(spare area)组成。页是数据写入的基础单元,块是擦除的基础单元。
8 v, T: j! ^$ v4 j在对 NAND Flash 进行写操作(页编程)时,只能把相应的位由“1” 写为“0”,只有对块进行擦除操作时,才能把该块内所有位由“0” 写为“1”。因此,在写入数据时,如果该页内已存有数据,必须先擦除该块。
1 f  F# x3 A0 t0 BSLC(Single-Level Cell)小容量的 NAND Flash 页一般为(512+16)Bytes(数据区 512Bytes,冗余区 16Bytes),大容量的 NAND Flash 页为(2048+64)Bytes。2 Y7 N7 _1 D7 m, p$ F" A
为降低 Flash 的制造成本,半导体制造商先后推出了 MLC(Multi-Level Cell)和 TLC(TrinaryLevel Cell)技术,即在一个 Flash 存储元内存储更多的位信息,其原理如图 2 所示。与 SLC 相比,MLC 和 TLC 的存储密度更高,成本也相对降低,但管理难度更大:其传输速度、耗电量、擦写次数等方面的性能都要比前者差。- C$ Q# p! x9 I2 {
因此在工业应用场合,存储空间要求不是特别大的情况下,SLC 仍然得到广泛的应用。
! h1 J* V+ x8 f4 X
) k* ~5 k1 X# W$ m5 g @0R63L%`1V0P@(EAL4~IY`4.png
. L  q/ m5 M7 E' P# q4 n. g) a- H* j( N) @! S* H4 p) h8 i
使用 NAND Flash 需要解决以下问题:
; R' T% N. G* F$ C1. 块擦除次数有限
" P  R. t, B9 P" L# {: u+ RNAND Flash 的块擦除次数是有限的。SLC 一般不超过 10 万次,而 MLC 擦除次数仅有 1 万次左右,具体数据以所使用的 NAND Flash 的产品手册为准。如果频繁擦除某块最终导致超过擦除次数限制,该块内的数据将变得不可靠,进而影响整个存储器的使用,所以需要采用损耗均衡算法使各个块近似均衡使用。7 R  B0 f( ^( V3 u
2. 异位更新(Non-In-Place Update)
" i2 l: z) V* Q* _7 w" [由于 NAND Flash 先擦后写的物理特性,如果将文件存储在固定的块内,会面临掉电数据丢失及占用较大 RAM 等问题。所以,NAND Flash 一般采用异位更新,即将要更新的数据读入 RAM 中修改后写入其他空闲块,在适当的时候擦除修改前数据所在块。因此,需要地址映射、垃圾回收等技术来管理存储空间。. ]8 l' |  F4 G" p7 Q
3. 坏块管理
+ t! o4 f+ @4 v4 p坏块是指包含一位或多位错误的块,由于 NAND Flash 的制造工艺不能保证存储单元在其生命周期中保持可靠,因此,在 NAND 的生产及使用过程中会产生坏块。如果在坏块内编程或将坏块擦除,会发生错误,所以需要一定的机制管理坏块,使坏块不参与数据存储。$ j8 K# A6 [* }+ W/ l- ?
4. 差错校验码(Error Correction Code, ECC)+ E  s# d0 e. H4 A$ H8 l/ {, \0 K+ D% `) Y
由于采用串联的架构,NAND 的晶体管之间容易造成影响,使逻辑“0”变成逻辑“1”,这种现象称为位翻转,需要使用差错校验码来进行纠错。常用的 ECC 有:Hamming 码、BCH 码、ReedSolomon 码等。SLC NAND Flash 需要能检测 2 位,纠正 1 位错误的 ECC,而 MLC NAND Flash 通常需要检测并纠正 4 位的 ECC 来保证数据的安全可靠。3 N5 C, t+ K- i2 _
8 p- _1 S7 I2 E8 s, j+ }8 h* M
STM32 的 FSMC 硬件内置 ECC 功能。
/ B/ t/ w3 x! [+ C* ^( r) L
( ]# Y# D$ ?8 k  p二. ST 解决方案. C& [# z' P& i5 G, \

7 p* }2 N3 g2 X- |+ d8 P  nST 提供适用于 SLC 的 NFTL(NAND Flash Translation Layer)和 FAT 类文件系统来解决 NAND Flash 存储的问题。6 y$ `1 `6 E- N* |; N2 t

9 O& k1 M! M) g. `$ d6 `! P解决方案如图 3 所示
- m( a0 o& r! U8 o
  m( b# h* v/ F0 m  y4 b5 h 9YFB9[))OGGE8K}{IWJ47.png 4 T( S; ?/ e$ n

& o1 T. V: r; l+ ], R# D$ @0 j8 [1. NFTL:0 _# M- p# U& d, m
   FTL 层的主要功能是针对 NAND Flash 的物理特性,封装底层硬件相关的操作和复杂的管理控制功能,向上提供设备读写接口,使得文件系统访问 NAND Flash 类似于访问磁盘;向下提供底层硬件接口信息,以方便用户更换 Flash。FTL 的主要功能包括地址映射、损耗均衡控制、垃圾回收、掉电保护、坏块管理及 ECC 校验等。& x; ^- i- s3 \& K
2. 文件系统
: p/ {) [1 C  k: t& O嵌入式应用中一般采用 FAT 文件系统,方便该系统能和别的系统之间直接进行文件互访,共享数据,存储格式的通用性是这一层的重点。它通过 FTL 提供的设备读写接口,封装文件管理操作,向上层提供文件操作接口。
% f  g0 I2 k7 t; T
1 _9 F" n5 V" A) M; n% ^由于嵌入式环境及 Flash 的物理特性,还会对 Flash 文件系统带来如下要求:8 Q3 T  Y0 k$ s+ w4 v( F8 V; c4 N
   8 q( a4 r$ p/ o4 O
掉电安全:/ R; M* O6 G8 \& b' x
嵌入式系统的运行环境比较恶劣,要求较高的可靠性。这要求无论程序崩溃或系统掉电,都不能影响数据的一致性和完整性。因为 Flash 存储器以块为擦除单元,块中原有数据的保存就比较麻烦,因为数据写入、垃圾回收等操作对系统异常终止都非常敏感,极易造成数据丢失和数据垃圾。
1 U2 ?2 K3 A$ Z* ]% q/ Q. s, u# Q0 Y' Q  m5 P' g
资源消耗低:
& E. d9 b2 H/ b. m5 T4 k嵌入式系统中的存储空间有限,因此对资源消耗有较为高的要求。# h) g+ E& q( ^/ W0 C
图 4 和图 5 是 ST 解决方案中文件系统和 NFTL 层资源消耗信息(IAR 编译环境),由此可见,ST的解决方案在资源消耗方面是非常出色的。) N6 }. `+ T$ a& e4 H
7 k, O  }- @3 q: o. a6 i/ @
%JVLQXB8LE9WT3[J{9SNG.png 6 e8 V; B8 {  Z* c# T! A# m% ~

- m+ A, V; Q* q0 s
收藏 评论0 发布时间:2022-3-1 12:37

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版