当前位置: 首页 > news >正文

NAND Flash BCH和FTL

BCH和FTL是NAND Flash管理中的两个关键概念,但它们解决的问题完全不同。结合之前的讨论,我用体系化的方式为您解析:


一、快速回顾:Flash存储栈层级

从底层硬件到上层应用,典型NAND Flash系统分为:

|-------------------------------|
| 文件系统 (e.g. EXT4, UBIFS)   | ← 用户可见
|-------------------------------|
| 块设备层 (e.g. /dev/block/mmcblk0)  
|-------------------------------|
| **FTL层** (Flash Translation Layer) ← **核心差异点!**
|-------------------------------|
| MTD层 (Memory Technology Device)  
|-------------------------------|
| **BCH纠错引擎** (硬件/软件实现)    ← 数据可靠性基石
|-------------------------------|
| 物理NAND Flash芯片             |
|-------------------------------|

二、BCH:守护数据完整的“纠错卫士”

1. 是什么?
  • BCH (Bose–Chaudhuri–Hocquenghem) 是一种纠错码 (ECC) 算法,专门检测和修复NAND Flash中的位翻转错误(Bit Flip)。
  • 它属于前向纠错(FEC)技术,与循环冗余校验(CRC)不同,不仅能检错还能自动修复错误位
2. 为何需要?
  • NAND的物理缺陷: 随着工艺缩小(尤其是TLC/QLC),电荷干扰加剧,位错误率飙升。
  • 数据可靠性要求: 1个bit错误可能导致程序崩溃、系统死机。
3. 如何工作?
  1. 写入时:
    对每页(Page)数据计算BCH校验码(如每512字节生成14bit ECC),存入OOB区域。
    |------- Page (4KB) -------| |-- OOB (224B) --|
    [       User Data (4096B)      ][BCH ECC (14B)...]
    
  2. 读取时:
    用原始数据重新计算ECC,与OOB中存储的校验码对比。若不一致,则自动定位并修复错误位(可纠正1到几十个错误bit,取决于BCH强度)。
4. 技术特点
维度说明
实现位置硬件(SoC内置ECC引擎)或软件(Linux MTD层)
强度选择可配置(e.g. 4bit/512B, 24bit/1KB),纠错能力越强,OOB占用越多
延迟影响ECC计算增加读写延迟(硬件加速可缓解)
演进技术LDPC(低密度奇偶校验码),适用于3D NAND/QLC等高错误率场景

核心价值:解决物理缺陷导致的数据错误,确保读出的数据和写入时一致。


三、FTL:地址魔术师与寿命管家

1. 是什么?
  • FTL (Flash Translation Layer) 是位于物理NAND和块设备接口之间的抽象层
  • 它向上层(文件系统)伪装成普通块设备(如硬盘),隐藏NAND的所有“怪癖”。
2. 为何需要?

NAND有三大致命问题无法直接对接传统文件系统:

  1. 异地更新 (Out-of-place Update):
    数据不能覆盖写,必须写到新位置再标记旧数据无效。
  2. 擦除块大小不匹配:
    文件系统按512B扇区操作,NAND需整块(128KB~3MB)擦除。
  3. 坏块和磨损均衡 (Wear Leveling):
    需动态避开坏块,并平均分散写操作。
3. FTL的核心魔法
FTL 映射表
动态重映射
逻辑扇区 LBA 0x1000
物理页 PPN 0x3A42
逻辑扇区 LBA 0x1001
物理页 PPN 0x8B11
  1. 逻辑地址映射 (L2P - Logical to Physical)

    • 维护一张动态映射表,将文件系统看到的逻辑扇区地址(LBA)转换为物理页地址(PPN)。
    • 当更新数据时:写入新页 → 更新映射表 → 标记旧页无效。
  2. 垃圾回收 (Garbage Collection)

    • 定期扫描含无效数据的块,将有效数据搬移到新块,然后擦除旧块。
    • 触发条件: 空闲块不足或后台任务。
  3. 磨损均衡 (Wear Leveling)

    • 记录每个块的擦除次数(PE Cycle)。
    • 优先分配擦除次数少的块给新数据,避免某些块过早报废。
  4. 坏块管理 (Bad Block Management)

    • 隔离出厂坏块和使用中新增坏块。
    • 用预留好块替换坏块(动态重映射)。
