IIC总线知多少?

注:本文转载自公众号“记得诚”

IIC是串行总线,只用到两个线,应用非常广泛,本文介绍IIC的软件协议及硬件相关知识。

一、IIC概述

1. IIC定义

IIC总线是由Philips公司开发的一种简单、双向二线制同步串行总线,IIC只需要两根线进行通信,SDA和SCL,SDA叫串行数据线,SCL为串行时钟线。

2. IIC基本知识点

  1. SDA传输高位先传(MSB),每次传输8bit(1个字节),每个字节后面接1位ACK/NACK位,不管是传输地址还是数据;
  2. 支持多主控(同一时间点只有一个主控);
  3. 连接到总线的从设备都有一个独立的ADDRESS(7bit),用来主机识别从机设备;
  4. 总线空闲需要上拉至高电平,硬件I2C时,需要外接上拉电阻,模拟I2C时,单片机的IO口需要默认输入或(高阻),或者是输出高电平;
  5. SDA和SCL总线是“线与”关系,任意器件输出低电平,总线都会变为低电平。
  6. 多个主机同时使用总线时,需要用“仲裁”方式决定哪个设备占用总线,不然数据冲突;

3. IIC速率

IIC有三种速率模式,标准、快速以及高速模式,对应速率如下所示:

  • 标准模式:100Kbit/s
  • 快速模式:400Kbit/s
  • 高速模式:3.4Mbit/s

二、IIC软件时序

1. 起始和结束信号

起始和结束信号都是由主机产生,对起始和结束有如下的定义:

  • 起始信号:SCL为高时,SDA由1变为0
  • 结束信号:SCL为高时,SDA由0变为1
IIC起始信号和结束信号

2. 数据的位传输

SCL的高低电平决定了SDA的数据有效性,有如下规定:

  • SCL=0时,SDA改变数据有效。
  • SCL=1时,SDA需要保持稳定,传输数据。
IIC数据位传输

3. 从机处理中断程序

如果从机需要处理一个中断程序,才能接收上一个或者发送下一个完整的字节,从机可以拉低SCL,图中红色所示,迫使主机进入Wait状态,从机准备好之后,释放SCL,数据传输继续进行。

从机处理中断程序

4. ACK和NACK

传输完8位数据后,第9位代表应答/非应答信号,拉低SDA代表应答,每个字节后面都有一个应答/非应答信号,不管传输的是地址还是数据。

主机接收数据的过程中,等数据接收完毕,主机会向从机发送一个非应答信号,告诉从机不要发送了,再发送一个停止信号,释放总线结束通信。

5. 主机发送数据流程

1、主机检测到总线空闲(SDA和SCL为高),发送一个起始信号

2、主机发送一个命令字节(7位地址+R/W读写位),此时R/W=0(R/W=0为写,R/W=1为读)

3、从机收到命令字节后,向主机发送ACK信号

4、主机收到从机的ACK信号后,发送第一个字节数据

5、从机收到主机的数据后,发送一个ACK信号

6、主机收到从机的ACK信号后,再发送下一字节数据

7、主机发送最后一个字节,并且收到从机的ACK后,主机再发送一个停止信号,结束通信,释放总线;从机收到停止信号后,也退出总线的通信。

主机放数据流程

对于主机发送数据的流程,有如下几点需要特别注意:

1、主机是通过发送地址码与从机建立通信,其他从设备也收到了地址码,因为与自身的地址码不一样,退出总线通信;

2、主机的一次发送通信,发送的数据数量是不受限制的,主机通过发送停止信号,结束发送,从机收到停止信号,退出通信。

3、主机通过从机的ACK信号来判断从机接收情况,如果应答错误则会重新发送。

6. 主机接收数据流程

1、主机发送开始信号,并发送命令字节(7位ADDRESS+R/W位=1);

2、从机收到命令后,向主机返回一个ACK,并发送数据;

3、主机收到从机数据后,向从机发送一个ACK;

4、从机收到主机的ACK后,继续发送数据;

5、当主机完成数据接收,会向从机发送一个NACK(非应答),从机收到主机的非应答信号后,停止发送数据;

6、主机发送停止信号,释放总线结束通信;

主机的这个NACK包含两个意思,前一个字节数据接收完毕,下一个字节数据不要再发了。

主机接受数据流程

7. 子地址

带有IIC总线的器件除了有从机地址(salve address)外,还可能有子地址,从机地址是指该器件在IIC总线上被主机寻址的地址,而子地址是指该器件内部不同器件或存储单元的编址。例如,带IIC接口的EEPROM就是拥有子地址器件的典型代表。

8. IIC总线的仲裁机制

主控制器通过检测SDA上自身发送的电平和总线电平是否一样,来判断是否发生总线冲突,遵循低电平优先的原则(线与逻辑),谁先发送低电平谁就会掌握对总线的控制权。

如下图,其中DATA1是主节点1,DATA2是主节点2,SDA是总线上呈现的状态。

