Flash 存储适配
Flash 存储适配功能允许 emXcp Recorder 将采集数据持久化存储到外部 Flash,支持多种驱动集成方式。
功能概述
Flash 存储适配模块提供以下能力:
- 持久化存储:将 Recorder 采集的数据存储到外部 Flash,掉电后数据不丢失
- RAM 缓冲:提供一级 RAM 缓冲,确保采样中断中只做 RAM 写入,Flash 操作在主循环执行
- 多种驱动支持:适配不同用户驱动能力级别(无驱动、基础读写、完整驱动、文件系统)
用户驱动能力分级
根据用户已有的 Flash 驱动能力,分为四个级别:
| 级别 | 能力描述 | 典型用户 |
|---|---|---|
| L0:无驱动 | 仅有 Flash 芯片,无任何驱动代码 | 小团队/学生项目 |
| L1:基础读写 | 有 SPI 初始化 + 页写入 + 扇区擦除 + 读取 | 多数工业用户 |
| L2:完整驱动 | 有完整 Flash 操作 API,含状态查询 | 有经验的嵌入式团队 |
| L3:文件系统 | 有 LittleFS/FatFS 等文件系统 | 高端应用/汽车 ECU |
集成方式
L1 级别用户集成示例(最常见场景):
用户已有驱动函数:
- spi_flash_init() - Flash 初始化
- spi_flash_read(addr, buf, len) - 读取数据
- spi_flash_write(addr, buf, len) - 写入数据
- spi_flash_erase_sector(addr) - 扇区擦除
集成步骤:
1. 将现有驱动函数包装为 FlashDriver_t 结构体
2. 实现 get_sector_size / get_page_size(从数据手册获取)
3. 调用 hal_flash_register() 注册驱动
4. 配置 TEmxcpStorageConfig 参数
5. 调用 emeye_xcp_init_ex() 初始化
注意事项
- Flash 写入约束:Flash 写入前必须先擦除对应扇区
- CPU 阻塞:SPI NOR Flash 写入期间 CPU 可能被阻塞,emXcp 核心代码应放在内部 Flash 或 RAM 中执行
- 内存规划:需预留 RAM 用于一级缓冲,预留 Flash 分区用于数据存储
- 写入模式:支持同步写入模式,Flash 操作只在主循环中执行,不影响采样中断实时性
- 可选功能:Flash 存储为可选扩展,不配置时完全不影响原有纯 RAM 模式功能