EEPROM(Electrically Erasable Programmable Read-Only Memory)是一种非易失性存储器,允许在断电后仍保持数据,且支持电擦除和电写入操作,其命令集是控制EEPROM读写、擦除等操作的核心,通常通过特定的时序和协议(如I²C、SPI)与微控制器(MCU)交互,以下将详细介绍EEPROM命令的类型、功能、实现方式及注意事项。

EEPROM命令概述
EEPROM命令由操作码(Opcode)、地址(Address)和数据(Data)组成,具体格式因通信协议和芯片型号而异,以常见的I²C接口EEPROM(如AT24C系列)为例,其命令结构通常包括:起始信号、设备地址(含读写位)、操作码(部分芯片需要)、存储地址、数据(读操作时为输出,写操作时为输入)和停止信号,SPI接口EEPROM则通过片选(CS)、时钟(SCK)、主机输出从机输入(MOSI)和主机输入从机输出(MISO)信号线传输命令,命令格式通常包含1-2字节的操作码和地址。
主要命令类型及功能
-
写使能命令(Write Enable, WE)
在写或擦除操作前,需先发送写使能命令,以解锁EEPROM的内部写保护机制,对于I²C接口,该命令通常通过发送设备地址+写操作码(0x06)实现;SPI接口则通过发送特定操作码(如0x06)激活写使能,若未发送写使能命令,直接执行写操作将被忽略。 -
写操作命令(Write)
写操作分为字节写和页写(Page Write),字节写需指定目标地址和1字节数据;页写可连续写入多字节数据(数量由芯片页大小决定,如AT24C02为8字节/页),超出页地址范围的数据将回绕至页首。- I²C字节写流程:起始信号→设备地址(写)→ACK→存储地址→ACK→数据→ACK→停止信号。
- SPI页写流程:CS拉低→发送写操作码(如0x02)→发送16位地址→发送n字节数据→CS拉高。
写操作完成后,需等待内部写周期(典型值为5-10ms),期间可通过状态寄存器或等待时间确保数据稳定。
-
读操作命令(Read)
读操作包括当前地址读、随机读和顺序读,当前地址读从上次地址的下一地址开始读取;随机读需先发送虚假写命令指定起始地址;顺序读可连续读取多字节数据,直至发送停止信号。(图片来源网络,侵删)- I²C随机读流程:起始信号→设备地址(写)→ACK→存储地址→起始信号→设备地址(读)→ACK→读取数据→NACK→停止信号。
- SPI顺序读流程:CS拉低→发送读操作码(如0x03)→发送16位地址→读取数据→CS拉高。
-
擦除操作命令(Erase)
EEPROM的擦除操作通常与写操作合并,即写入新数据时自动擦除原数据(字节擦除),部分高端芯片支持块擦除(Sector Erase),需发送块擦除命令(如SPI的0x20)和块起始地址,擦除时间较长(约5-20ms)。 -
状态寄存器命令(Status Register Read/Write)
用于查询或配置芯片状态,如写使能锁存位(WEL)、写进行位(BUSY),I²C接口通过发送设备地址+状态寄存器操作码(如0x05)读取;SPI接口通过发送0x05操作码读取,0x01写入。
命令执行时序与注意事项
- 时序要求:各信号需严格遵循时序参数,如I²C的SCL时钟频率(标准模式100kHz,快速模式400kHz)、建立时间(tSU;STA)、保持时间(tHD;STA)等;SPI的SCK时钟频率(通常可达20MHz以上)、上升/下降沿时间等。
- 写保护:部分芯片提供硬件写保护(WP引脚)和软件写保护(状态寄存器),需谨慎配置以避免误操作。
- 多主机竞争:I²C总线需通过仲裁机制避免多主机冲突,SPI接口需确保CS信号仅在单次传输期间有效。
- 电压范围:命令操作需在芯片工作电压范围内(如2.7V-5.5V),否则可能导致数据错误或硬件损坏。
常见EEPROM命令对比(以I²C和SPI接口为例)
命令类型 | I²C操作码 | SPI操作码 | 功能说明 |
---|---|---|---|
写使能 | 0x06 | 0x06 | 解锁写保护,准备写/擦除操作 |
字节写 | 无独立操作码 | 0x02 | 写入1字节数据到指定地址 |
页写 | 无独立操作码 | 0x02 | 连续写入多字节数据(不超过页大小) |
随机读 | 无独立操作码 | 0x03 | 从指定地址读取1字节数据 |
顺序读 | 无独立操作码 | 0x03 | 连续读取多字节数据 |
块擦除 | 不支持 | 0x20 | 擦除指定块的数据(全1) |
状态寄存器读 | 0x05 | 0x05 | 读取芯片状态(如BUSY、WEL位) |
相关问答FAQs
Q1:EEPROM写操作时为何需要等待内部写周期?如何判断写操作完成?
A1:EEPROM的写操作需通过内部电荷泵升高电压以擦除和编程数据,这一过程需要一定时间(通常为几毫秒),若在写周期内进行其他操作(如读),可能读取到旧数据或导致数据损坏,判断写操作完成的方法有两种:一是通过状态寄存器中的BUSY位(读为0表示完成);二是通过软件延时,延时时间需大于芯片手册规定的最大写周期时间(如10ms)。
Q2:为什么EEPROM的页写操作不能跨页写入?如何正确处理跨页数据?
A2:EEPROM的页写操作采用缓冲机制,当写入数据超出当前页边界时,超出部分会回绕至页首覆盖已写入数据,导致数据错误,某芯片页大小为32字节,若从地址30开始写入5字节数据,实际写入地址为30、31、0、1、2,正确处理方法是:若需写入数据跨页,应将其拆分为多次页写操作,每次写入量不超过剩余页空间,并确保每次操作后等待写周期完成。
