IIC是当今嵌入式应用中最常见的串行通信协议之一。对比OneWire严苛的时序要求,SPI等更多的线缆要求,IIC处于一个折中的位置:不那么多的2根线缆的硬件要求,不那么复杂严苛的时序要求,便可进行多主多从的双向通信,小巧灵活方便,这使它广受欢迎。

目录

  • 一、简介
  • 二、主要特性
  • 三、硬件结构
    •  1. 总线结构
    •  2. 总线的拉高和拉低
  • 四、工作时序
    •  1. 数据有效性
    •  2. 开始和结束信号
    •  3. 重复开始信号
    •  4. 字节格式
    •  5. 应答信号
  • 五、7-bit 设备的数据传输
    •  1. 主机写-从机收,传输方向不变
    •  2. 主机读-从机发,传输方向改变
  • 六、10-bit 设备的数据传输
    •  1. 10-bit 设备的写
    •  2. 10-bit 设备的读

一、简介

  IIC(Inter-Integrated Circuit)是 IIC Bus 简称,中文叫集成电路总线。它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属设备地址。
  IIC使用两根信号线进行通信:一根时钟线SCL,一根数据线SDA。IIC将SCL处于高时SDA拉低的动作作为开始信号,SCL处于高时SDA拉高的动作作为结束信号;传输数据时,SDA在SCL低电平时改变数据,在SCL高电平时保持数据,每个SCL脉冲的高电平传递1位数据。

二、主要特性

  • IIC用2根信号线通信:串行数据线 SDA、串行时钟线 SCL
  • IIC总线上所有器件的SDA、SCL引脚输出驱动都为 开漏(OD) 结构,通过外接上拉电阻实现总线上所有节点SDA、SCL信号的线与逻辑关系;
  • 总线上的所有设备通过软件寻址且具有唯一的地址(7位或10位)。7位“从机专用地址码”,其高4位为由生产厂家制定的设备类型地址,低3位为器件引脚定义地址(由使用者定义);10位地址不常见;
  • 任何时刻都只存在简单的主从关系,按数据传输的方向,主机可以是主发送器或主接收器;
  • 支持多主机。在总线上存在多个主机时,通过冲突检测和仲裁机制防止多个主机同时发起数据传输时存在的冲突;
  • IIC总线上所有器件都具有“自动应答”功能,保证数据传输的正确性; 主机和从机的区别在于对SCL的发送权,只有主机才能发送SCL;
  • IIC总线允许挂载最多的设备数量取决于总线上最大电容值,一般为400pf(Hs模式100pf)
  • IIC总线不仅广泛应用于电路板级的内部通信,还可以通过I2C总线驱动器进行不同系统间的通信; 支持传输速率包括:
模式 速度
标准模式(Standard Mode) 100kb/s
快速模式(Fast Mode) 400kb/s
增强快速模式(Fast Mode Plus) 1Mb/s
高速模式(High Speed Mode) 3.4Mb/s
极速模式(Ultra-FastMode) 5Mb/s

三、硬件结构

 1. 总线结构

  IIC使用两根信号线进行通信,要求两根线都使用 开漏输出接上拉电阻 的配置,以此实现总线上所有节点SDA、SCL信号的 线与 逻辑关系。
  Rp电阻的取值有一定的要求,太小会导致灌入电流过大,使’低’数据不稳定,甚至损坏端口;太大会导致信号上升缓慢,使得数据传输出错。在不同应用场景及供电电压下有不同的取值要求。


  线与 逻辑使得总线上不会出现数据冲突,实现了总线的仲裁控制。总线的控制权会交给最后一个输出低电平的设备,其它设备(输出高)通过检测总线上的电平状态(状态低),对比与自己输出状态不一致,则自动退出对总线的控制请求,从而防止了总线上的数据冲突。
  漏极开路/集电极开路的缺点是对于一个距离长的数据线,信号传输速率得不到有效保证。更长的走线对于输出驱动器表现为更大的容性负载,等效容性负载C和信号线的上拉电阻R构成RC振荡器。RC越大,意味着反射和振荡越强,从而影响总线的信号完整性。这也是I2C规范对总线电容值约束在400pf以内的原因。高速模式对信号完整性的要求更高,协议有定义相关SDA/SCL处理办法,以保证在数据线够长、速率够高时,信号完整性也可以得到满足。

 2. 总线的拉高和拉低

  下图展示了IIC总线拉低和拉高的过程。

  • 拉低:设备的逻辑电路控制FET打开,总线通过导通的FET连接到GND从而被拉低
  • 拉高:设备的逻辑电路控制FET关闭,总线通过上拉电阻Rp连接到VDD从而被拉高

