这是本文档旧的修订版!


I2C硬件:

I2C地址:

一般I2C地址高位由厂商控制(固定部分),低位可以由用户引脚来配置(可编程部分)。
在AT24C02中,I2C地址的前四位已经固定为1010,而后三位则由A0、A1、A2三个引脚的状态决定,同时还有一位是读/写(R/W)操作位。

当AT24C02的A0、A1、A2都接低电平时,即A0=0、A1=0、A2=0,那么结合固定的前四位1010,可以得到AT24C02的I2C地址如下:

写操作时的地址:由于R/W位为0表示写操作,所以此时的I2C地址为10100000,即0xA0。
读操作时的地址:由于R/W位为1表示读操作,所以此时的I2C地址为10100001,即0xA1。
因此,把AT24C02的A0、A1、A2都接低电平时,它的I2C写地址为0xA0,读地址为0xA1。

I2C软件(时序基本单元):
【写在前面】为了学习和基本单元的拼接方便,现规定除了起始和终止条件,所有基本单元的SCL都以低电平开始。实线代表主机控制,虚线代表从机控制。
起始:SCL为高时SDA下降沿。
终止:SCL为高时SDA上升沿。
发送一字节:全程由主机掌握总线,在SCL低电平时,主机把数据放到SDA上,然后拉高SCL,从机在SCL上升沿读取SDA数据,SCL高电平持续一段时间,然后拉低。重复8次发送一个字节。
发送一字节:全程由从机掌握总线,在SCL低电平时,从机把数据放到SDA上,然后拉高SCL,主机在SCL上升沿读取SDA数据,SCL高电平持续一段时间,然后拉低。重复8次发送一个字节。
发送应答:与发送一字节的一位的结构相同(发送一位)。主机收到数据后,发送应答。
接收应答:与发送一字节的一位的结构相同(发送一位)。紧跟主机发送数据后,接收应答,判断从机是否应答。
0为应答,1为非应答。

拼接6块基本数据单元拼图,组成一帧完整数据帧:
I2C协议规定,发送的第一字节为硬件地址,而后由芯片厂商自定,一般是寄存器地址或操作指令。