IIC通信协议

概述:

I²C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980年代初设计的,方便了主板、嵌入式系统或手机与周边设备组件之间的通讯。由于其简单性,它被广泛用于微控制器与传感器阵列,显示器,IoT设备,EEPROM等之间的通信。


主要特点:

只有SDA和SCL两条线

没有严格的波特率要求

遵循简单的主从关系,连接到总线的每个设备均可通过唯一地址进行软件寻址

可以多主设备,主机没有数量限制,从机理论上127个

传输速度:

  • 标准模式:Standard Mode = 100 Kbps
  • 快速模式:Fast Mode = 400 Kbps
  • 高速模式: High speed mode = 3.4 Mbps
  • 超快速模式: Ultra fast mode = 5 Mbps

空闲状态:

因为IIC的 SCL 和SDA 都需要接上拉电阻,保证空闲状态的稳定性,所以IIC总线在空闲状态下SCL 和SDA都保持高电平

数据有效性:

IIC信号在数据传输过程中,当SCL=1高电平时,数据线SDA必须保持稳定状态,不允许有电平跳变,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。

SCL=1时 数据线SDA的任何电平变换会看做是总线的起始信号或者停止信号。

 

开始条件:

先将SDA拉低,再将SCL拉低(SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据)

 

地址位:

通常地址位占7/10位数据,主设备如果需要向从机发送/接收数据,首先要发送对应从机的地址,然后会匹配总线上挂载的从机的地址;每一个IIC器件都有一个器件地址,有的器件地址在出厂时地址就设定好了,用户不可以更改,比如OV7670的地址为0x42。有的器件例如EEPROM,前四个地址已经确定为1010,后三个地址是由硬件链接确定的,所以一IIC总线最多能连8个EEPROM芯片。

读写位:

如果主设备需要将数据发送到从设备,则该位设置为 0,写

如果主设备需要往从设备接收数据,则将其设置为 1 ,读

写:

1.主机首先产生START信号
2.然后紧跟着发送一个从机地址,这个地址共有7位,紧接着的第8位是数据方 向位(R/W),0表示主机发送数据(写),1表示主机接收数据(读)
3.主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,若相同,则认为自己正在被主机寻址,根据R/T位将自己确定为发送器和接收器
4.这时候主机等待从机的应答信号(A)
5.当主机收到应答信号时,发送要访问从机的那个地址, 继续等待从机的应答信号
6.当主机收到应答信号时,发送N个字节的数据,继续等待从机的N次应答信号,
7.主机产生停止信号,结束传送过程。

读:

1.主机首先产生START信号
2.然后紧跟着发送一个从机地址,注意此时该地址的第8位为0,表明是向从机写命令,
3.这时候主机等待从机的应答信号(ACK)
4.当主机收到应答信号时,发送要访问的地址,继续等待从机的应答信号,
5.当主机收到应答信号后,主机要改变通信模式(主机将由发送变为接收,从机将由接收变为发送)所以主机重新发送一个开始start信号,然后紧跟着发送一个从机地址,注意此时该地址的第8位为1,表明将主机设 置成接收模式开始读取数据,
6.这时候主机等待从机的应答信号,当主机收到应答信号时,就可以接收1个字节的数据,当接收完成后,主机发送非应答信号,表示不在接收数据
7.主机进而产生停止信号,结束传送过程。

 

应答信号:

每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据

发送成功:如果从设备发送应答信号ACK,则SDA会被拉低

发送失败:没有应答信号NACKSDA会输出为高电平,这过程会引起主设备发生重启或者停止;

 发送数据:

SDA线上的数据在SCL时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位,数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。

当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位ACK, 此时才认为一个字节真正的被传输完成 ,如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。

停止条件:

当主设备决定结束通讯时,需要发送开始信号,需要执行以下动作;

 


原文链接:https://blog.csdn.net/u010632165/article/details/109188507

原文链接:https://blog.csdn.net/as480133937/article/details/105366932

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值