四、工作时序

 1. 数据有效性

  IIC 的数据读取动作都在 SCL为高 时产生,SCL为低时是数据改变的时期,无论SDA如何变化都不影响读取。所以,传输数据的过程中,当SCL为高时,数据应当保持稳定,避免数据的采集出错。

 2. 开始和结束信号

   开始信号(START/S): SCL为高时,SDA从高到低的跳变产生开始信号
   结束信号(STOP/P)  : SCL为高时,SDA从低到高的跳变产生结束信号

 3. 重复开始信号

   重复开始信号(ReSTART/Sr): 在结束时不给出STOP信号,而以一个时钟周期内再次给出开始信号作为替代

 4. 字节格式

   SDA数据线上的每个字节必须是8位,对于每次传输的字节数没有限制。每个字节(8位)数据传送完后紧跟着应答信号(ACK,第9位)。数据的先后顺序为:高位在前

 5. 应答信号

  协议规定数据传输过程必须包含应答(ACK)。接收器通过应答告知发送的字节已被成功接收,之后发送器可以进行下一个字节的传输。主机产生数据传输过程中的所有时钟,包括用于应答的第9个时钟。发送器在应答时钟周期内释放对SDA总线的控制,这样接收器可以通过将SDA线拉低告知发送器:数据已被成功接收。
  应答信号分为两种:
    1)当第9位(应答位)为 低电平 时,为 ACK  (Acknowledge)   信号
    2)当第9位(应答位)为 高电平 时,为 NACK(Not Acknowledge)信号
  主机发送数据,从机接收时,ACK信号由从机发出。当在SCL第9位时钟高电平信号期间,如果SDA仍然保持高电平,则主机可以直接产生STOP条件终止以后的传输或者继续ReSTART开始一个新的传输
  从机发送数据,主机读取数据时,ACK信号由主机给出。主机响应ACK表示还需要再接收数据,而当主机接收完想要的数据后,通过发送NACK告诉从机读取数据结束、释放总线。随后主机发送STOP命令,将总线释放,结束读操作。

五、7-bit 设备的数据传输

  一个完整的7-bit通信过程如图所示:


  在START信号后的首字节由7位从机地址和1位读写位组成,结构如下图:

  发送完这个字节之后,主机释放SDA总线等待从机给出ACK应答。如果从机给出了ACK应答,表示从机地址正确(有从机响应)并且已知晓是读还是写,便可以开始读写数据。如果从机没有给出ACK应答,则说明接收设备可能没有收到数据(如寻址的设备不存在或是设备正在忙碌)或无法解析收到的数据,如果是这样,则由master来决定如何处理(STOP或ReSTART)。

 1. 主机写-从机收,传输方向不变

  主机对从机发送数据时,主机对从机发送一个开始字节,然后即可一直发送数据。以示例来讲解,其第一帧数据为要操作的寄存器地址,所以为:“[1-Byte]开始字节(写) + [1-Byte]寄存器地址 + [1-Byte]寄存器数据”。

 2. 主机读-从机发,传输方向改变

  主机对向从机读取数据时,方式同发送数据有所不同,要多一次通信过程。
  主机需要先向从机发送一次信号,告诉从机”我要读取数据“,然后重开一次通信,等待从机主动返回数据。以示例来讲解,发送 “[1-Byte]开始字节(写) + [1-Byte]要读取的寄存器的地址”,之后结束通信,或者重开始,来进入到第二次通信中,先发送 [1-Byte]开始字节(读),然后等待读取从机发送过来的 [1-Byte]数据 即可。

六、10-bit 设备的数据传输

  随着IIC设备日益增多,7位的从机地址逐渐不能满足使用,于是从机地址从7位扩充到了10位。7位和10位地址的设备可以共存于同一个I2C总线系统互不冲突,展现了良好的兼容性。
  10-bit 地址的IIC设备需要 2-Byte 来传输从设备地址信息,所以采用了这样的设计:第一个字节为 1111 0 + 地址高两位(第10、9bit) + 读写控制位,第二个字节为从设备地址低8位,除此之外与7-bit设备相同。因为 “1111 0xx” 为 IIC 中特地保留的16个特殊指令地址中的一个,所以7-bit设备不会响应该首字节的呼叫,只有10-bit设备会响应,从而实现良好兼容。

 1. 10-bit 设备的写

  10-bit设备的写过程如下图示例,除地址部分外与7-bit相同。

 2. 10-bit 设备的读

  10-bit设备的读过程如下图示例,需注意的是,第二次通信过程无需再次发送第2Byte地址。

