[百问网 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)两个状态寄存器上,根据它们可以知道当前总线是否被占用,本机是主设备还是从设备,数据是否发送完毕等。

 

 

posted @ 2022-08-07 22:03  未央恋枫  阅读(142)  评论(0)    收藏  举报