4. 技术实现差异
FTL位置嵌入式系统SSD/eMMC
实现主体Linux UBI层 / 文件系统闪存控制器固件
代表技术UBIFS (on MTD)Samsung / SandForce FTL
资源消耗占用CPU和RAM专用处理器+RAM(DRAM-Less?)
映射表存储存于NAND (UBI meta-volume)存于缓存RAM + NAND备份

核心价值:让NAND像普通硬盘一样工作,同时延长寿命并处理坏块。


四、BCH vs FTL:本质区别与协作关系

1. 职责边界不同
BCHFTL
目标保障数据完整性(物理层可靠)提供地址抽象(逻辑层兼容)
层级物理层 / MTD层介于MTD和块设备层之间
操作按页处理ECC管理块间关系(映射、回收、均衡)
2. 依赖关系
已纠错的数据
虚拟块设备
物理NAND
BCH
MTD
FTL
FileSystem
  • BCH是基础: 没有可靠数据,FTL的映射表都可能损坏(导致灾难性故障)。
  • FTL是桥梁: 没有FTL,文件系统无法直接操作NAND。
3. 实例:一次写请求的旅程

假设文件系统要更新文件的一个扇区:

  1. 文件系统 发送写请求到 /dev/sda (FTL暴露的块设备)
  2. FTL层
    • 分配新物理页(选择PE次数低的块)
    • 更新L2P表:LBA 0x1000 → PPN 0x8F21
  3. MTD + BCH层
    • 数据通过BCH引擎生成ECC
    • MTD驱动将数据+ECC写入NAND页 0x8F21
  4. FTL后台
    • 标记旧页 0x3A42 无效
    • 触发垃圾回收:迁移同块的有效数据,擦除旧块

五、与MTD的关系

  1. MTD是地基
    • 提供统一接口 (/dev/mtdX) 操作Flash(读/写/擦除)
    • 集成BCH校验框架(通过mtd_oob_ops结构传递ECC数据)
  2. FTL构建在MTD之上
    • UBI/UBIFS通过MTD接口访问物理NAND
    • 嵌入式系统中,UBI = FTL轻量版,专为Linux优化
  3. BCH穿透各层
    • 可在硬件层(NAND控制器)、MTD层(软件ECC)、甚至FTL层(如SSD控制器)实现

📌 关键总结:

  • BCH 是医生,确保每个“细胞”(数据位)健康。
  • FTL 是城市规划师,管理“土地分配”(物理块)和“交通流”(数据更新)。
  • MTD 是市政基础建设,提供标准化的“水电接口”(读/写/擦除)。
    三者协同工作,才让NAND Flash能稳定存储数据!

理解这些层级关系,是设计高可靠嵌入式存储系统的关键基础。

http://www.lqws.cn/news/567487.html

相关文章:

  • 聊聊横向移动中的实际技术点 ----- ResponderSMB
  • FastAPI+Sqlite+HTML的登录注册与文件上传系统:完整实现指南
  • 驱动开发系列58 - 揭开内核IRQ框架的神秘面纱
  • 对基尼指数作出的努力
  • jenkins启动报错,一直无法启动
  • 介绍Windows下的由Sysinternals开发的一些小工具
  • 实战篇----利用 LangChain 和 BERT 用于命名实体识别-----完整代码
  • OpenAI 系列大模型发展时间轴与主要特性
  • 用Flink打造实时数仓:生产环境中的“坑”与“解药”
  • Mac homebrew 安装教程
  • linux系统---Nginx反向代理与缓存功能
  • Springboot 集成 SpringState 状态机
  • 代码随想录打卡第一天
  • C语言中常见字符串处理函数
  • 量子算法入门——5.Qiskit库介绍与简单应用(2)
  • Ubuntu服务器(公网)- Ubuntu客户端(内网)的FRP内网穿透配置教程
  • 博图SCL编程利器:CASE OF 语句详解与应用指南之设备运行模式选择框架
  • 领域驱动设计(DDD)【28】之实践或推广DDD的学习
  • docker compose基本使用以及示例
  • 基于springboot+vue的数字科技风险报告管理系统
  • URL带有中文会引入哪些问题
  • http相关网络问题面试怎么答
  • 算法-基础算法-递归算法(Python)
  • 第十二节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 两种权限控制方式(附前后端代码)
  • Vue 3 Teleport 特性
  • DXYZ投资-ai公司
  • 左神算法之Zigzag方式打印矩阵
  • Java面试题031:一文深入了解MySQL(3)
  • Vivado关联Vscode
  • Rust标量、复合类型与自定义类型、第三方并发结构