Fee模块用户手册
大约 5 分钟约 1576 字2025/12/26
Fee模块用户手册
目录
1. 简介
本模块提供了 FEE (Flash Emulated EEPROM) 功能,通过在DFlash上模拟EEPROM,实现了非易失性数据的读写存储。主要功能包括:
- 初始化: 通过
HLI_Fee_Init函数准备FEE所需的DFlash扇区和内部状态。 - 数据读写: 提供
HLI_Fee_Read和HLI_Fee_Write函数,用于以同步方式读写数据。 - 状态获取: 使用
HLI_Fee_GetStatus函数可以查询FEE模块当前的工作状态(如:空闲、读、写)。
1.1 支持的设备
当前软件适用于以下芯片:
- KF32A158xxxSF
1.2 名词及缩写
| 缩写 | 解释 |
|---|---|
| MCU | 微控制器 |
| ISR | 中断服务例程 |
| FEE | 模拟EEPROM |
2. 文件结构
| 文件名称 | 描述 |
|---|---|
| kf32axxx_hli_fee.c | 此文件包含fee驱动程序的通用功能 |
| kf32axxx_hli_fee.h | 此头文件输出fee驱动程序的宏、类型定义和函数原型 |
| kf32axxx_hli_fee_cfg.h | 此头文件输出fee驱动程序的配置 |
3. 数据结构
3.1 数据类型
3.1.1 宏定义
无。
3.1.2 枚举
FEE函数执行结果 (HLI_Fee_StatusType)
枚举值 解释 HLI_FEE_STATUS_OK 函数执行成功 HLI_FEE_STATUS_ERROR 通用错误 HLI_FEE_STATUS_PARAM_ERR 传入参数错误 HLI_FEE_STATUS_ADDR_ERR 地址错误 HLI_FEE_STATUS_STATE_ERR 状态错误 HLI_FEE_STATUS_CHECKSUM_ERR 校验和错误 HLI_FEE_STATUS_LOCKED_ERR 锁定状态错误,当前Sector处于锁定状态,暂不可操作 HLI_FEE_STATUS_READBACK_ERR 回读校验错误 HLI_FEE_STATUS_FLS_OPERATION_ERR Flash操作错误 HLI_FEE_STATUS_NO_DATA_ERR 无有效数据,FEE可能未初始化或者该地址从未写过数据 FEE状态 (HLI_Fee_StateEnumType)
枚举值 解释 FEE_UNINIT FEE未初始化 FEE_INIT FEE已初始化 FEE_WRITE FEE正在写入 FEE_READ FEE正在读取 FEE_IDLE FEE空闲
3.1.3 类型定义
无。
3.2 配置项说明
静态配置
宏定义 解释 取值范围 HLI_FEE_SECTOR_NUM 模拟EEPROM的扇区数量。总容量 = HLI_FEE_SECTOR_NUM * HLI_FEE_MAX_VALID_BLOCK_NUM_ONE_PAGE * 4字节。HLI_FEE_SECTOR_NUM * HLI_FEE_PAGE_NUM小于flash区域大小HLI_FEE_PAGE_NUM 每个模拟EEPROM扇区占用的DFlash页数(至少2页)。总占用DFlash空间 = HLI_FEE_SECTOR_NUM * HLI_FEE_PAGE_NUM * 1024字节。HLI_FEE_SECTOR_NUM * HLI_FEE_PAGE_NUM小于flash区域大小HLI_FEE_MAX_VALID_BLOCK_NUM_ONE_PAGE 每个扇区最大有效数据块数量(字为单位)。建议不大于63,否则可能因频繁翻页而影响Flash寿命。 0 - 125 HLI_FEE_BASE_ADDR FEE在DFlash中的结束地址。FEE从该地址向下增长。 取决于Flash地址 HLI_FEE_FEATURE_CHECKSUM 是否启用读写过程中的校验和验证。 true/false HLI_FEE_FEATURE_READ_BACK 是否启用写入过程中的回读验证。 true/false
4. 驱动函数
4.1 函数接口
4.1.1 HLI_Fee_Init
| Name | Description |
|---|---|
| 函数名称 | HLI_Fee_Init |
| 语法: | void HLI_Fee_Init(void) |
| 同步/异步: | 同步 |
| 重入性 : | 不可重入 |
| 返回值: | 无 |
| 描述: | 初始化Fee驱动。 |
| 注意事项: | 无 |
4.1.2 HLI_Fee_Write
| Name | Description |
|---|---|
| 函数名称 | HLI_Fee_Write |
| 语法 | HLI_Fee_StatusType HLI_Fee_Write(uint16_t WriteAddr, uint16_t DataLength, const void *Buffers) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 形参(输入) | WriteAddr : 写入的地址 |
| 形参(输入) | DataLength : 写入的长度 (单位: byte) |
| 形参(输入) | Buffers : 指向待写入数据的指针 |
| 返回值 | HLI_FEE_STATUS_OK: 写成功 |
| 返回值 | HLI_FEE_STATUS_PARAM_ERR: 参数错误 |
| 返回值 | HLI_FEE_STATUS_ERROR: FEE状态错误 |
| 描述 | 将数据写入模拟EEPROM。 |
| 注意事项 | 1. 如果写入地址或长度非4字节(取决于Flash硬件,不同硬件平台可能有差异)倍数,会触发内部的“读-改-写”过程。 |
4.1.3 HLI_Fee_Read
| Name | Description |
|---|---|
| 函数名称 | HLI_Fee_Read |
| 语法 | HLI_Fee_StatusType HLI_Fee_Read(uint16_t ReadAddr, uint16_t DataLength, void *Buffers) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 形参(输入) | ReadAddr : 读取的地址 |
| 形参(输入) | DataLength : 读取的长度 (单位: byte) |
| 形参(输出) | Buffers : 存放读取数据的指针 |
| 返回值 | HLI_FEE_STATUS_OK: 读成功 |
| 返回值 | HLI_FEE_STATUS_PARAM_ERR: 参数错误 |
| 返回值 | HLI_FEE_STATUS_ERROR: FEE状态错误 |
| 描述 | 从模拟EEPROM中读取数据。 |
| 注意事项 |
4.1.4 HLI_Fee_GetStatus
| Name | Description |
|---|---|
| 函数名称 | HLI_Fee_GetStatus |
| 语法 | HLI_Fee_StateEnumType HLI_Fee_GetStatus(void) |
| 同步/异步 | 同步 |
| 重入性 | 不可重入 |
| 返回值 | HLI_Fee_StateEnumType: 返回FEE当前状态。 |
| 描述 | 获取FEE当前的工作状态。 |
| 注意事项 | 无 |
4.2 中断回调
无。
5. 使用示例
注
示例中使用的参数仅用作示例演示,应用时以实际为准。
此示例展示了FEE模块的基本读写流程。
6. 限制与假设
- 读写单位: 写入或读取的单位如果不是4字节的倍数,会触发内部的“读-改-写”或“读-改”过程,这会增加操作耗时和Flash的擦写次数。
- 地址范围: 读写的地址和长度之和不能超过配置的最大地址范围。
- 寿命限制: FEE使用DFlash模拟EEPROM,其擦写寿命远低于物理EEPROM(通常无法达到100万次)。对于需要频繁更新数据的场景,不推荐使用FEE,建议外挂物理EEPROM。
- 地址增长方向: FEE在DFlash中的数据是向下增长的(从大地址到小地址),因此
HLI_FEE_BASE_ADDR必须正确配置为FEE区域的结束地址,且小于DFlash的最大地址。
7. 变更记录
| 版本 | 时间 | 变更记录 |
|---|---|---|
| v1.0 | 2025.11.20 | 新增初版文档 |
