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() 初始化

注意事项

  1. Flash 写入约束:Flash 写入前必须先擦除对应扇区
  2. CPU 阻塞:SPI NOR Flash 写入期间 CPU 可能被阻塞,emXcp 核心代码应放在内部 Flash 或 RAM 中执行
  3. 内存规划:需预留 RAM 用于一级缓冲,预留 Flash 分区用于数据存储
  4. 写入模式:支持同步写入模式,Flash 操作只在主循环中执行,不影响采样中断实时性
  5. 可选功能:Flash 存储为可选扩展,不配置时完全不影响原有纯 RAM 模式功能

相关文档