SPI NOR Flash 的读写接口看起来只有几条命令,但可靠使用它需要理解器件约束。驱动先读取 JEDEC ID 和参数,确定容量、页大小、擦除粒度和支持的命令;写入时必须先写使能、按页编程、等待忙状态结束。真正的难点在上层如何应对跨页、擦除、掉电和寿命。
页边界是最常见的数据损坏来源
页编程命令通常在页末尾回绕或忽略超出的部分,具体行为随芯片而不同。通用驱动应根据当前地址到页末的剩余空间拆分写入,随后轮询 WIP,并在需要时读回核对。不要把一个任意长度的缓冲区直接交给底层 page-program。
擦除在更大的扇区粒度发生,时间也比编程长得多。驱动接口应能报告忙、超时和擦除失败,上层则负责把有效记录搬到安全位置。掉电后能否恢复,取决于记录格式和提交顺序,不取决于 SPI 命令是否“返回成功”。
初始化时验证参数,运行时限制危险操作
读取 ID 后应验证容量、地址宽度和擦除命令是否符合预期。大容量芯片可能需要 4-byte 地址模式,混用 3-byte 地址会把数据写到错误位置。量产设备还要控制擦除和写入频率,避免诊断命令或异常重试不断磨损同一片区域。
参考:SFUD