本篇文章部分图片来自于铁头山羊
I2C是一种总线结构,可以进行多设备连接,可以让单片机跟大量设备连接,单片机一般作为主机,其他设备作为从机,I2C由两条线组成:SCL(串行时钟线,传输时钟信号)和SDA(串行数据线,传输数据)。I2C总线还需要两颗上拉电阻,分别接在SCL和SDA上。SCL和SDA引脚都应该使用开漏输出,开漏输出有两种情况分别为低电压和高阻抗。为什么要设置为开漏输出呢?这是为了实现逻辑线与。当输入为1时都是高阻抗,因为上拉电阻的存在总线呈现高电压为1,如果向某一个引脚写0,总线呈现低电压为0,其他引脚呈现高阻抗,这时上拉电阻已经不管作用了。如下图
I2C传输过程
I2C通信分为4个阶段,分别为起始位,寻址,数据传输,停止位。
起始位:
在SCL为高电压时,向SDA发送下降沿。
寻址:
主机向总线发送从机地址,从机地址分为10位和7位地址,一般为7位地址,而I2C一次性传输8位,最后一位就为读写位(0写1读),所以寻址发送的数据可以理解为:寻址数据=7位地址+1位读写位,并且I2C传输数据是当SCL为高电压时SDA上没有发生高低电平变换的数据。发送完地址后,主机释放SDA线等待从机应答,从机通过把SDA拉低来发送一个应答信号(ACK)。
数据传输:
I2C以字节为单位传输数据,每次可以传输多个字节。如果是写数据,那么主机向从机发送八个比特也就是一字节数据后释放SDA线等待从机ACK信号,然后主机再发送第二个字节,以此类推。
停止位:
在SCL为高电压时,向SDA发送上升沿。
I2C通信的几种模式
注:快速模式下可以设置时钟信号的占空比,分为两种情况,一个是低电压/高电压=2/1,和16/9,一般我们选择2/1。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/2302_77864418/article/details/147193085
|