# eeprom.py 函数文档
使用ESP32的NVS(非易失性存储)实现EEPROM功能,用于系统配置的持久化存储。
## 常量定义
- EEPROM_SIZE: EEPROM存储大小 (512字节)
## EEPROM 类
### 初始化
python
def __init__(self)
- 功能: 初始化EEPROM模拟器
- 实现:
- 创建数据字典
- 初始化NVS命名空间('DWIN')
- 从NVS读取初始数据
### NVS操作函数
#### write_to_NVS(self)
python
def write_to_NVS(self)
- 功能: 将内存中的数据写入NVS存储
- 实现流程:
1. 创建字节数组缓冲区
2. 逐字节写入数据
3. 设置NVS blob数据
4. 提交更改
- 存储键名: 'DWIN_CFG'
#### read_from_NVS(self)
python
def read_from_NVS(self)
- 功能: 从NVS读取数据到内存
- 实现流程:
1. 创建字节数组缓冲区
2. 读取NVS blob数据
3. 逐字节写入内存
- 错误处理:
- 首次使用自动初始化
- 异常时写入默认值
- 返回值: 读取的字节数组
### 基础读写操作
#### read_byte(self, addr)
python
def read_byte(self, addr)
- 功能: 读取单个字节
- 参数:
- addr: 字节地址
- 返回值: 0-255的字节值
- 默认值: 不存在时返回0
#### write_byte(self, addr, value)
python
def write_byte(self, addr, value)
- 功能: 写入单个字节
- 参数:
- addr: 字节地址
- value: 要写入的值
- 特性: 自动截断为8位
### 字(Word)操作
#### read_word(self, addr)
python
def read_word(self, addr)
- 功能: 读取16位字
- 参数:
- addr: 起始地址
- 实现:
- 高字节在前
- 低字节在后
- 返回值: 0-65535的整数
#### write_word(self, addr, value)
python
def write_word(self, addr, value)
- 功能: 写入16位字
- 参数:
- addr: 起始地址
- value: 要写入的值
- 实现:
- 高字节在前
- 低字节在后
## 使用示例
### 基本读写操作
python
# 创建EEPROM实例
eeprom = EEPROM()
# 写入字节
eeprom.write_byte(0, 0xFF)
value = eeprom.read_byte(0) # 返回255
# 写入字
eeprom.write_word(1, 0x1234)
value = eeprom.read_word(1) # 返回4660
# 保存到NVS
eeprom.write_to_NVS()
### 配置存储
python
# 存储配置
def save_config(eeprom, config):
eeprom.write_word(0, config['version'])
eeprom.write_word(2, config['parameter1'])
eeprom.write_word(4, config['parameter2'])
eeprom.write_to_NVS()
# 读取配置
def load_config(eeprom):
return {
'version': eeprom.read_word(0),
'parameter1': eeprom.read_word(2),
'parameter2': eeprom.read_word(4)
}
## 数据格式
### 字节格式
- 单字节: 8位无符号整数 (0-255)
- 字: 16位无符号整数 (0-65535)
- 存储顺序: 高字节在前(大端序)
### 地址空间
- 范围: 0-511 (EEPROM_SIZE)
- 字对齐: 字操作需要注意地址对齐
## 注意事项
1. 存储限制
- 总大小限制为512字节
- 避免越界访问
- 合理规划地址空间
2. 写入操作
- 字操作会占用两个连续地址
- 注意地址不要重叠
- 及时调用write_to_NVS保存
3. 性能考虑
- 批量操作后统一保存
- 避免频繁写入NVS
- 合理使用字操作减少访问次数
4. 数据持久化
- 系统复位后自动加载
- 写入后需要显式保存
- 首次使用自动初始化
5. 错误处理
- 地址检查
- 异常值处理
- 初始化保护