【Zephyr开发实践系列】07_SPI-Flash数据操作的非对齐与边界处理分析
文章目录
- 前言
- 一、操作边界对比
- 二、NAND Flash物理结构回顾
- 2.1 华邦W25N04K典型结构
- 2.2 关键约束
- 三、边界问题
- 3.1 跨页写入实例(假设页大小为4KB)
- 3.2 跨页写入实例(假设页大小为4KB)
- 四、读写操作的三段式非对齐处理
- 4.1 三段式分段
- 4.2 数据读取
- 4.3 数据写入
- 五、擦除操作的边界特性与数据对齐
- 5.1擦除边界特性
- 5.1数据对齐
- 总结
前言
在嵌入式存储设备开发当中,Flash的页编程与块擦除带来了独特的挑战:由于操作并不是按bit进行操作的,那么数据不可能总是完美对齐页边界的,会产生不连续的内存碎片。这种现象可称为非对齐操作。
本文将深入剖析NAND Flash的边界处理机制,并提供工业级解决方案。
一、操作边界对比
操作类型 | 边界单位 | 最小操作单元 | 非对齐处理能力 |
---|---|---|---|
读取 | 页边界 (页内任意字节) | 1字节 | ✅ 完全支持 |
写入 | 页边界(页内任意字节) | 1字节 | ✅ 完全支持 |
擦除 | 块边界 (整块擦除) | 1块 | ❌ 必须块对齐 |
二、NAND Flash物理结构回顾
2.1 华邦W25N04K典型结构
|------ Block 0 ------|------ Block 1 ------| ...
| Page0 | Page1 | ... | Page0 | Page1 | ... |
| 2KB | 2KB | ... | 2KB | 2KB | ... |
说明:
- 华邦W25N04KV属于512M存储设备
- 1个Block包含128K大小的页
- 1页包含2048Byte=2KB字节
2.2 关键约束
- 写入前必须擦除(整块擦除)
- 编程单位是页(部分编程可能导致位翻转)
- 跨页操作不可避免