9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
4.4 KiB
4.4 KiB
flash_file_mgr 模块说明
路径:
BSP/flash_file_mgr/
作用:提供历史故障记录的掉电持久化能力,采用“EEPROM 管理索引 + 外部 Flash 存储内容”的双存储架构。
1. 模块文件
fault_flash_impl.h- 历史故障持久化对外接口声明
S_HIS_FAULT_MNG管理结构定义
fault_flash_impl.c- EEPROM 索引读写实现
- 外部 Flash 记录读写实现
- 历史记录计数、按“最新N条”读取实现
meter_calculate_flash_impl.c- 充电订单记录持久化实现(EEPROM 管理块 + 外部 Flash 订单正文)
- 提供订单保存/按索引读取/按位置读取、临时订单 EEPROM 缓存接口
- 支持双枪临时订单标志管理(用于掉电恢复)
unsettled_order_mng.c- 未结算订单列表管理(EEPROM 持久化)
- 支持未结订单添加、移除、查询、清空与 CRC 校验
2. 设计目标
- 将高频变化的小数据(计数、索引)放 EEPROM,降低 Flash 管理复杂度;
- 将体积较大的历史故障记录放 externalflash,便于顺序存储与扩展;
- 提供统一接口给
fault_cheak、meter_calculate,业务层只关心“保存/读取故障或订单记录”。
3. 存储布局
3.1 EEPROM(索引区)
- 地址:
EEPROM_ADDR_HISALARM_MNG - 数据:
S_HIS_FAULT_MNGu16_head:固定头0x5AA5,用于有效性校验u16_hisFaultCnt:历史记录数u16_currIndex:当前最新逻辑索引(环形)
3.2 externalflash(数据区)
- 基址:
DATAFLASH_FAULT_ADDR - 扇区大小:
SPI_SECTOR_SIZE - 单条记录格式:
1 byte RECORD_HEADERsizeof(HIS_FAULT_DATA_T) bytes 数据体1 byte CRC(u16_crc_checksum低 8 位)
4. 核心接口说明
v_hisFault_save_record(HIS_FAULT_DATA_T *pt_hisFault_data)- 保存一条历史故障
- 更新环形索引与计数
- 写 externalflash 记录后更新 EEPROM 管理信息
u8_fault_read_his_by_newest(U16_T newest_pos, HIS_FAULT_DATA_T *pt_hisFault)- 按“最新优先”读取历史记录
newest_pos=0表示最新一条
u16_fault_get_his_count(void)- 返回历史记录数量(带上限保护)
v_fault_clear_his_fault(void)- 清空管理信息(不逐条清除 Flash 区内容)
4.1 计量订单相关接口(meter_calculate)
v_chg_order_flash_init(void)- 初始化充电订单管理信息(读取 EEPROM 管理块,必要时恢复默认)
u32_chg_order_save_record(S_LOG_DATA *order_data)- 保存订单到外部 Flash,并返回单调递增订单索引
v_read_chg_order_record(S_LOG_DATA *order_data, U32_T index)- 按订单索引读取订单记录
v_save_temp_chg_record_to_eeprom(...)/v_read_temp_chg_record_from_eeprom(...)- 充电过程临时订单缓存/恢复(EEPROM)
u8_add_unsettled_order(U32_T orderIndex)/u8_remove_unsettled_order(U32_T orderIndex)- 未结算订单添加/移除
u8_check_order_settled(U32_T orderIndex)- 查询订单是否仍处于未结算列表
5. 写入策略
- 采用环形索引写入,达到上限后覆盖最老记录;
- 每个扇区的第 1 条记录写入前先擦除该扇区,避免旧数据干扰;
- 记录读取时校验:
- 头字节必须是
RECORD_HEADER - CRC 必须匹配
- 否则判定为无效记录。
- 头字节必须是
6. 依赖关系
- EEPROM 驱动:
BSP/eeprom/fm24cl16.c - 外部 Flash 驱动:
BSP/externalflash/flash_external_data.c - CRC 工具:
app/publicdata/public_func.c的u16_crc_checksum - 故障数据结构:
app/fault_cheak/faultcheck_task.h - 计量订单结构:
app/meter_calculate/meter_calculate_impl.h(S_LOG_DATA)
7. 注意事项
- 请保证
DATAFLASH_FAULT_ADDR区域不与其他业务区重叠; HIS_FAULT_MAX_CNT与扇区分配需协同评估,避免有效容量不足;- 计量订单区(
DATAFLASH_HIS_RECORD_ADDR)与故障区地址需避免重叠; - 未结算订单列表与订单管理块均依赖 EEPROM,建议控制写频率并保留 CRC 校验;
- 该模块默认在任务上下文调用,若多任务并发写入建议增加互斥保护。