UART 转 I2C 应用
1.1 AT24CxxEEPROM 芯片
1.1.1 芯片介绍
AT24Cxx 是可擦写 EEPROM 存储芯片,xx 表示容量,单位为 Kbits。USB2S 板上已有 1 片 AT24Cxx
(默认为 AT24C02),设备地址为 0xA0。
通过 AT24Cxx 的数据手册可知,读写时序如下: 写时序:
(1) 向 IIC 总线发送开始信号
(2) 向 IIC 总线发送芯片写地址(0xA0)
(3) 向 IIC 总线发送要操作的 EEPROM 地址
(4) 向 IIC 总线连续发送多个要写入的字节数据
(5) 向 IIC 总线发送停止信号,结束本次通讯读时序:
(1) 向 IIC 总线发送开始信号
(2) 向 IIC 总线发送芯片写地址(0xA0)
(3) 向 IIC 总线发送要操作的 EEPROM 地址
(4) 向 IIC 总线发送开始信号
(5) 向 IIC 总线发送芯片读地址(0xA1)
(6) 从 IIC 总线连续读取芯片输出的数据
(7) 向 IIC 总线发送停止信号,结束本次通讯
1.1.2 向 AT24C02 写入数据
向 AT24C02 的地址 0~3 写入 4 个字节(30 31 32 33)
向 UART1 发送字符串:IIC[WT6H]A0 00 30 31 32 33[STOP]
[IIC] 数据帧的目标是 IIC 接口
[START] 从目标接口输出开始信号
[WT6H] 从目标接口输出 6 个字节,后续数据类型为 16 进制。
A0 00 2 字节数据,AT24C02 芯片地址+要操作的EEPROM 地址
00 01 02 03 向 AT24C02 写入的 4 个字节数据[STOP] 从目标接口输出停止信号,结束本次通讯
1.1.3 从 AT24C02 读取数据
从 AT24C02 读取 4 个字节数据,数据起始地址为 0。
向 UART1 发送字符串:IIC[WT2H]A0 00STARTA1RD4N
从 UART1 返回 4 个字节(16 进制):30 31 32 33 [IIC] 数据帧的目标是 IIC 接口
[START] 从目标接口输出开始信号
[WT2H] 从目标接口输出 2 个字节,后续数据类型为 16 进制。
A0 00 2 字节数据,AT24C02 芯片地址+要操作的EEPROM 地址
[START] 从目标接口输出开始信号
[WT1H] 从目标接口输出 1 个字节,后续数据类型为 16 进制。
A1 AT24C02 芯片的读地址
[RD4N] 从目标接口连续读取 4 个字节数据 [STOP] 从目标接口输出停止信号,结束本次通讯
1.1.4 跨页写入数据
AT24C02 每页为 8 字节,EEPROM 地址 0~7 为第 1 页、8~15 为第 2 页,以此类推。当向芯片连续写入数据时,在写完每页最后 1 个字节后必须向其发送停止信号,以使芯片对当前页进行存储,继续写入后续数据时需要重新开始写入时序。
芯片存储数据需要一定时间,向其发起新的通讯前应有适当延时。也可以直接向其继续写入若返回了[ERRxxx]表示芯片正忙,重新发送直到无错误返回。
例如:从 EEPROM 地址 0 开始写入 10 个字节数据,则应先写入 0~7,延时,再写入 8~9。
IIC[WT10H]A0 00 00 01 02 03 04 05 06 07STOPIIC[WT4H]A0 08 08 09[STOP]
例如:直接向芯片写入字符串数据
IIC[WT2H]A0 00[WT8S]87654321STOPIIC[WT4H]A0 08 38 39[STOP]