9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
3.6 KiB
3.6 KiB
eeprom 模块说明(i2c1 / fm24cl16)
本文档描述
CCU621_M工程中BSP/eeprom的职责、接口、初始化方式与测试方法。
快速跳转
1. 模块职责
BSP/eeprom 负责 FM24CL16(I2C FRAM)基础驱动能力,当前职责为:
- I2C1 引脚与时序配置;
- FRAM 地址初始化;
- FRAM 指定地址写入与读出;
- 提供上层测试调用接口(由
app_test验证读写一致性)。
2. 涉及文件
| 文件 | 说明 |
|---|---|
BSP/eeprom/i2c1.h |
I2C1 宏配置与函数声明 |
BSP/eeprom/i2c1.c |
I2C1 GPIO/I2C 初始化与总线复位 |
BSP/eeprom/fm24cl16.h |
FM24CL16 对外接口声明 + 容量/地址分区宏 |
BSP/eeprom/fm24cl16.c |
FM24CL16 读写实现(eeprom_buffer_write/read 等) |
BSP/eeprom/eeprom_map.h |
兼容头(转发到 fm24cl16.h) |
说明:历史冗余文件
eeprom_I2C_fm24cl16.c/.h已移除,避免双实现并存导致维护混乱。
3. 初始化流程
当前已在 BSP/sys_drv_init.c 的 v_sys_hardware_init() 中接入:
gpio_config():配置 I2C1 对应 GPIO;i2c_config():配置 I2C1 时序并使能;i2c_eeprom_init():初始化 FM24CL16 设备地址等参数。
调用位置:系统硬件初始化阶段(通信外设初始化流程中)。
4. 对外接口
4.1 I2C 基础接口(i2c1.c)
void gpio_config(void);void i2c_config(void);void i2c_bus_reset(void);
4.2 EEPROM 接口与地址分区(fm24cl16.h + fm24cl16.c)
void i2c_eeprom_init(void);void eeprom_buffer_write(uint8_t *p_buffer, uint16_t write_address, uint16_t number_of_byte);void eeprom_buffer_read(uint8_t *p_buffer, uint16_t read_address, uint16_t number_of_byte);void eeprom_driver_init(void);- 容量/范围宏:
FRAM_SIZE_BYTES、FRAM_START_ADDR、FRAM_END_ADDR等; - 分区宏:
EEPROM_ADDR_CHGRCD_MNG、EEPROM_ADDR_HISALARM_MNG、EEPROM_ADDR_UNSETTLED_MNG、EEPROM_ADDR_CARD_MNG、EEPROM_ADDR_A_LOG_DATA、EEPROM_ADDR_B_LOG_DATA。
说明:
eeprom_page_write()为驱动内部函数,已收敛为fm24cl16.c内部static,不再对外暴露。
5. 已接入测试
在 app/app_init/app_test.c 中,测试流程已统一由 v_app_test_periodic() 调度,并受总开关控制:
APP_TEST_ENABLE:0 时不编译测试实现,仅保留空函数桩;- EEPROM 基础读写:固定地址 32B;
- EEPROM 多地址测试:覆盖分区起点与测试窗口地址,执行备份-写读校验-恢复;
- EEPROM 速度测试:在测试窗口执行循环读写并统计吞吐;
- Flash 测试:固定地址测速 + 1MB 步长 32MB 全空间校验。
6. 维护注意事项
- 保持 EEPROM 仅一套实现,避免同名接口重复定义;
- 修改 I2C 引脚/时序时,同步更新
i2c1.h与硬件原理图; - 增加上层功能前,先通过
u8_app_test_eeprom_rw_once()回归; - EEPROM 驱动已引入互斥访问,新增调用方需避免在中断上下文直接调用阻塞式接口;
- 建议业务数据区与测试区分离(例如测试使用
0x0600起始窗口),避免互相覆盖。
关联文档
- 主索引:
CCU621_M/README.md - 本文位置:
BSP/eeprom/eeprom模块说明.md