IIC协议详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


IIC是一个多主从的串行总线(任意时刻只能有一个主机等特性),又叫I2C,属于半双工同步传输类型的总线; 它仅使用两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA。 SDA和SCK在空闲的时候要处于高电平状态,所以需要通过电阻上拉
IIC总线标准模式下速度可以达到100Kb/s,快速模式下可以达到400Kb/s。IIC总线工作是按一定的协议来运行的。IIC是为了与低速设备通信而发明的,所以IIC的传输速率比不上SPI
IIC是支持多从机的,也就是一个IIC控制器下可以挂多个IIC从设备,这些不同的IIC从设备有不同的器件地址,这样IIC主控制器就可以通过IIC设备的器件地址访问指定的IIC设备了,一个IIC总线连接多个IIC设备如下图:
在这里插入图片描述

上图中SDA和SCL这两根线必须要接一个上接电阻,一般是4.7K。其余的IIC从器件都挂接到SDA和SCL这两根线上,这样就可以通过SDA和SCL这两根线来访问多个IIC设备。
通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。


起始位

顾名思义,也就是IIC通信起始标志,通过这个起始位就可以告诉IIC从机,“我”要开始进行IIC通信了。在SCL为高电平时,SDA出现下降沿就表示为起始位,如下图:
在这里插入图片描述

停止位

停止位就是停止IIC通信的标志位,和起始位的功能相反。在SCL为高电平的时候,SDA出现上升沿就表示停止位,如下图:

在这里插入图片描述

数据传输

IIC总线在数据传输的时候要保证在SCL高电平期间,SDA上的数据稳定,因此SDA上的数据变化只能在SCL低电平期间发生,如下图: 在这里插入图片描述

应答信号

当IIC主机发送完8位数据以后会将SDA设置为输入状态,等待IIC从机应答,也就是等到IIC从机告诉主机它接收到数据了。应答信号是由从机发出的,主机需要提供应答信号所需的时钟,主机发送完8位数据以后紧跟着的一个时钟信号就是应答信号使用的。从机通过将SDA拉低来表示发出应答信号,表示通信成功,否则表示通信失败。
应答信号:主机SCL拉高,读取从机SDA的电平,为低电平表示产生应答
应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;
应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
在这里插入图片描述
每发送一个字节8个bit在一个字节传输的8个时钟后的第九个时钟期间,接收器接收数据后必须回一个ACK应答信号给发送器,这样才能进行数据传输。
应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答
在这里插入图片描述
这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。

IIC写时序

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

IIC读时序

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

数据传输流程:

在这里插入图片描述
①为什么需要上拉电阻?
IIC信号线传输时为开漏输出,为了避免总线信号的混乱,IIC的空闲状态只能有外部上拉, 而此时空闲设备被拉到了高阻态,也就是相当于断路, 整个IIC总线只有开启了的设备才会正常进行通信,而不会干扰到其他设备
②IIC总线最多可以接多少台设备
理论上可以接127台设备
但是每一个IIC器件都有一个器件地址,有的器件地址在出厂时地址就设定好了,用户不可以更改,比如OV7670的地址为0x42。有的器件例如EEPROM,前四个地址已经确定为1010,后三个地址是由硬件链接确定的,所以一IIC总线最多能连8个EEPROM芯片

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值