5.26 EEPROM设备
2026/7/20大约 2 分钟设备驱动驱动EEPROMI2C存储FAL
5.26 EEPROM设备
📚 本节导读
学习时长: 约 25 分钟
难度级别: ⭐⭐⭐☆☆
前置知识: C 语言基础、I2C 总线基础、5.1 设备驱动框架、5.17 FAL
🎯 学习目标
- 理解 OneOS EEPROM 设备的声明式注册机制
- 掌握
os_eeprom_info_t结构体的配置 - 理解 EEPROM 地址引脚配置(A2A1A0)
- 了解 EEPROM 与 FAL 的集成方式
一、概述
EEPROM 是 OneOS 提供的 I2C EEPROM 存储设备驱动框架,支持通过 I2C 总线访问 AT24Cxx 系列 EEPROM 芯片。驱动源码位于 drivers/eeprom/ 目录下,核心头文件为 eeprom.h。
EEPROM 设备框架的特点:
- 声明式注册:通过
OS_EEPROM_INFO宏将设备信息放入os_eeprom_info链接器段 - I2C 总线:基于 I2C 总线通信,支持多设备挂载
- 地址引脚配置:支持 A2A1A0 硬件地址引脚配置,可挂载 8 个同型号芯片
- FAL 集成:与 FAL(Flash 抽象层)无缝集成,通过 FAL 分区表管理
二、核心数据结构
2.1 EEPROM 设备信息 os_eeprom_info_t
struct os_eeprom_info
{
char *flash_name; /* Flash 设备名称 */
char *bus_name; /* I2C 总线名称 */
os_size_t capacity; /* 容量(字节) */
os_size_t page_size; /* 页大小(字节) */
uint8_t addr_input; /* 地址引脚电平(A2A1A0) */
os_size_t write_cycle; /* 写周期(毫秒) */
};2.2 地址引脚配置宏
#define ADDR_INPUT_A2A1A0_000 0x00 /* A2=0, A1=0, A0=0 */
#define ADDR_INPUT_A2A1A0_001 0x01
#define ADDR_INPUT_A2A1A0_010 0x02
#define ADDR_INPUT_A2A1A0_011 0x03
#define ADDR_INPUT_A2A1A0_100 0x04
#define ADDR_INPUT_A2A1A0_101 0x05
#define ADDR_INPUT_A2A1A0_110 0x06
#define ADDR_INPUT_A2A1A0_111 0x072.3 设备信息声明宏
#define OS_EEPROM_INFO static OS_USED OS_SECTION("os_eeprom_info") const os_eeprom_info_t三、常见 EEPROM 型号配置
| 型号 | 容量 | 页大小 | I2C 地址 |
|---|---|---|---|
| AT24C02 | 256B | 8B | 0x50 + A2A1A0 |
| AT24C08 | 1KB | 16B | 0x50 + A2 |
| AT24C32 | 4KB | 32B | 0x50 + A2A1A0 |
| AT24C64 | 8KB | 32B | 0x50 + A2A1A0 |
| AT24C128 | 16KB | 64B | 0x50 + A2A1A0 |
| AT24C256 | 32KB | 64B | 0x50 + A2A1A0 |
| AT24C512 | 64KB | 128B | 0x50 + A2A1A0 |
四、使用示例
4.1 声明 EEPROM 设备
#include <eeprom.h>
OS_EEPROM_INFO at24c256_dev = {
.flash_name = "at24c256",
.bus_name = "i2c0",
.capacity = 32768, /* 32KB */
.page_size = 64,
.addr_input = ADDR_INPUT_A2A1A0_000,
.write_cycle = 5,
};4.2 通过 FAL 访问 EEPROM
#include <fal/fal.h>
void eeprom_fal_demo(void)
{
fal_part_t *part;
uint8_t buf[64];
part = fal_part_find("cfg");
if (part == OS_NULL) return;
fal_part_read(part, 0, buf, sizeof(buf));
fal_part_unlock(part);
fal_part_erase(part, 0, fal_part_block_size(part));
memset(buf, 0x00, sizeof(buf));
buf[0] = 0x01;
fal_part_write(part, 0, buf, sizeof(buf));
fal_part_lock(part);
}📝 本节小结
本节介绍了 OneOS 中 EEPROM 设备驱动的使用方法,包括声明式注册、地址引脚配置、FAL 集成等。