基础通信协议之 IIC (I2C) 详细讲解相关推荐

  1. 0021 arduino iic i2c 实例讲解 TWI是什么 arduino 的 iic 库 i2c库 arduino Wire 库

    目录 I2C介绍 TWI 介绍 arduino 的iic库 下一讲,具体例子 I2C介绍 I2C 是一种简单.双向二线制同步串行总线.它只需要两根线即可在连接于总线上的器件之间传送信息.简单说就是 只 ...

  2. 【基础知识】IIC(I2C)协议

    文章目录 概述 时序 起始信号 停止信号 数据信号 应答信号 总时序 IIC的地址 I2C读写寄存器 写寄存器 读寄存器 概述 IIC(I2C)是一个同步半双工串行通信协议,使用3根线即可连接 名称 ...

  3. Java基础18-String类【String类的特点对象个数常用方法】【超详细讲解】

    Java基础-String类[超详细讲解] String类的特点 String在java.lang.String包中 1:特点 (1)String类型不能被继承,因为由final修饰 (2)Strin ...

  4. Python的零基础超详细讲解(第十三天)-Python的类与对象

    基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)- ...

  5. Python的零基础超详细讲解(第十二天)-Python函数及使用

    基础篇往期文章: Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博 ...

  6. Python的零基础超详细讲解(第七天)-Python的数据的应用

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  7. Python的零基础超详细讲解(第五天)-Python的运算符

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

  8. SQL Server基础知识概念要点详细讲解

    SQL Server基础知识概念要点详细讲解 目录 基础概念 1.网状模型数据库 2.层次模型数据库 3.关系模型数据库 知识点实例总结 基础概念 SQL语言中,between and表示包括两边参数 ...

  9. delphi7存取配置文件与sqlserver数据库连接_SQL Server基础知识概念要点详细讲解

    SQL Server基础知识概念要点详细讲解 目录 基础概念 1.网状模型数据库 2.层次模型数据库 3.关系模型数据库 知识点实例总结 基础概念 SQL语言中,between and表示包括两边参数 ...

最新文章

  1. 将BST转换为有序的双向链表!
  2. 初探可编程网关 Pipy
  3. 反汇编的应用1-软件破解
  4. Visual Studio 2017 15.7预览版发布
  5. 计算机前端专业术语,学习计算机知识必须懂得50个专业术语
  6. 如何保存Tensorflow中的Tensor参数,保存训练中的中间参数,存储卷积层的数据
  7. Hadoop历代版本及其特点
  8. java ee 值范围_JAVAEE之内置对象和属性范围
  9. 飞秋(FeiQ)已在计算机技术的世界里沉浸了十年
  10. 分布式游戏网关--fooking
  11. 决策树算法 (CART分类树)
  12. 代码-检测文件的编码
  13. 经度纬度地图搜索器_百度地图搜索经度纬度_地球经度纬度示意图
  14. 又双叒叕可以 4 折买书了!!来薅羊毛了!
  15. 编写程序,提示用户输入学号、成绩
  16. zjs-my-diary-0220118
  17. 阿里easyexcel通过模板导出excel
  18. 5分钟使用ssl证书免费配置任意域名的 https
  19. 【转载】区块链-概述
  20. QQ圈子:你的亲密敌人

热门文章

  1. 雷电模拟器怎么让有一些用另外一条网络_农村家庭电视接收天线的雷电防护措施...
  2. 不是操作系统的是JAVA_在Jdbc中可以调用数据库的存储过程的接口是( )。
  3. oracle中查询中文字段查询不出的问题
  4. 量化与科技的相遇!亚马逊云科技揭开神秘的量化私募
  5. SDUT-2678 继承与派生
  6. 提高ChatGPT稳定性:告别GPT网页登录使用PC软件进入GPT
  7. 软考高项笔记(二):成本类计算
  8. Matplotlib指令之折线图散点图
  9. 笔记本/台式机改造成centos7服务器 + 宝塔面板服务器磁盘挂载(亲测,能打版)
  10. 武汉ISO27001认证需满足这个硬性要求才能快速通过