自学内容网 自学内容网

STM32F1学习——I2C通信

一、I2C通信一带多

        在学习通信的时候,我们常会听到串口通信。但串口通信只限定两个设备之间,如果有多个设备,通信的两个设备就要连接上,接线复杂。所以有了总线式通信,在一条总线上可以连接多个设备,这些根据地址的不同,接收总线上不同的消息。

二、硬件电路设计

        在I2C总线上,SCL和SDA必须都配置成开漏模式,此模式下相当于GPIO可以通过MOS管下拉到地,另一个模式是浮空模式(下图右侧),但I2C外部通常会接上两个4.7kΩ的上拉电阻,可以弱上拉到高电平。此设计的好处不仅实现了防止当时序错乱时的电源短路现象,同时实现了线与功能。

        在一主多从模式中,主机拥有对SCL绝对的控制权,同时主机主机控制SDA,从机只有在得到主机允许的情况下才能使用SDA数据总线。

三、时序基本单元

1、起始和终止条件

        起始条件:在SCL处于高电平时,主机将SDA拉低的时候,从机检测到数据线SDA下拉做好了接收信号的准备,等待SCL的上升沿。

        终止条件:在SCL处于高电平时,主机将SDA拉高的时候,从机检测到数据线SDA的上升沿,并识别出这就是终止信号。

2、主机发送一个字节Byte = 8 * bit

        传输数据过程中,在SCL高电平期间不允许SDA有数据变换,不然就会误检测为起始或终止条件。

        在传输数据时,SCL先处于低电平,此时可以修改SDA的值,主机将数据位依次放到SDA线上(高位先行),然后释放SCL则SCL被拉高,产生上升沿,此时从机获取上升沿并读取SDA上的数据,

3、接收一个字节Byte = 8 * bit

        与发送一样,只不过这里变成了从机来发送数据。值得注意的两点是:

① 主机在接收数据的时候要放手SDA,即让SDA弱上拉至高,正常来说SDA只在自己发数据的时候才主动拉低。

② 此时仍然是主机有SCL的控制权,从机不能使用SCL。也就是说从机需要再SCL的下降沿将来时将SDA的数据准备好,以便主机可以在SCL高电平的时候读取到。

4、应答机制

        在主机发送完一个字节(8bit)后,主机要确定从机收到没有,就会采用接收应答下图右侧,发送完一个字节后,主机会主动释放SDA,从机如果有人收到了就拉住SDA导致他不会变为高电平,表示从机收到了。

        在主机处于接收完一个字节(8bit)消息的时,会将SDA拉低,表示从机可以继续发送,如果主机没有拉低,则从机会将SDA控制权还给主机,当传输多个数据时,我们要将最后一个字节的应答位设置为高,不然从机不会将SDA的控制权交还给主机。

 四、I2C写入读取的全部时序

参考

[10-1] I2C通信协议_哔哩哔哩_bilibili

4分钟看懂!I2C通讯协议 最简单的总线通讯!_哔哩哔哩_bilibili


原文地址:https://blog.csdn.net/qq_55958175/article/details/143430479

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!