跳至主要內容

03.I2C

约 461 字大约 2 分钟

参考文档open in new window

I2C总线

双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
支持100Kbit/s和400Kbit/s的速率,7位、10位设备地址,

SDA(串行数据线)
SCL(串行时钟线)

img_9.png

通常vcc = 3.3v 时
接的上拉电阻通常为4.7k

协议层

主机写数据到从机

img_10.png

机由从机中读数据

img_11.png

S : 传输开始信号
SLAVE_ADDRESS: 从机地址
R/W- : 传输方向选择位,1为读,0为写
A/A- : 应答(ACK)或非应答(NACK)信号
P : 停止传输信号

起始信号 、停止信号

当 SCL 线是高电平时 SDA 线从高电平向低电平切换,这个情况表示通讯的起始
当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示通讯的停止

img_12.png

数据有效性

SCL为高电平的时候SDA表示的数据有效,
即此时的SDA为高电平时表示数据“1”,为低电平时表示数据“0”。
当SCL为低电平时,SDA的数据无效

img_13.png

响应、仲裁、时钟同步和地址广播

响应包括“应答(ACK)”和“非应答(NACK)”两种信号。
作为数据接收端时, 当设备(无论主从机)接收到I2C传输的一个字节数据或地址后,
若希望对方继续发送数据, 则需要向对方发送“应答(ACK)”信号,
发送方会继续发送下一个数据;若接收端希望结束数据传输, 则向对方发送“非应答(NACK)”信号,
发送方接收到该信号后会产生一个停止信号,结束信号传输

img_14.png