[百问网 7Day物联网智能家居实战训练]模块 I²C
I²C概述:
多主从架构串行通信总线
用于MPU/MCU与低速外部设备连接通信、数据传输。
组成:I²C由两条线
|
SDA |
双向串行数据线 |
|
SCL |
串行时钟线 |
独立的地址:
每个连接到总线的设备都有一个独立的地址。主机可以通过该地址来访问不同设备。
两种I²C实现方式:
|
模拟I²C |
用GPIO来模拟I²C时序 |
方便移植 |
|
硬件I²C |
使用MCU的I²C控制器,设置好I²C控制器, 就自动实现协议时序 |
工作效率相对较高 |
数据有效性

SCL为高电平时表示有效数据,SDA为高电平表示“1”,低电平表示“0”;SCL为低电平时表示无效数据,此时SDA会进行电平切换,为下次数据表示做准备。
开始信号 和 结束信号
|
起始信号(S) |
SCL高电平时 |
SDA由高电平向低电平转换 |
|
停止信号(P) |
SCL高电平时 |
SDA由低电平向高电平转换 |

应答信号
传输的8位数据后:从机反馈一个应答位【确认从机是否正常接收数据】;
主机发送了8位数据后:产生一个时钟,主机放开SDA的控制,读取SDA电平,必须从机拉低[在上拉电阻的影响下,此时SDA默认为高],以确认收到数据。

完整传输 流程
① SDA和SCL开始都为高,然后主机将SDA拉低,表示开始信号;
② 在接下来的8个时间周期里,主机控制SDA的高低,发送从机地址。其中第8位如果为0,表示接下来
是写操作,即主机传输数据给从机;如果为1,表示接下来是读操作,即从机传输数据给主机;另外,数据传输是从最高位到最低位,因此传输方式为MSB(Most Significant Bit)。
③ 总线中对应从机地址的设备,发出应答信号;
④ 在接下来的8个时间周期里,如果是写操作,则主机控制SDA的高低;如果是读操作,则从机控制
SDA的高低;
⑤ 每次传输完成,接收数据的设备,都发出应答信号;
⑥ 最后,在SCL为高时,主机由低拉高SDA,表示停止信号,整个传输结束;

I²C控制器:
I²C控制器,可作为通信主机或从机。
四种工作模式:主机发送模式、主机接收模式、从机发送模式、从机接收模式。
传输速度:
标准模式(Standard mode,最高速度100kHz)
快速模式(Fast mode,最高速度400kHz)。
总线支持:
SMBus2.0(System Management Bus,系统管理总线)
PMBus (Power Management Bus,电源管理总线)。
组成:
|
引脚 |
要两个引脚(SDA和SCL) |
SMBA引脚仅用于SMBus模式的Alert引脚,通常不用考虑 |
|
数据收发 |
数据寄存器(DR) 数据移位寄存器(DSR) |
发送数据:发送的字节写入DR寄存器,硬件会把DR中的字节搬到DSR中,然后在时钟信号的配合下,把DSR最高位的数据放到数据线SDA上,并对DSR进行移位操作。 接收数据:数据控制器(Data Control)根据时钟信号,把SDA线上的高低电平转换为“1”或“0”的数据,写到DSR的最低位,同时DSR移位操作,当接收完一个字节的8位数据后,把DSR中的数据搬到DR寄存器中。 |
|
时钟信号 |
|
时钟控制器(Clock Control)用于驱动同步时钟信号线SCL。通过配置时钟控制寄存器(ClockControl Register,CCR),可以调整SCL的频率。 |
|
控制逻辑 |
控制寄存器 (Control Register 1,CR1) (Control Register 2,CR2) |
两个用于控制逻辑。通过它们可以触发起始和停止信号,做出ACK响应; 配置外设时钟频率,开启DMA和中断的功能。同时控制逻辑的状态会反馈到(Status Register 1,SR1)和(Status Register 2,SR2)两个状态寄存器上,根据它们可以知道当前总线是否被占用,本机是主设备还是从设备,数据是否发送完毕等。 |


浙公网安备 33010602011771号