Files
CCU621M/BSP/flash_file_mgr/flash_file_mgr模块说明.md
T

109 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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_MNG`
- `u16_head`:固定头 `0x5AA5`,用于有效性校验
- `u16_hisFaultCnt`:历史记录数
- `u16_currIndex`:当前最新逻辑索引(环形)
### 3.2 externalflash(数据区)
- 基址:`DATAFLASH_FAULT_ADDR`
- 扇区大小:`SPI_SECTOR_SIZE`
- 单条记录格式:
- `1 byte RECORD_HEADER`
- `sizeof(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 校验;
- 该模块默认在任务上下文调用,若多任务并发写入建议增加互斥保护。
## 8. 相关文档
- [主说明 README](../../README.md)
- [fault_cheak 模块说明](../../app/fault_cheak/fault_cheak模块说明.md)
- [eeprom 模块说明](../eeprom/eeprom模块说明.md)
- [externalflash 模块说明](../externalflash/externalflash模块说明.md)