介绍
简述:IIC总线就是一个两根线的规则(半双工),规定通信双方如何传送数据,至于传送数据,无非就是主机给从机发送数据,或者从机给主机发送数据,其中加了一点发过去的数据有没有回应,也就是应答!或者不应答。还有一点IIC是一个多机通信的协议。话不多说,上才艺!跟着开心哥的小火车发车了!
作者:王开心
时间:2024.22.12
两根线:SCL时钟线,控制数据传送节拍的。SDA数据线,传送数据的线
(一)IIC时序
第一步
如上图书所示!起始信号也就是通信开始条件,IIC规定在SCL时钟为高电平的时候,且SDA由高到低的变化。即为通信开始!终止条件,也就是通信的结束条件,IIC同样规定SCL也是高电平期间,且SDA由低到高的变化。即为通信的结束!
第二步
发送一个字节,顾名思义就是发送8位二进制,利用一个循环将8个二进制给发送出去。一般我们编程都是以主控为编程期间,”显而易见“,发送一个字节,也就是说我们给主机编程让他发送一个字节数据,如何配置,IIC规定在SCL=0的期间,我们可以将想要发送的数据放到SDA这个数据线上(一次放一位二进制),等待发射信号也就是起发信号,IIC规定当SCL=1时,数据就可以通过SDA发送出去了(先发高位),发送期间不允许有数据变化!
第三步
接收一个字节,也很简单,对于主机而言的,接收一个字节,也就是从机发数据给主机,看图自己理解,比较简单!(也是从高位开始接收的)简单说一下,scl=0,允许SDA变化(也就是从机把数据放到SDA上),scl=1,从机把数据发送出去,主机接收!
注意:主机在接受数据前一定要释放SDA,不要一直抓着不放!会受不了的,用完就放开她,从机也要用的!
第四步
显而易见!应答,也就我数据发送出去有没有回应!形成闭环控制,一句话有始有终!也就是说,主机发送出去的数据,从机最起码要给出应答(我们采用第九位二进制表示)(可以参考数据帧,一帧数据,既包括地址,开始信号,数据位,停止位,奇偶校验位等等!)
(二)三种IIC数据帧格式
第一种
从机地址+读还是写(读:输入,从机发给主机。写:输出,主机发送给从机)
7位地址位加一个读写位。一般为7位,有更多的,,通过上图可知可以发送N个字节数据
RA=0,receive ack :表示接收应答信号,向谁发送数据,也就是从机地址(要发的给对象)
第二种
注意:此时,R: 读操作,即从机向主机发送数据,也就是我们主机对SDA的控制权交给从机了,(写程序的时候一定要注意,主机发送完数据,一定要释放SDA数据线)
向谁收数据:从机地址
举个简单例子,如下图通信对话
: 小明你来回答这个问题,:小明说收到,,小明开始回答问题,,回答完毕,提问结束,
第三种(稍微有一点小难度)
W:写->主机发送送数据给从机,也就是主机对从机输入数据
R:读 ->主机接收从机的数据,也就是从机给主机发送数据,
举个简单例子:W:主机对从机说,你欠我的500元啥时候还我,R:从机回答说,没钱,不还。
AT24C02 的IIC通信(支持IIC通信的芯片采用IIC的符合格式,也就是第三种)
在程序设计的我们都会设计一个函数,如开始信号,写操作,读操作,介绍应答等,如发送一个字节需要一个参数,也就是传入从机地址(下一节实战AT24C02存储芯片-EEPROM实验)