文章目录
前言
本文仅仅简单介绍了写字节时序、写页面时序以及串行EEPROM AT24C02的读写。
1. 写字节时序(Byte Write)
特点
写字节时序允许每次向 AT24C02 写入一个字节的数据。
时序步骤
1.起始条件(Start Condition)
主机拉低 SDA 线,同时 SCL 为高电平。
2.发送设备地址(Device Address)
主机发送 7 位设备地址(AT24C02 的地址为 1010xxx,其中 xxx 由 A2、A1、A0 引脚决定)。
第 8 位为写模式(0)。
AT24C02 回应一个 ACK(拉低 SDA)。
3.发送内存地址(Word Address)
主机发送8 位的内存地址(0x00 到 0xFF)。
**AT24C02 **回应一个 ACK。
4.发送数据(Data)
主机发送 8 位数据。
AT24C02 回应一个 ACK。
5.停止条件(Stop Condition)
主机拉高 SDA 线,同时 SCL 为高电平。
时序图
Start | Device Address (Write) | ACK | Word Address | ACK | Data | ACK | Stop
代码示例
void AT24C02_WriteByte(uchar addr, uchar data) {
I2C_Start(); // 起始条件
I2C_SendByte(AT24C02_ADDR); // 发送设备地址(写模式)
I2C_WaitAck(); // 等待 ACK
I2C_SendByte(addr); // 发送内存地址
I2C_WaitAck(); // 等待 ACK
I2C_SendByte(data); // 发送数据
I2C_WaitAck(); // 等待 ACK
I2C_Stop(); // 停止条件
}
2. 写页面时序(Page Write)
特点
写页面时序允许一次向 AT24C02 写入多个字节(最多 8 字节)。AT24C02 的页大小为 8 字节。
时序步骤
1.起始条件(Start Condition)
主机拉低 SDA 线,同时 SCL 为高电平。
2.发送设备地址(Device Address)
主机发送 7 位设备地址(AT24C02 的地址为 1010xxx)。
第 8 位为写模式(0)。
AT24C02 回应一个 ACK。
3.发送内存地址(Word Address)
主机发送 8 位的内存地址(0x00 到 0xFF)。
AT24C02 回应一个 ACK。
4.发送数据(Data)
主机连续发送多个字节数据(最多 8 字节)。
每发送一个字节,AT24C02 回应一个 ACK。
5.停止条件(Stop Condition):
主机拉高 SDA 线,同时 SCL 为高电平。
注意事项:
-
页边界:如果写入的数据跨越页边界(例如从地址 0x07 开始写入 8 字节),超出部分会回绕到页的开头(覆盖前面的数据)。
-
写入时间:每次写入后,AT24C02 需要一定时间(典型值为 5ms)来完成内部写操作。
时序图:
Start | Device Address (Write) | ACK | Word Address | ACK | Data1 | ACK | Data2 | ACK | … | DataN | ACK | Stop
代码示例:
void AT24C02_WritePage(uchar addr, uchar *data, uchar len) {
uchar i;
I2C_Start();