9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
103 lines
3.6 KiB
Markdown
103 lines
3.6 KiB
Markdown
# eeprom 模块说明(i2c1 / fm24cl16)
|
||
|
||
> 本文档描述 `CCU621_M` 工程中 `BSP/eeprom` 的职责、接口、初始化方式与测试方法。
|
||
|
||
[返回主说明](./../../README.md)
|
||
|
||
## 快速跳转
|
||
|
||
- [1. 模块职责](#1-模块职责)
|
||
- [2. 涉及文件](#2-涉及文件)
|
||
- [3. 初始化流程](#3-初始化流程)
|
||
- [4. 对外接口](#4-对外接口)
|
||
- [5. 已接入测试](#5-已接入测试)
|
||
- [6. 维护注意事项](#6-维护注意事项)
|
||
- [返回主说明 README](./../../README.md)
|
||
|
||
---
|
||
|
||
## 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()` 中接入:
|
||
|
||
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_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. 维护注意事项
|
||
|
||
1. 保持 EEPROM 仅一套实现,避免同名接口重复定义;
|
||
2. 修改 I2C 引脚/时序时,同步更新 `i2c1.h` 与硬件原理图;
|
||
3. 增加上层功能前,先通过 `u8_app_test_eeprom_rw_once()` 回归;
|
||
4. EEPROM 驱动已引入互斥访问,新增调用方需避免在中断上下文直接调用阻塞式接口;
|
||
5. 建议业务数据区与测试区分离(例如测试使用 `0x0600` 起始窗口),避免互相覆盖。
|
||
|
||
---
|
||
|
||
## 关联文档
|
||
|
||
- 主索引:[`CCU621_M/README.md`](./../../README.md)
|
||
- 本文位置:`BSP/eeprom/eeprom模块说明.md`
|