【002】谈谈iic
回顾自己以往嵌入式开发中用到的外设,IIC(Inter-Integrated Circuit)最为常用(INA219、MPU6050),梳理一下相关内容
简介
在使用IIC之前,我只了解UART这种通信模式。因为当时项目需要,购买很多传感器外设,其中包括IIC接口设备,方才对IIC接口有了概念。
UART vs IIC?
为什么都是两根线,用起来差距咋就这么大呢?
众所周知,UART->异步、全双工、IIC->同步、半双工,两者底层即存在着很大区别。
传输速率来看,UART速率波特率一般为9600、115200bps,在实际应用中受软硬件限制,往往还达不到;IIC最高速率理论可以达到5Mbit/s,在实际应用中往往使用Sm\Fm这两种模式。
从可靠性来看,UART使用起始位、结束位标志定义数据;IIC使用同一时钟进行流控。
从多机来看,UART不支持多机通信;IIC支持多机通信,7位寻址模式下最多可支持128个从设备连接到同一跟B总线上。
从应用场景来看,二者均适用于短距离,低速外设通信。
✒️注:IIC多机通信环境比较复杂,受从设备与地之间寄生电容的影响,需要匹配上拉电阻防止信号失真。
电路
IIC设备IO为开漏输出,这样的设计非常巧妙,有兴趣的可以看工科男孙老师相关系列视频。
✒️SCL时序由主机提供,SDA数据线双向传输。
协议
📌空闲:SCL/SDA均为高电平。
📌开始:SCL高电平,SDA电平下降沿拉低。
📌结束:SCL高电平、SDA电平上升沿拉高。
📌应答:主机传输有效数据结束后,利用下一个脉冲采集SDA有无应答。
📌数据:SCL上升沿采集SDA数据,在SCL低电平时允许SDA数据发生变化且要一直保持到SCL再次变为低电平。
应用
关于INV公司MPU6050 DMP驱动移植到ESP系列上的代码我已经放到GitHub上,非常希望能得到您的宝贵建议。
📌有条件还是上逻辑分析仪吧!