在两个红线之间,我们可以发现,此时的总线电平是0,而节点1是高电平,与总线电平不一样,此时节点1就会断开数据输出,变为从机接收状态,节点2就成为了主机。这样主节点2就赢得了总线,而且数据没有丢失,即总线的数据与主节点2所发送的数据一样,而主节点1在转为从节点后继续接收数据,同样也没有丢掉SDA线上的数据。因此在仲裁过程中数据没有丢失。

IIC仲裁机制

9. IIC时钟同步

  • SCL线被有最长低电平周期的器件保持低电平。
  • SCL时钟的高电平时钟周期由高电平时钟周期最短的器件决定。

SCL线被有最长低电平周期的器件保持低电平。此时,低电平周期短的器件会进入高电平的等待状态。当所有的器件数完它们的低电平周期后,时钟线被释放并变成高电平,所有的器件开始数它们的高电平周期,最先完成高电平周期的器件会再次将SCL线拉低。所以,产生的同步SCL时钟的低电平周期由低电平时钟周期最长的器件决定。高电平时钟周期由高电平时钟周期最短的器件决定。

IIC时钟同步

该如何理解?我画了如下的简图。

CLK1数完低电平后,发现CLK2还是低电平,因为IIC总线的线与逻辑,此时的总线SCL为低电平。CLK2说总线听我的,你必须等我数完,此时CLK1虽然变为高电平,但是需要进入高电平等待状态,所以同步SCL的低电平周期是由低电平周期最长的器件决定的。

数完低电平周期后,我们发现CLK1的高电平周期比较短,很快数完,此时将SCL拉低了,此时CLK2还是高电平,CLK1说,总线现在听我的,所以SCL的高电平周期由高电平周期最短的器件决定。

如何理解IIC时钟同步

10. 实测IIC波形

实测IIC波形述

三、硬件知识

1. 外接上拉电阻

IIC接口一般是OD机制,需要外接上拉电阻,否则无法输出高电平。

IIC总线结构

2. 上拉电阻的选择

常见的上拉电阻阻值是1.5K,2.2K,4.7K,10K等,那我们该如何选择呢?

敲重点:上拉电阻的最小值由上拉电源决定,最大值由总线电容决定!

关于最小值

一般I/O端口的驱动能力是2~4mA,一般上拉源是2.8V,一般OC或者OD门的导通电压是0.4V左右,那么上拉电阻不应小于(2.8-0.4V)/3mA=0.8K,所以上拉电阻最小值不应小于0.8K;

关于最大值

  • 上拉电阻不宜过大,总线的上升时间取决于总线的电容和上拉电阻大小(上升时间和RC的乘积成正比),电阻越大,信号的上升越缓慢,会导致通信可能失败;
  • 总线电容和总线上所挂载的器件数量有关系,当挂载的器件变多时,电容会变大,这时候要考虑上拉电阻是不是要减小,以确保信号质量。

示波器测量

IIC总线规定,对于400KHz的应用来说,总线的上升时间需要小于等于300ns,根据经验,或者是器件的SPEC来选择合适的上拉电阻,当然,用示波器也可以测量信号的上升时间,看是否达到300ns的要求。

3. PCB走线和抗干扰设计

IIC是低速总线,不是差分线。正常情况下,比较不容易受到干扰,对于要求比较高的场合,需要针对性的对SDA和SCL进行保护。

  • 比如G-SENSOR,对动静功能或者是翻转功能要求比较高,此时SENSOR的数据量可能比较大,就需要进行保护,SDA和SCL间距最好达到2倍线宽,包地。
  • 比如FPC场合中,使用到IIC总线,此时,因为走线路径较长,容易受到干扰,需要远离天线等,最好包地。

4. IIC串联保护电阻

IIC协议还定义了串联在SDA、SCL线上电阻Rs。该电阻的作用是,有效抑制总线上的干扰脉冲进入从设备,提高可靠性,这个电阻的选择一般在100~200ohm左右。

IIC串联电阻

5. 软件IO模拟IIC时序

除了MCU的本身的硬件IIC接口,软件的GPIO也可以模拟IIC时序,有如下的要求:

1、用于模拟I2C的处理器IO口,需要能输出高低电平,也能配置成输入。

2、处理器在发送数据时,此时的上升时间与上拉电阻无关,且此时的信号上升时间比较短;接收数据时,处理器采用的是软件采样而不是硬件采样,所以上拉电阻可以适当大一些。

3、软件模拟的只能单主机方式,多主机涉及到仲裁,软件模拟比较麻烦。

4、总线空闲时,需要保持IO配置为输入或者高阻,或者是输出高电平。

6. IIC上拉电源选择

选择合适的上拉源,如下,VDDP=VDDM的话,从机关闭时,就可能会有漏电到从机里,此时最好选择VDDP=VDDS,即按照设计要求,选择合适的上拉源。

IIC上拉电源选择
(0)

