I2C
I2C(Inter-Integrated Circuit)协议是由Philips公司于1980年代提出的一种 同步、半双工、多主从结构 的串行通信协议,广泛应用于嵌入式系统中的芯片间通信。其核心特点在于仅使用 两条信号线 : SDA(数据线) 与 SCL(时钟线) ,即可实现多个设备之间的可靠数据传输。
传输数据
总线时序
i2c 通信以起始信号(START)开始,以终止信号(STOP)结束,起始信号和终止信号均为主机发出
起始信号:
- 当 SCL 为高电平时,SDA 从高电平变为低电平时为起始信号
终止信号:
- 当 SCL 为高电平时,SDA 从低电平变成高电平时为终止信号

写操作
起始信号后的首字节前 7 位为从设备地址,最后 1 位是读写方向位, 0 表示写操作,1 表示读操作。7 位字段有 128 个编码,其中 0x00~0x07 和 0x78~0x7F 为保留地址,通常可用的普通设备地址为 0x08~0x77,共 112 个;实际设备数量还受电气负载等限制。主机发送首字节(7 位地址+1 位读写位)后,若总线上存在地址匹配的从机,该从机将在第 9 个时钟周期拉低 SDA 线,即返回应答信号(ACK)表示成功匹配地址;若地址无匹配,第 9 个时钟周期 SDA 线保持高电平,即产生非应答信号(NACK)
主机向从机(0x55)写地址,主机首字节需发送 0xAA(0x55 左移 1 位+最低位 0 表示写操作)

驱动
启用 i2c-dev 后,用户程序可通过适配器设备节点 /dev/i2c-X 访问 I2C 总线;还需选择目标从设备地址。
参考:NXP I2C 规范。