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

3.6 KiB
Raw Blame History

eeprom 模块说明(i2c1 / fm24cl16

本文档描述 CCU621_M 工程中 BSP/eeprom 的职责、接口、初始化方式与测试方法。

返回主说明

快速跳转


1. 模块职责

BSP/eeprom 负责 FM24CL16I2C 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.cv_sys_hardware_init() 中接入:

  1. gpio_config():配置 I2C1 对应 GPIO
  2. i2c_config():配置 I2C1 时序并使能;
  3. 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_BYTESFRAM_START_ADDRFRAM_END_ADDR 等;
  • 分区宏:EEPROM_ADDR_CHGRCD_MNGEEPROM_ADDR_HISALARM_MNGEEPROM_ADDR_UNSETTLED_MNGEEPROM_ADDR_CARD_MNGEEPROM_ADDR_A_LOG_DATAEEPROM_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. 维护注意事项

  1. 保持 EEPROM 仅一套实现,避免同名接口重复定义;
  2. 修改 I2C 引脚/时序时,同步更新 i2c1.h 与硬件原理图;
  3. 增加上层功能前,先通过 u8_app_test_eeprom_rw_once() 回归;
  4. EEPROM 驱动已引入互斥访问,新增调用方需避免在中断上下文直接调用阻塞式接口;
  5. 建议业务数据区与测试区分离(例如测试使用 0x0600 起始窗口),避免互相覆盖。

关联文档