1,I2C是什么东西呢?
I2C是一种支持多从机和多主机,用于电子设备数据交换的串行通信协议。
● 双线制:I2C使用两根信号线进行通信—— 时钟线(SCL) + 数据线(SDA)
● 多从机:多个从机设备可以连到同一条I2C总线上,每个从机都有唯一地址。(MAC地址嘛?)
● 多主机: 多个主机设备可以通过I2C总线进行通信,通过仲裁机制实现多主机冲突的解决
●简单灵活的连接:I2C协议使用统一的总线结构,可以方便地连接各种设备,减少硬件复杂性
仲裁机制:
为什么要有仲裁?
在通信系统中,总线上有多个节点,他们都有自己的寻址地址,既可以作为从节点被别的节点访问,同时又可以作为主节点向其他节点传输数据或者发送控制字段。但是如果有两个或者两个以上的节点都向总线上发送启动信号并开始传送数据,这个时候呢就会产生冲突。所以为了解决这种冲突,就要进行仲裁~
如何进行仲裁呢?
I2C总线上的仲裁分两部分:SCL线的同步 SDA线的仲裁
①SCL线的同步(时钟同步)
SCL同步是由于总线具有“与”的逻辑功能。什么意思呢? 只要有一个节点发送低电平,总线上就表现为低电平,只有所有节点都发高电平,总线才会表现为高电平。如下图所示:
②SDA的仲裁
SDA线的仲裁规则很简单,由①可知总线有与的功能。那节点发送1位数据,比较总线发的数据跟自己是否一致,一致的话就继续发,不一致就退出竞争。 (说白了,谁前面发的低位多,最后所有权就归谁~) 总线系统通过仲裁规则只允许一个主节点占用总线~
show show pictrue
2,I2C的基本原理
总线结构
I2C总线由两根信号线组成:
●时钟线(SCL):由主机设备控制,用于同步数据传输的时钟信号
●数据线(SDA):用于在主机和从机之间传输数据
时钟信号和数据信号
I2C通信是基于时钟信号和数据信号的同步传输。数据的传输和接收都在时钟信号的边沿进行。
在数据传输过程中,主机设备产生时钟脉冲,时钟信号决定了数据传输的速率。数据线上的数据信号(SDA)在时钟信号的上升沿和下降沿进行传输。
主机和从机角色
在I2C通信中,由两种重要角色:
● 主机(master):负责控制总线和启动通信的设备
● 从机(slave) : 相应主机的命令和传输数据的设备
主机设备是总线的控制者,发起通信并控制时钟信号。
从机设备接收主机的命令,在合适的时机发送数据给主机。
3,I2C通信过程
I2C通信包括 起始条件、地址传输、数据传输、停止条件等步骤。
起始条件和停止条件:
通信开始前,主机发送一个起始条件信号。起始条件:SCL线为高电平,SDA线由高电平切换到低电平。 此时通信就开始了~
通信结束后,主机发送一个停止条件信号。停止条件:SCL线为高电平,SDA线由低电平切换为高电平。此时通信就结束啦~