简介
- 不管你是从哪里听说的这个概念,我都要先告诉你,咱们15年前家里的大彩电,就是由这样的一个协议来完成控制的。当你按下遥控器的瞬间,那颗彩电的主控芯片从遥控器的红外信号得到指令,朝着村口大喇叭喊了一嗓子,你们谁是张三,村长让你这会儿去一趟村委会给你安排个活儿。后来我们知道这个大喇叭即是总线,村长安排什么活,对应你遥控器的指令,很多你自己按不出来的效果,比如出现在彩电上的大骨头图案。如此我们应该对该协议有了一个非常直观的第一印象了。那么接下来看专业说明。
这张图告诉你有一个主机一个从机,简单来讲,SDA为serial data端口,你知道它传数据,SCL为serial clk是串行时钟口。他们按照以下格式进行传输:
注意它和SPI一样都是逐bit传输的。那么解决传输的内容后,我们需要确定传输的步骤,毕竟协议就是干这个事儿的。注意到START_BIT为下降沿,STOP_BIT为上升沿检测。
第一步,村长(主机)拿出大喇叭(传到总线)告诉大家听我说,也就对应这个START_BIT,此时所有村民(从机)来活了。
第二步,村长(主机)说张三(往总线扔地址)你过来一趟村委会找你有事(读或者写)。
第三步,听到名字的村民吱一声(ACK位确认,给0)。没听到的不吱声(ACK给1)。
第四步,干活去吧(村民帮村长干活或者村长帮村民做事)分别对应谁是接收者,谁读谁写。
第五步,做完了感谢一下对方,给点礼物回馈一下(确认位确认接收完毕了)。
第六步,搞定,发送STOP_BIT,村长大喇叭宣布此次行动张三表现的不错或者他帮助张三帮的不错。任务完成。
优缺点说明
- 优点:第一,可以多设备主从互动,也就是可以一个人叫一个人帮忙,也可以一群人叫一个人,也可以一群叫一群,都可以。第二, 只要两根线即可以完成各种数据传输。第三,有确认位,也就是说每次数据传对传错都是知道的。第四,硬件依赖度比通用串口UART简单。也因此在工业界广泛使用。
- 缺点,第一,每次只能传八位最多,第二,速度慢,工业使用足够不过。第三,硬件依赖高于SPI,且协议比SPI复杂点。
简单总结
- I²C是很广泛使用的工业控制协议,是作为我们专业必须完全掌握的三大基础协议之一,更不用说当前更加流行速度更加夸张的一系列Serdes接口协议。必须打好基础,基础扎实才能游刃有余。
- 第一部分先简单介绍到这里,争取这周之前把协议详解和代码实现的笔记写出来。
参考资料
https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/