AT24Cxx
1. 简介
AT24Cxx是常用的I2C串行EEPROM存储器,具有容量大、读写速度快、掉电数据不丢失、串行接口简单易用等特点。AT24Cxx系列存储器广泛应用于工业控制、数据采集、智能仪表、消费类电子产品等领域。
- 封装类型有: SOT23-5(极小封装), SOP8(常用封装), PDIP-8等
- 工作电压: 3.3V, 5V 都是可以的,但是一般建议使用3.3V,
2. 芯片的硬件连接
AT24Cxx芯片的硬件连接主要包括电源、地、I2C总线和写保护引脚。其中,电源和地引脚用于为芯片提供电源和地,I2C总线引脚用于与主控制器进行通信,写保护引脚用于控制芯片的写保护状态。 注意: I2C总线的两条线是SCL和SDA,必须要上拉至VCC,否则无法正常通信. 一般使用电阻10KΩ上拉. 
3. 芯片的读写操作
- 芯片的初始化:在开始读写操作之前,需要先对芯片进行初始化。初始化包括设置芯片的地址、选择芯片的工作模式等。
- 写操作: 写操作包括字节写和页写两种方式。字节写是指将一个字节的数据写入芯片的指定地址,页写是指将多个字节的数据写入芯片的指定地址。写操作需要先发送芯片的地址,然后发送要写入的数据。
- 读操作: 读操作是指从芯片中读取数据。读操作需要先发送芯片的地址,然后发送要读取的地址,最后读取数据。
4. 芯片的读写时序
参考:
I2C总线的时序
读写时序如下:
| 时序 | 描述 |
|---|---|
| Start | 起始信号 |
| Address | 地址 |
| Write | 写 |
| Read | 读 |
| Stop | 停止信号 |
5. 芯片的参数设定
c
/* AT24C02参数定义 */
#define AT24C02_ADDRESS 0xA0 // AT24C02地址(写),读地址为0xA1
#define AT24C02_PAGE_SIZE 8 // 页大小(字节)
#define AT24C02_SIZE 256 // 总容量(字节)这里要说明一下,当芯片的3个地址脚全部接地时,其地址就为0xA0,当然其它容量的芯片需要根据手册确定.
页大小是指一次可以写入的最大字节数,不同容量的芯片的页大小不同.这里需要根据手册确定. 这个页大小不是芯片的制造工艺决定的,而是芯片内部在厂家设计时设计的一个缓冲区大小.所以一般容量越大,页的大小也会设计的越大.
容量大小表
型号 容量 (bit) 字节容量 页大小 (字节) AT24C01 1Kbit 128 字节 8 字节 AT24C02 2Kbit 256 字节 8 字节 AT24C04 4Kbit 512 字节 16 字节 AT24C08 8Kbit 1024 字节 16 字节 AT24C16 16Kbit 2048 字节=2KB 16 字节 AT24C32 32Kbit 4096 字节=4KB 32 字节 AT24C64 64Kbit 8192 字节=8KB 32 字节 AT24C128 128Kbit 16384 字节=16KB 64 字节 AT24C256 256Kbit 32768 字节=32KB 64 字节 AT24C512 512Kbit 65536 字节=64KB 128 字节 AT24CM01 1Mbit 131072 字节=128KB 256 字节 AT24CM02 2Mbit 262144 字节=256KB 256 字节 注意:
- 页写入时,如果一次写入的数据超过页边界(例如从某一页的中间开始写,写到下一页),地址会从当前页的起始地址回绕,造成覆盖,所以必须控制单次写入长度 ≤ 页大小,并且起始地址对齐到页边界比较安全。
- 不同厂家的 24C 系列兼容芯片(如 ST 的 M24Cxx)页大小可能相同,但具体请以对应 datasheet 为准。
容量的大小计算公式为:容量大小 = 2^n * 8,其中 n 为芯片型号中的数字。例如,AT24C02的容量为2Kbit,即2^11 * 8 = 2048位= 2048/8 =256字节。
6. 芯片的相关函数
芯片的读写操作都比较简单,操作起来也没有多少要注意的地方. 主要完成以下函数即可:
c
/* 函数声明 */
uint8_t AT24C02_Init(void);
uint8_t AT24C02_ReadByte(uint16_t addr);
uint8_t AT24C02_WriteByte(uint16_t addr, uint8_t data);
uint8_t AT24C02_ReadBytes(uint16_t addr, uint8_t *data, uint16_t len);
uint8_t AT24C02_WriteBytes(uint16_t addr, uint8_t *data, uint16_t len);
uint8_t AT24C02_IsConnected(void);7. 芯片的读写
芯片的读取操作,只需要调用AT24C02_ReadByte()函数和AT24C02_WriteByte()函数即可. 参数为地址和数据.也可以同时读取多个字节,参数为起始地址和数据指针,数据长度.
对于AT24C02,其地址范围是0x0000-0x00FF. 因为AT24C02的容量为256字节,也就是0x0000-0x00FF.
