# 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. 错误处理
   - 地址检查
   - 异常值处理
   - 初始化保护