相关推荐

  • 【精品博文】IIC 通信协议的Verilog实现

    刚刚花了几天时间把 IIC 总算搞懂了一些,查了很多资料,也纠结过于很多细节,不过只要耐着性子,一点点的去理解,去尝试,终会得到你想要的结果,人生不也是吗,嘿嘿~ ,不闲扯了,下面就写写我的理解以及方 ...

  • 一天一个设计实例-万字长文E2PROM接口电路、时序及应用程序设计

    因为IIC 接口的E2PROM存储芯片比较常见和实用,所以本节主要以I2C的接口电路为主,后期有需要再添加. 1.1.1I2C 总线规范简介 1) I2C 总线特性介绍 在现代电子产品开发过程中,为了 ...

  • 杂七杂八的整理——STM32、Proteus使用、UART、IIC、SPI、LIN

    简要介绍两款ARM架构单片机 一. S32K1xx 系列单片机 S32K系列单片机是NXP比较新的车规级单片机,有S32K11x(基于ARM Cortex-M0+)和S32K14x(基于ARM Cor ...

  • UC头条:IIC, SPI, UART, 单总线

    IIC与SPI通信 IIC SPI通信 IIC与SPI的比较 UART 单总线 因为面试时被问到IIC和SPI通信,所以又重新学习了一下. IIC IIC顾名思义就是两根线,一根SCL(时钟线),一根 ...

  • IIC详解,包括原理、过程,最后一步步教你实现IIC

    IIC详解 1.I2C总线具有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL 2.IIC总线上可以挂很多设备:多个主设备,多个从设备(外围 设备).上图中主设备是两个单片机,剩下的都是从设备 ...

  • IIC原理超详细讲解

    文章目录 IIC 简介 IIC的物理层 IIC的高阻态 IIC物理层总结: IIC的协议层 IIC 总线时序图 初始(空闲)状态 开始信号: 停止信号 数据有效性 应答信号 IIC数据传送 数据传送格 ...

  • 常用通信协议——IIC详解(全网最全)

    一.IIC 简介 I2C(Inter-Integrated Circuit) 是内部整合电路的称呼, 是一种串行通讯总线, 使用多主从架构, 由飞利浦公司在1980年为了让主板. 嵌入式系统或手机用以 ...

  • 浅谈I2C总线,有时候它也叫 IIC

    [导读]I2C(Inter Integrated Circuit,内部集成电路)总线是价格低廉却很有效的用以互连小规模嵌入式系统内的外设的网络.I2C 总线有时候也叫作 IIC,它已有20多年的历史了 ...

  • 【精品博文】IIC总线小问题诱发的胡思乱想

    昨天又遇到一个和IIC总线相关的小问题,虽不起眼,但还是有点意思的.但是往大了说,这个问题应该属于信号完整性吧. 因为这个小问题,解决之后有那么一丁点的沾沾自喜,完了就是一大堆胡思乱想,记录在此,视为 ...

  • 见病知方,经方高手16张经方的用药经验

    2020年飞快的过去了!我的中医学习实践却在徘徊中慢行.翻看病案记录,最早的一个是在2月14日.也许还有更早的.遗憾的是,有些没有记录,有些没有下文.盘点自己用过的方子,算是对过去一年的小结,也算是对 ...

  • 知乎10条神回复,针针见血,看完整个人通透多了

    作者|读者来源|读者(ID:duzheweixin) 在我们的一生中, 总会遇到各种各样的问题. 有时候, 让我们苦苦追寻的人生答案, 其实就在我们的身边-- 01 问:命运是什么? 神回复:命,是弱 ...

  • 你究竟是不是“脾虚”体质?看一看嘴唇就知...

    你究竟是不是"脾虚"体质?看一看嘴唇就知道了!   中医认为"脾其华在唇",健康的唇色应该是颜色红润.均匀的,上下嘴唇的颜色无差异,也没有明显的边线. 并且整个 ...

  • 知之与结局

    对男人一知半解的女人, 最终都成了男人的妻子, 对男人无所不知的女人, 最终都成了孤身老女人.

  • 5个良心的装机必备软件,知乎超10w人推荐,错过太可惜

    新买了电脑,不知道该装什么软件? 别纠结了,今天给大家梳理了几款实用的必备软件,都是知乎上很多人推荐且热度高的产品,话不多说,上软件! 一.录制神器-ScreenToGIF ScreenToGif是一 ...

  • 心内科主任建议:中老年人一定要知道的8种...

    心内科主任建议:中老年人一定要知道的8种心脏自我诊断方法,务必学习! 1.劳力性呼吸困难. 常在中等活动量时就感到明显气短,呼吸浅表而短促,休息后可恢复. 这种呼吸困难是心脏功能不全尤其左心功能不全时 ...

  • 空腹血糖高,选什么药?餐后血糖高,选什么药?一看便知!

    糖尿病病友选药要根据自己的血糖水平,基础血糖高和餐后血糖高,或者两者均高,选药方案各不同.如果是基础血糖高,应选择降基础血糖的药物:如果是餐后血糖高,则应选择降餐后血糖的药物,而且降餐后血糖的药物不能 ...