IIC串行通信总线介绍

学习记录:

近日学习了IIC集成电路总线,记录一下


学习清单:

  1. IIC的介绍
  2. IIC的起始信号、终止信号
  3. IIC的数据的发送
  4. IIC的应答信号
  5. 主机发送数据流程、主机接收数据流程

学习内容:

1.IIC的介绍

IIC的全称是Inter-Integrated Circuit,其实是IICBus的简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。I²C的正确读法位“I平方C”(I-squared-C),而“I二C”(“I-two-C”)则是另一种错误但被广泛使用的读法。

2.IIC起始信号、终止信号

IIC是CPU与芯片之间进行通信使用最多的协议,除去电源之外,需要使用的两根线是:SCLK或者SCL(时钟线)和SDA(数据线)。

  • 数据线用来传输数据
  • 时钟信号线用于产生时钟频率,控制时序,实现协议过程

由于它有一根时钟线,所以IIC是同步通信,由于它只有一根数据线,且IIC的主从结构中,主设备和从设备都是会发送信息给对方的,所以IIC协议是半双工的(半双工:只有一根数据线,主设备和从设备分时使用这根数据线进行信息传送)。

在开始通信之前和结束通信我们都需要一个标志信号来标识,以便让计算机知道什么时候是在传输数据。IIC总线规定当SCLK时钟信号一直处于高电平状态时,SDA线由高电平跳转到低电平这个动作,表示起始信号。此时就算SDA数据线的电平跳变完,SCLK依然是高电平。当连接在IIC总线上的外设模块检测到这个信号时,就知道数据要开始传输了,对于结束信号同理;规定,当SCLK时钟信号一直处于高电平状态时,SDA线由低电平跳转到高电平这个动作,表示结束信号。
在这里插入图片描述

如图中框起来的部分,分别就是起始信号和结束信号,一般简称为S和P。IIC在空闲的时候,SDA、SDLK都处于高电平状态(由上拉电阻拉起高电平),我们也可以看见在起始信号之前和结束信号之后都是高电平,即都是空闲状态。

3.IIC数据的传送

规定,在数据的传输过程中,SCLK为高电平时,外设模块开始采集SDA数据线上的数据,此时要求SDA 数据线上的电平线上的电平状态必须稳定(这样才能区分高低电平传输的数据),并且只有SCLK为低电平的时候才允许SDA数据线进行高低电平的跳转(这是因为如果SCLK为高电平,然后SDA进行高低电位的跳转会与起始信号和结束信号发生冲突)。

现在比如要传送一个位的数据,上文有提到,在发送完起始信号之后,SCLK时钟信号仍然是高电平,SDA保持低电平,这时还没有开始读取数据,从发了起始信号到真正数据传输之间,会有一段缓冲时间,这段时间是用来准备数据的,先是将SCLK时钟信号拉低一段时间,在这期间将SDA数据线拉高一段时间(即传输了数据1),然后再将SCLK信号拉高,此时这个时钟信号的高电平被外设检测到的话,外设就知道要读取数据了。可结合上图进行理解。

允许数据进行跳转的部分,如下图的中间部分,即SCLK时钟线是低电平的时候。
在这里插入图片描述

4.IIC应答信号

主设备往IIC总线上传输器件地址,所有从机接收到之后与自己的地址相比较,若相同,则阿初一个应答ACK(Acknowledge)信号,主设备收到这个信号表示通信连接成功,包括在连接成功之后,数据接收方(主设备或从设备)收到传输的一字节数据后,需要给出响应,即在第九个时钟的时候,发送端释放SDA线控制权,将SDA电平拉高,由接收方控制。
收到的信息分:

  • ACK(Acknowledge):若希望继续,则给出“应答信号”,即SDA为低电平
  • NACK(Not Acknowledge):若不希望继续,则给出“非应答信号”,即SDA为高电平
    在这里插入图片描述
    比如现在是主机向从机发送信息,在主机传输完一个字节之后,应该要释放总线(协议规定,当SDA和CSLK同时为高时,表示空闲状态),因为这里要让出总线,使从机能发送一个应答信号,此时SDA数据线连接的IO口从输出模式转换成输入模式,这样才能拿到SDA数据线上的应答信号,这样一个字节的数据就从主机到外设传输完毕了。

5.IIC双向通信

主设备通过地址来确定与哪个器件进行通信,IIC总线上每个从设备都有唯一的一个7bit地址物理识别(因为另外还有一位是读写位),这个地址固化在芯片内部,可以在芯片的datasheet上找到。由于IIC地址全零为广播地址,所以IIC总线理论上最多能有2^7-1 = 127个从设备,一般不会带这么多从设备,负载会太大。

6.主机发送数据流程、主机接收数据流程

主机发送数据流程
  1. 主机在检测到总线为空闲时,发送一个启动信号“S”,开始一次通信
  2. 主机接着发送一个从设备的地址,它由7bit物理地址和1bit读写控制位R/W组成(R/W此时为0)0表示写
  3. 相对应的从机收到命令字节后向主机反馈应答信号ACK
  4. 主机收到从机的应答信号之后,开始发送第一个字节的数据
  5. 从机收到该字节的数据之后就反馈一个应答信号
  6. 主机收到应答信号之后再发送下一个字节的数据
  7. 主机发完最后一个字节并收到ACK后,向从机发送一个停止信号P结束本次通信并释放总线
  8. 从机收到P(结束信号)信号之后也退出与主机之间的通信
    在这里插入图片描述
主机接收数据的流程
  1. 主机发送启动信号后,接着发送地址字节(其中 R/W=1)1表示读
  2. 对应的从机接收到地址字节后,返回一个应答信号并向主机发送数据
  3. 主机收到数据后向从机反馈一个应答信号ACK
  4. 从机收到应答信号之后,再向主机发送下一个数据
  5. 当主机完成数据接收之后,向从机发送一个NAK,从机收到非应答信号之后便停止发送
  6. 主机发送非应答消息之后,再发送一个停止信号,释放总线结束通信
    在这里插入图片描述

资料:

参考文章:参考的好文章1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值