菜鸟科技网

EEPROM命令有哪些,该如何正确使用它们?

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

EEPROM命令有哪些,该如何正确使用它们?-图1
(图片来源网络,侵删)

EEPROM命令概述

EEPROM命令由操作码(Opcode)、地址(Address)和数据(Data)组成,具体格式因通信协议和芯片型号而异,以常见的I²C接口EEPROM(如AT24C系列)为例,其命令结构通常包括:起始信号、设备地址(含读写位)、操作码(部分芯片需要)、存储地址、数据(读操作时为输出,写操作时为输入)和停止信号,SPI接口EEPROM则通过片选(CS)、时钟(SCK)、主机输出从机输入(MOSI)和主机输入从机输出(MISO)信号线传输命令,命令格式通常包含1-2字节的操作码和地址。

主要命令类型及功能

  1. 写使能命令(Write Enable, WE)
    在写或擦除操作前,需先发送写使能命令,以解锁EEPROM的内部写保护机制,对于I²C接口,该命令通常通过发送设备地址+写操作码(0x06)实现;SPI接口则通过发送特定操作码(如0x06)激活写使能,若未发送写使能命令,直接执行写操作将被忽略。

  2. 写操作命令(Write)
    写操作分为字节写和页写(Page Write),字节写需指定目标地址和1字节数据;页写可连续写入多字节数据(数量由芯片页大小决定,如AT24C02为8字节/页),超出页地址范围的数据将回绕至页首。

    • I²C字节写流程:起始信号→设备地址(写)→ACK→存储地址→ACK→数据→ACK→停止信号。
    • SPI页写流程:CS拉低→发送写操作码(如0x02)→发送16位地址→发送n字节数据→CS拉高。
      写操作完成后,需等待内部写周期(典型值为5-10ms),期间可通过状态寄存器或等待时间确保数据稳定。
  3. 读操作命令(Read)
    读操作包括当前地址读、随机读和顺序读,当前地址读从上次地址的下一地址开始读取;随机读需先发送虚假写命令指定起始地址;顺序读可连续读取多字节数据,直至发送停止信号。

    EEPROM命令有哪些,该如何正确使用它们?-图2
    (图片来源网络,侵删)
    • I²C随机读流程:起始信号→设备地址(写)→ACK→存储地址→起始信号→设备地址(读)→ACK→读取数据→NACK→停止信号。
    • SPI顺序读流程:CS拉低→发送读操作码(如0x03)→发送16位地址→读取数据→CS拉高。
  4. 擦除操作命令(Erase)
    EEPROM的擦除操作通常与写操作合并,即写入新数据时自动擦除原数据(字节擦除),部分高端芯片支持块擦除(Sector Erase),需发送块擦除命令(如SPI的0x20)和块起始地址,擦除时间较长(约5-20ms)。

  5. 状态寄存器命令(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,正确处理方法是:若需写入数据跨页,应将其拆分为多次页写操作,每次写入量不超过剩余页空间,并确保每次操作后等待写周期完成。

EEPROM命令有哪些,该如何正确使用它们?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