SPI总线简介
四线制详解
四种模式(CPOL/CPHA)
多从机拓扑
NOR vs NAND
存储单元结构
Page/Block/Sector
读/写/擦除特性
Winbond W25Q系列
Macronix MX25系列
GD25系列
选型要点与参数对比
MCU与Flash连接
电平匹配(3.3V/1.8V)
去耦电容与PCB布局
信号完整性
GPIO复用配置
时钟极性/相位
波特率计算
DMA传输配置(STM32)
读ID (0x9F)
读数据 (0x03)
页编程 (0x02)
状态寄存器 (0x05)
写使能指令(0x06)
忙状态检测(WIP)
超时处理
轮询策略优化
扇区擦除(0x20)
块擦除(0xD8)
整片擦除(0xC7)
时间与功耗考量
Quad Enable设置
Quad Output/IO指令
0x6B / 0xEB
四线性能提升分析
Dual Output/IO指令
0x3B / 0xBB
双线应用场景
与QSPI对比
XIP概念与优势
Flash映射到地址空间
XIP配置步骤
Cache与预取策略
HAL层设计
LL层设计
中间件层(抽象层)
应用层接口
NOR坏块特性
坏块标记策略
坏块跳过算法
ECC校验(可选)
均衡原理
动态与静态均衡
日志型磨损均衡
擦除计数管理
写操作掉电风险
日志/备份机制
CRC校验
原子操作设计
缓存策略(Read/Write)
批量操作合并
中断与DMA优化
延迟分析
互斥锁与信号量
操作队列设计
优先级反转处理
FreeRTOS集成示例
逻辑分析仪抓波形
读写正确性测试
压力测试(擦写循环)
边界条件测试
超时错误
写保护错误
擦除失败处理
状态机异常恢复
LittleFS/FATFS对接
Block Device接口
文件系统挂载/卸载
Bootloader分区设计
固件升级流程
精简Flash驱动
安全擦除(0x44/0x84)
OTP区域操作
读/写保护
唯一ID读取
Python脚本驱动
测试用例设计
覆盖率分析
CI/CD集成
MTD子系统简介
SPI-NOR驱动框架
设备树配置
mtd-utils用户空间
SPI设备驱动框架
Flash设备注册
DFS文件系统对接
数据读写出错
擦除失败
驱动卡死
性能/兼容性问题
STM32+W25Q64
Flash抽象层
集成LittleFS
固件升级功能