好的,阿杰 👍
我给你整理一份 EEPROM 存储芯片 24C02 的详细介绍,包含基本参数、接口说明、工作原理和应用。


📝 24C02 EEPROM 存储芯片详解

1️⃣ 基本概念

24C02 是一款 I²C 接口的 2Kb(256×8bit)EEPROM,属于 Atmel/Microchip 等厂商生产的 I²C 串行存储器。

  • 存储容量:2 Kbit = 256 Byte
  • 存储类型:非易失性存储(断电不丢失)
  • 接口类型:I²C(两线接口)
  • 工作电压:2.5V ~ 5.5V
  • 数据保持时间:一般 ≥ 100 年
  • 擦写次数:10⁵ 次以上

2️⃣ 引脚功能

引脚名称功能说明
1A0器件地址选择位
2A1器件地址选择位
3A2器件地址选择位
4GND接地
5SDAI²C 数据线(双向)
6SCLI²C 时钟线
7WP写保护(高电平禁止写操作)
8VCC电源(2.5~5.5V)

A0~A2 用于通过 I²C 地址选择多颗芯片同时挂载在总线上。


3️⃣ 工作原理

3.1 I²C 通信

  • 24C02 使用 I²C 协议,只需 SDA(数据线) 和 SCL(时钟线) 两根信号线即可通信。
  • I²C 总线特点:主机(MCU)控制时钟,支持多主机、多从机。

I²C 数据传输时序:

  1. 起始信号(START):SDA 由高拉低,SCL 高电平。
  2. 发送从机地址(7位) + R/W 位
    • 写操作 R/W=0
    • 读操作 R/W=1
  3. 从机应答(ACK):SDA 由从机拉低响应。
  4. 数据传输:每字节 8bit,完成后从机发送 ACK。
  5. 停止信号(STOP):SDA 从低拉高,SCL 高电平。

3.2 写操作(写入 EEPROM)

  1. MCU 发送 起始信号
  2. 发送 器件地址 + 写位(R/W=0)。
  3. 发送 字节地址(0~255)。
  4. 发送 数据字节
  5. 发送 停止信号,EEPROM 内部执行写入操作(约 5ms)。

写保护(WP=高)时,写操作被禁止。


3.3 读操作(读取 EEPROM)

随机读(Random Read):

  1. MCU 发送起始信号,器件地址 + 写位(0)
  2. 发送字节地址
  3. 发送重复起始信号,器件地址 + 读位(1)
  4. EEPROM 发送数据字节
  5. MCU 不再需要数据时发送 NACK+STOP

顺序读(Sequential Read):

  • 从指定地址开始读取,可连续读取多个字节,EEPROM 地址自动递增。

4️⃣ 使用特点

  • 非易失性:断电数据不丢失
  • 小容量:适合存储配置参数、校准数据、序列号等
  • 低功耗:工作电流低至 µA 级
  • 易扩展:多芯片可挂载在同一 I²C 总线上

5️⃣ 应用场景

  • 工业控制系统参数存储
  • 单片机系统的配置和校准数据
  • 家电、仪表、消费电子存储小量非易失性数据
  • 记录设备序列号、生产日期等信息

6️⃣ 示例:STM32 通过 I²C 读写 24C02

#include "stm32f1xx_hal.h"

#define EEPROM_ADDR 0xA0 // 24C02 默认器件地址

// 写单字节
void EEPROM_WriteByte(I2C_HandleTypeDef *hi2c, uint8_t mem_addr, uint8_t data) {
    HAL_I2C_Mem_Write(hi2c, EEPROM_ADDR, mem_addr, I2C_MEMADD_SIZE_8BIT, &data, 1, 100);
    HAL_Delay(5); // 写操作需延时
}

// 读单字节
uint8_t EEPROM_ReadByte(I2C_HandleTypeDef *hi2c, uint8_t mem_addr) {
    uint8_t data = 0;
    HAL_I2C_Mem_Read(hi2c, EEPROM_ADDR, mem_addr, I2C_MEMADD_SIZE_8BIT, &data, 1, 100);
    return data;
}

好嘞,阿杰 👍
我帮你画一个 24C02 EEPROM I²C 通信流程图,直观展示写入和读取操作的流程。


🖥️ 24C02 EEPROM I²C 通信流程图

写操作(Write):
┌──────────────┐
│   MCU 主机    │
└───────┬──────┘
        │ START 信号
        ▼
┌──────────────┐
│ 发送器件地址+W │
└───────┬──────┘
        │ ACK
        ▼
┌──────────────┐
│ 发送字节地址   │
└───────┬──────┘
        │ ACK
        ▼
┌──────────────┐
│ 发送数据字节   │
└───────┬──────┘
        │ ACK
        ▼
        STOP
        │
        ▼
EEPROM 内部写入数据 (~5ms)

-------------------------------------------------

读操作(Random Read):
┌──────────────┐
│   MCU 主机    │
└───────┬──────┘
        │ START 信号
        ▼
┌──────────────┐
│ 发送器件地址+W │
└───────┬──────┘
        │ ACK
        ▼
┌──────────────┐
│ 发送字节地址   │
└───────┬──────┘
        │ ACK
        ▼
        REPEATED START
        │
        ▼
┌──────────────┐
│ 发送器件地址+R │
└───────┬──────┘
        │ ACK
        ▼
┌──────────────┐
│ 读取数据字节   │
└───────┬──────┘
        │ NACK
        ▼
        STOP


📌 说明

  1. 起始信号(START):SDA 由高拉低,SCL 高电平。
  2. 器件地址 + R/W:确定操作类型(读或写)。
  3. ACK / NACK:从机应答或停止应答。
  4. 字节地址:EEPROM 内部存储单元地址(0~255)。
  5. 数据字节:实际写入或读取的数据。
  6. 停止信号(STOP):SDA 由低拉高,SCL 高电平,结束一次通信。