通信协议之IIC 最详细解读!!

I2C(Inter-Integrated Circuit,集成电路总线)

任意两个设备之间都可以进行通信,但同一时刻只能有两个设备之间通信,且数据只能单向传输(半双工)

I2C规定将发起通信的设备称为主设备,主设备发起一次通信后,其它设备均为从设备。主设备需要向从设备产生并发送时钟信号。

数据格式

传输流程

写操作流程:

  • 主芯片要发出一个start信号

  • 然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读)

  • 从设备回应(用来确定这个设备是否存在),然后就可以传输数据

  • 主设备发送一个字节数据给从设备,并等待回应

  • 每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。

  • 数据发送完之后,主芯片就会发送一个停止信号。

  • 上图:白色背景表示"主→从",灰色背景表示"从→主"

通讯的起始和停止信号

  • 当 SCL 线是高电平时 SDA 线从高电平向低电平切换,这个情况表示通讯的起始。

  • 当 SCL 是高电平时 SDA 线由低电平向高电平切换,表示通讯的停止。

响应

i2c的数据字节定义为8-bits长度,对每次传送的总字节数量没有限制,但对每一次传输必须伴有一个应答(ACK)信号, 其时钟由主设备提供,而真正的应答信号由从设备发出,在时钟为高时,通过拉低并保持SDA的值来实现。如果从设备忙, 它可以使 SCL保持在低电平,这会强制使主设备进入等待状态。当从设备空闲后,并且释放时钟线,原来的数据传输才会继续。

数据有效性

I2C使用SDA信号线来传输数据,使用SCL信号线进行数据同步,如下图。 SDA数据线在SCL的每个时钟周期传输一位数据。(scl=1时,sda的数据有效;scl=0,sda数据改变)

  • 传输时,SCL为高电平的时候SDA表示的数据有效,即此时的SDA为高电平时表示数据“1”,为低电平时表示数据“0”。

  • 当SCL为低电平时,SDA的数据无效,一般在这个时候SDA进行电平切换,为下一次表示数据做好准备。

如何在SDA上实现双向传输?

主芯片通过一根SDA线既可以把数据发给从设备,也可以从SDA上读取数据,连接SDA线的引脚里面必然有两个引脚(发送引脚/接受引脚)。

  • 主、从设备都可以通过SDA发送数据,肯定不能同时发送数据,怎么错开时间?
    在9个时钟里,
    前8个时钟由主设备发送数据的话,第9个时钟就由从设备发送数据;
    前8个时钟由从设备发送数据的话,第9个时钟就由主设备发送数据。

  • 双方设备中,某个设备发送数据时,另一方怎样才能不影响SDA上的数据?

硬件原理

电容在上电瞬间相当于短路,此时三极管导通,SDA电平由高到低

因电容两端的电压不能突变,电容再通电的之间,两端的电压为0,当接通的瞬间,它的电压不能突变,还是0V,而此时电源的电流就等于电源的空载电压除以电源的内阻了,相当于电源被短路了.当过一段时间后,电容两端的电压慢慢升高,最后与电源电压一样高,这时电容不再充电,也不存在充电电流了,相当于开路一样

举例:

主设备发送(8bit)给从设备

  • 前8个clk

  • 从设备不要影响SDA,从设备不驱动三极管

  • 主设备决定数据,主设备要发送1时不驱动三极管,要发送0时驱动三极管

  • 第9个clk,由从设备决定数据

  • 主设备不驱动三极管

  • 从设备决定数据,要发出回应信号的话,就驱动三极管让SDA变为0

  • 从这里也可以知道ACK信号是低电平

为何SCL也要使用上拉电阻?

在第9个时钟之后,如果有某一方需要更多的时间来处理数据,它可以一直驱动三极管把SCL拉低。

当SCL为低电平时候,大家都不应该使用IIC总线,只有当SCL从低电平变为高电平的时候,IIC总线才能被使用。

当它就绪后,就可以不再驱动三极管,这是上拉电阻把SCL变为高电平,其他设备就可以继续使用I2C总线了。

优缺点

I2C的优点:

  1. 只需要两根信号线就可以完成传输。

  1. 支持多个主机和从机。

  1. 硬件结构比UART更简单。

  1. 相比于UART,没有严格的波特率要求,但主设备需要生成总线时钟。

I2C的缺点:

  1. I2C的传输速率比不上SPI,是为了与低速设备通信而发明的。

  1. 数据帧大小限制为8位。

  1. 只能进行半双工通信。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值