概念
I2C 总线,为两线式串行总线。
CPU与外设之间的数据通信采用两根信号线分别是:
SDA数据线以及SCL时钟控制信号线。
SDA:用于CPU与外设的数据传输。
SCL:用于同步双方的数据。
CPU在SCL为低电平时,将数据放在数据线上,那么设备在同周期的高电平,从数据线上获取数据。
串行:CPU和外设之间的数据通信是一个时钟周期传输一位。
总线:在SCL和SDA两根信号线上可以挂接多个外设。
示意图,如下:
上拉电阻:两个信号线,各界上一个上拉电阻,两根线默认都是高电平。
问题
1. CPU是如何找到总线上某个具体的外设的呢?(设备地址)
2. CPU一旦找到某个具体的外设,如果通过两根线进行访问的呢?
3. SDA与SCL既然同时存在,是如何配合使用的呢?
总线控制权
SDA 可以由通信间双方进行控制。
SCL只能由CPU进行控制。
对于SDA,配置输入的一方,释放控制权;配置输出的一方,获取控制权。另,不能同时配置输出,但是可以同时配置输入,此时由上拉电阻控制。
I2C 总线协议
START 信号
又称起始信号,CPU访问总线上的某个外设,CPU先向总线上发送START信号。
至少需要两个周期:
第一个周期内:SDA 与 SCL 同为高电平。
第二个周期内:SCL 维持高电平,而SDA由高电平到低电平发生跳变。
即
SCL 保持高电平
SDA 由高电平到低电平发生跳变
STOP 信号
结束信号。CPU要结束对设备的访问,CPU发送STOP信号。
SCL 保持高电平,而SDA 由低电平到高电平跳变,表示结束信号。
设备地址与读写位
同一个总线上的各个外设,都有一个唯一的设