0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

I2C总线相关的基本概念和通信流程解析

电子设计 来源:硬件助手 作者:硬件助手 2020-11-29 10:04 次阅读

本文主要介绍I2C总线相关的一些基本概念、通信流程、同步和仲裁、模式切换等。

I2C总线是PHILIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线仲裁和高低速器件同步功能的高性能串行总线。

I2C物理上包括2条双向串行线,一条数据线SDA,一条时钟线SCL。均为OD结构,需要外部上拉,具体选取可参见之前的文章《硬件电路设计之“上下拉电阻”》。
SDA传输数据是大端传输(字节高位先传),每次传输8bit,即一字节。支持多主控(multi master),任何时间点只能有一个主控。总线上每个设备都有自己的一个addr,7bit或10bit,广播地址为全0。

1、基本概念
I2C总线上常用的一些基本概念如下:
主机:初始化发送,产生时钟信号和终止发送的器件。

从机:被主机寻址的器件。

发送器:发送数据到总线的器件。

接收器:从总线接收数据的器件。

多主机:同时有多于一个主机尝试控制总线,但不破坏报文。

仲裁:是一个在有多个主机同时尝试控制总线,但只允许其中一个控制总线并使报文不被破坏的过程。

同步:两个或多个器件同步时钟信号的过程。

总线空闲状态:I2C总线的SDA和SCL同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。

结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。

数据传输:SCL为高电平时,SDA线必须保持稳定,SDA上传输一个bit数据(电平采样);

数据改变:SCL为低电平时,SDA线才能改变电平。

I2C应答信号:主控每发送完8bit数据后等待从设备ACK。即在第9个CLK,若从设备发回ACK,SDA会被拉低(ACK信号为‘0’)。若没有ACK,SDA会被置高(NAK信号为‘1’),这会引起主控发生RESTART或STOP流程。

★NAK主要有两个作用:一是表示接收器未成功接收数据字节;二是当接收器是主机时(主机读数据),它收到最后一个字节后,应发送一个NAK信号,以通知从机结束数据发送,并释放总线,以便主机发送一个停止信号STOP。

2、基本通信流程
一次完整的I2C通信流程如下:
主设备发出开始信号(Start)。
主设备发出1字节的从设备地址信息,其中最低位为读写控制码(0为写,1为读),高7位为从设备地址码。
从设备发出ACK信号。
主设备开始对从设备进行读写操作。如果是读操作,则每读取1字节,主设备会发送一个应答信号(ACK)给从设备,如果是写操作,则每写入1字节,从设备会发送一个应答信号(ACK)给主设备。
主设备发出结束信号(Stop)。

3、10bit地址的发送
10bit地址的发送分两次发送,第一次发送高2bit和读写信号(高5bit固定为识别码11110),第二次发送低8bit,每次都有ACK信号。I2C规范并没有强制规定发送端在发送接收端地址后接收端非要做出响应不可,也可以默不作声,即便默不作声,发送端还是会继续工作,开始进行数据传输及读/写指令;

实际使用中10bit地址的寻址有两种方式:一种是只进行一次寻址,10bit地址的发送分两次发送,第一次发送高2bit和读写信号(实际读写操作),第二次发送低8bit。另一种是进行两次寻址,第一次寻址将10bit地址的发送分两次发送,第一次发送高2bit和读写信号,第二次发送低8bit;第二次寻址通过一个重复开始信号跟高2bit地址和读写信号(实际读写操作)进行二次寻址,第二次寻址只有第一次匹配上的从机会有应答。


主机发送数据时,当从机接收到开始条件后的10bit地址,从机就和它自己的地址比较从机地址的第一个字节(1111 0XX),并检查第八个bit(读写位)是否为0。有可能多个设备都匹配并产生应答(A1)。接下来所有从机开始匹配自己地址与第二个字节的8个bit(XXXXXXXX),这时就只有一个从机匹配并产生应答(A2)。被主机寻址匹配的从机会保持被寻址的状态直到接收到终止条件或者是重复开始条件后跟着一个不同的从机地址。

在第二个应答A2之前,处理过程与上面的一致。在重复开始条件(Sr)之后,匹配的从机会保持被寻址上的状态。这个从机会检查Sr之后的第一个字节的前7bit是否正确,然后测试第8bit是否为1(读)。如果这也匹配的话,从机就认定它被作为一个发送器被寻址到了并产生应答A3。从机会保持被寻址的状态直到接收到终止条件(P)或者重复开始条件(Sr)跟着一个不同的从机地址。然后这个时候的重复开始条件下,所有的从机会比较它们的地址与11110XX比较并测试第八位(读写位)。然而它们不会寻址到,因为对于10bit设备。读写位是1,或者对于7bit的设备,1111 0XX的从机地址不匹配。

4、同步和仲裁
所有主机在SCL线上产生它们自己的时钟来传输I2C总线上的报文。数据只在时钟的高电平周期有效。因此,需要一个确定的时钟进行逐位仲裁。

时钟同步通过线与连接I2C接口到SCL线来执行。这就是说:SCL线的高到低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使SCL线保持这种状态直到到达时钟的高电平。但是,如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变SCL线的状态。因此,SCL线被有最长低电平周期的器件保持低电平。此时,低电平周期短的器件会进入高电平的等待状态。

当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平。之后,器件时钟和SCL线的状态没有差别,而且所有器件会开始数它们的高电平周期。首先完成高电平周期的器件会再次将SCL线拉低。

这样,产生的同步SCL时钟的低电平周期由低电平时钟周期最长的器件决定,而高电平周期由高电平时钟周期最短的器件决定。

主机只能在总线空闲的时侯启动传输。两个或多个主机可能在起始条件的最小持续时间(tHD;STA)内产生一个起始条件,结果在总线上产生一个规定的起始条件。

当SCL线是高电平时,仲裁在SDA线发生。这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。

仲裁可以持续多位。它的第一个阶段是比较地址位。如果每个主机都尝试寻址相同的器件,仲裁会继续比较数据位(如果是主机)或者比较响应位(如果是主机)。因为I2C总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息。

丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾。

由于Hs模式的主机有一个唯一的8位主机码,因此一般在第一个字节就可以结束仲裁。

如果主机也结合了从机功能,而且在寻址阶段丢失仲裁,它很可能就是赢得仲裁的主机在寻址的器件。因此,丢失仲裁的主机必须立即切换到它的从机模式。

产生DATA1的主机的内部数据电平与SDA线的实际电平有一些差别,如果关断数据输出,这就意味着总线连接了一个高输出电平。这不会影响由赢得仲裁的主机初始化的数据传输。

由于I2C总线的控制只由地址或主机码以及竞争主机发送的数据决定,没有中央主机,总线也没有任何定制的优先权。
在串行传输时,当重复起始条件或停止条件发送到,I2C总线的时侯,仲裁过程仍在进行。如果可能产生这样的情况,有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件。也就是说,仲裁不能在下列情况之间进行:
重复起始条件和数据位

停止条件和数据位

重复起始条件和停止条件

从机不被卷入仲裁过程。

5、高速模式切换
Hs模式的串行数据传输格式符合标准模式I2C总线规范,Hs模式只能在下面的情况下(所有都在F/S模式)启动:

起始条件(S)

8位的主机码(00001XXX)

不响应位(A/)

主机码有两个主要的功能:
它允许在F/S模式速度下竞争主机之间仲裁和同步,结果得到一个获胜的主机。

它表示Hs模式传输的开始。

Hs主机码是保留的8位代码,它不用于从机寻址或其他目的。而且,由于每个主机都有唯一的主机码,I2C总线系统最多可以有8个Hs模式主机(主机码0000 1000应保留作测试和诊断用)。Hs模式主机器件的主机码是软件可编程的,由系统设计者决定。

以上就是针对I2C总线的一些基本介绍。

编辑:hfy


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • I2C总线
    +关注

    关注

    8

    文章

    357

    浏览量

    60408
  • 串行总线
    +关注

    关注

    1

    文章

    164

    浏览量

    30436
  • 硬件接口
    +关注

    关注

    0

    文章

    40

    浏览量

    10767
收藏 人收藏

    评论

    相关推荐

    如何通过I2C总线上的uProcessor或FPGA与芯片通信

    如何通过 I2C 总线上的 uProcessor 或 FPGA 与芯片通信
    发表于 02-26 07:25

    使用两片ADU360进行I2C通信,当与从机进行通信时,从机无法进入I2C中断是为什么?

    问题说明:使用两片ADU360进行I2C通信,主机使用IO口模拟方式,从机使用内部外设 主机IO口模拟方式,确认是可行,当与从机进行通信时,从机无法进入I2C中断 以下为
    发表于 01-15 06:47

    最简单的总线通讯!I2C通讯总线的原理原来这么好懂

    通讯I2C
    安泰仪器维修
    发布于 :2024年01月02日 11:16:31

    twi和i2c总线有什么区别?

    twi和i2c总线有什么区别,他们谁是不是兼容谁
    发表于 11-08 07:45

    AT32F402/405 I 2C使用指南

    AT32F402/405 I2C使用指南本文主要就I2C 总线接口的基本功能进行讲解和案列解析
    发表于 10-26 08:17

    AT32F423 I2C使用指南

    AT32 的 I2C 总线接口用于处理微控制器和串行 I2C 总线之间的通信,支持主机和从机模式,支持唤醒深睡眠模式,最大
    发表于 10-26 06:33

    AT32F435/437 I 2C使用指南

    AT32F435/437 I2C使用指南主要就I2C 总线接口的基本功能进行讲解和案例解析
    发表于 10-25 08:09

    AT32F425 I2C使用指南

    AT32F425 I2C使用指南本文主要就I2C 总线接口的基本功能进行讲解和案例解析
    发表于 10-25 07:39

    i2c总线最多可以接多少设备?

    请问i2c总线最多可以接多少设备
    发表于 09-26 06:38

    时钟延展导致I2C通信不可靠的解决方案

    ,而 MPEG 解码芯片为 MASTER节点。在产品调试过程中,发现该通信不可靠。在系统运行一段时间后,该通信会出现故障而导致整个系统死机。使用示波器测量,发现这时 I2C 总线的 S
    发表于 09-08 06:58

    I2C总线的使用与编程

    I2C总线是飞利浦公司在20世纪80年代初由S定义的一种二线制总线系统。I2C总线是一种双向的,专为简单但高效的控制应用而设计。 它广泛应用
    发表于 09-04 07:23

    I²C总线通信的应用方法

    可通过指令控制 驱动芯片SSD1306 接口I2C GD32VF103的I²C接口 GD32VF103的I²C(内部集成电路
    发表于 08-16 07:36

    基于 FPGA 的模拟 I2C协议系统设计

    TestBench仿真和测试程序的方法。 第一篇内容摘要:本篇会介绍 I2C 总线解析,包括 I2C 总线概述、
    发表于 08-14 18:21

    Arduino IDE 上的双I2C总线问题求解

    和 Wire.cpp 文件,它们都包含 end() 函数。所以 ????? 1.关于这个错误有什么建议吗?Wire.h 文件有一个说明,它是在 2020 年修改的,所以它是相当新的。 2. 替代想法?I2C 多路复用器可能不在卡片中。如果没有软件解决方案,我将使用小刀和
    发表于 05-09 07:00