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

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

3天内不再提示

I2C总线协议的基础知识

FPGA研究院 来源:数字站 2024-08-06 11:36 次阅读

串口是传感器、外设常用的接口,在低速器件中可以通过串口传输数据。高速复杂的器件,往往内部存在很多寄存器,这些寄存器的配置一般也是采用串口通信,可以节省IO口。

常用串口大致分为UART、IIC、SPI三种,其中IIC时序稍微复杂,却是最好用的串行接口。如下图所示,主机通过两根数据线,就可以与多个外设通信。

wKgZomaxmliAH6PWAADnQZUn07k428.jpg

图1 主机控制多个外设

主机想要通过UART与N个外设双向通信,一般需要2*N个IO口。主机想要通过SPI与N个外设双向通信,一般需要使用N+3个IO口。而如果使用IIC接口,那么只需要2个IO口。

因此IIC对于节省IO有较大优势,劣势在于UART可以全双工通信,SPI的时钟线与数据线分开,传输速度最快,且UART和SPI的驱动设计一般比较简单。而IIC由于只靠两根线驱动多个传感器,所以需要确认主机与哪个传感器建立连接(传输器件地址),然后在对器件内部寄存器进行读写,导致通信速度不可能很高。

01I2C硬件接口

IIC主机或者从机的硬件接口如下图所示,使用一个开漏/开集(如果是MOS管则漏极开路,如果是三极管则集电极开路)开路,在同一条线上有一个输入缓冲区,允许数据线用于双向传输数据。

pYYBAGORftaABrbPAAAAjgjvZ2U927.jpg

wKgaomaxmliAMerpAAAWIuaLQvo789.jpg

图2 IIC硬件接口

三角形代表输入缓冲器,准确的说该接口只能通过FET输出低电平,高电平依靠外部上拉电阻完成。

下图是该接口输出低电平的信号示意图,当需要输出低电平时,FET导通,VBUS下拉与GND连接,此时总线呈现低电平,如图中红色部分。

wKgZomaxmlmAHE49AABu9d-iWwo284.jpg

pYYBAGORftaABrbPAAAAjgjvZ2U927.jpg图3 输出低电平

当从机或主机希望发送逻辑高电平时,只能通过关闭下拉场效应管来释放总线。使得总线浮动,上拉电阻将把电压拉到电压轨,表现为高电平。

wKgZomaxmliAePAyAACBaV2Uyq4621.jpg

图4 输出高电平

02I2C通信

IIC总线是一个标准的双向接口,除非从机已被主机寻址,否则从机不能传输数据。IIC总线上的每个设备都有一个特定的设备地址,以区分同一IIC总线上的其他设备。许多从设备在启动时需要配置来设置设备的行为,通常是在主机访问从机的内部寄存器时完成。

物理IIC接口由串行时钟(SCL)和串行数据(SDA)线组成,SDA和SCL线路都必须通过上拉电阻连接到VCC。只有当总线空闲时才可以开始数据传输,如果SDA和SCL线在停止条件后都为高电平,则总线空闲。

先总体看下经典的IIC读、写器件寄存器时序,然后在具体分析起始位、停止位、应答、传输数据的SCL和SDA波形。

下图是主机通过IIC写从机寄存器数据的步骤,首先主机向从机发送起始位,然后发送7位从机器件地址,之后会发送一位读写操作信号,从机应答主机(ACK为低电平)后,向从机发送寄存器地址(这个寄存器地址为8位,但是有的器件可能会有16位或者24位寄存器地址,就需要发送三次这种时序)。等待从机应答之后,主机把需要写入寄存器的数据输出,等待从机应答后,主机发送停止条件,结束本次通信。注意不管是器件地址还是寄存器地址,亦或者是数据,都是先传输高位数据。

wKgZomaxmliAGpmhAADHSFuYe7c736.jpg

图5 IIC主机向从机寄存器写入数据

上图中灰色方块表示主机发送数据,白色表示从机发送数据。

下图是主机通过IIC读取从机寄存器数据的步骤,主机依次向从机发送起始位、器件地址、寄存器地址,等待从机应答之后,在次向从机发送起始信号,然后发送器件地址,此时读写位位高电平,表示读出数据,然后从机就会把该器件该寄存器地址的数据依次输出,数据接收完成后,主机向从机发送不应答指令(如果发送应答指令,则从机会把下个寄存器地址的数据继续输出到总线上,实现连续读取寄存器数据),然后发送停止位,完成寄存器数据的读取。

wKgaomaxmliAOH2XAADGoey8crc617.jpg

pYYBAGORftaABrbPAAAAjgjvZ2U927.jpg图6 IIC主机向从机寄存器读出数据

上图中灰色方块表示主机发送数据,白色表示从机发送数据。

在了解了读写寄存器的步骤后,在来查看IIC的一些细节时序,由于主机和从机都会在时钟SCL的高电平采集SDA的状态,因此在传输数据时,SDA在SCL的低电平的时候更新数据,在SCL高电平阶段尽量保持不变。

只有两种情况,SDA会在SCL的高电平期间电平发生变化,即起始位和停止位,时序图如下所示:

pYYBAGORftaABrbPAAAAjgjvZ2U927.jpg

wKgaomaxmliAHUndAAAg-Njjbb4216.jpg

图7 IIC通信的起始位和停止位时序图

起始位:SCL为高电平,SDA从高电平变为低电平表示起始位(因为空闲时SDA是高电平,SDA变为低电平代表开始传输数据)。

停止位:SCL为高电平时,SDA从低电平变为高电平表示停止位。

重复起始条件(图6中红色字体的时序):时序与起始条件一样,用于代替连续的停止然后开始条件。当总线未空闲时,主机希望启动新的通信,但不希望发送停止信号释放总线,就可以直接发送重复起始条件,开启信号通信。因为停止条件有可能使主机失去对总线的控制(在多主机环境中)。

如图8所示,在SCL的每个时钟脉冲期间传输一个数据位,每次传输8位数据后需要从机应。8位数据可以是设备地址、寄存器地址,也可以是写入或读取从机的数据。

数据首先传输最高有效位(MSB)。在START和STOP条件之间,可以将任意字节的数据从主机传输到从机。在传输数据过程中SDA必须在SCL低电平时更新状态,在SCL为高电平时SDA线上的数据必须保持稳定,因为当SCL高时,SDA的变化被解释为控制命令(START或STOP)。

wKgaomaxmliAaqJ0AABUfEhPwbg512.jpg

图8 单字节数据传输时序图

每个字节(包括地址字节)后面都有一个来自接收方的ACK位,ACK位允许接收方与发送方通信,表明该字节已成功接收,并且可以发送下一个字节数据。

在接收方发送ACK之前,发送方必须释放SDA线。如下图9所示,为了发送ACK位,接收方需要在ACK/NACK相关时钟周期(周期9)的低电平期间拉低SDA线,使SDA线在ACK/ NACK相关时钟周期的高相位稳定在低电平。设置和保持时间必须考虑在内。

wKgaomaxmliAb9JZAAC50c1GBbc414.jpg

图9 NACK波形

当SDA在与ACK/NACK相关的时钟周期内保持高位时,则不应答(NACK)。有几个条件会导致NACK的产生:

从机无法接收或发送,因为它正在执行一些实时功能,还没有准备好开始与主机通信。

在传输过程中,接收方接收到它不理解的数据或命令。

在传输过程中,接收方不能再接收任何数据字节。

主机读取从机寄存器数据后,通过NACK表示终止从机寄存器数据的读取。

03总结

IIC接口是开漏/开集输出的硬件接口,只能主动输出低电平。当需要输出高电平时,会释放总线(对外表现高阻态),被外部上拉电阻上拉到VCC,从而实现高电平,所以上拉电阻必须存在。

SDA在传输数据时只能在SCL的低电平期间变化,如果SCL为高电平,SDA从高电平变为低电平,则表示起始位或者重复起始位,SDA从低电平变为高电平则便是停止位。

每当传输一字节数据后,接收方需要产生一个应答位(ACK低电平表示应答),之后发送方才能传输下一字节数据。

在起始位和停止位之间,可以传输任意字节数据,数据可以是器件地址、寄存器地址、写入或读取从机的数据。

上述的总结来自于TI的IIC总线手册,需要该手册的可以在公众号后台回复“I2C手册”(不包括引号)。

声明:本文转载自数字站公众号

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

    关注

    2542

    文章

    50357

    浏览量

    750523
  • 寄存器
    +关注

    关注

    31

    文章

    5279

    浏览量

    119728
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1469

    浏览量

    122902
  • 串口
    +关注

    关注

    14

    文章

    1539

    浏览量

    75969
  • IIC总线
    +关注

    关注

    1

    文章

    66

    浏览量

    20267

原文标题:I2C基础协议详解

文章出处:【微信号:FPGA研究院,微信公众号:FPGA研究院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    I2C总线协议基础知识

    物理层的连接可以说是非常简单,这也是它最大的优势,原理就是通过控制SDA和SCL线的高低电平时序,来产生I2C总线协议所需要的信号进行数据传输。在总线处于空闲状态时SCL和SDA被上拉
    发表于 08-25 11:16

    i2c总线ppt(I2C总线器件应用)

    I2C总线器件应用第一节 I2C总线器件应用概述I2C总线工作原理
    发表于 08-13 17:34 0次下载

    I2C总线协议及其应用(图)

    I2C总线协议及其应用
    发表于 06-01 20:22 7017次阅读

    什么是i2c总线

    什么是i2c总线  下载请点击: i2c总线协议中文版 
    发表于 11-05 09:26 2903次阅读

    I2C总线协议及其应用

    I2C总线协议及其应用 一、I2C总线介绍: ---- 由于大规模集成电路技术的发展,在单个芯片集成CPU以及组成一个单独工作系统
    发表于 02-08 11:23 1541次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>总线</b><b class='flag-5'>协议</b>及其应用

    i2c总线协议(中文版pdf)

    i2c总线协议(中文版pdf),感兴趣的可以看看。
    发表于 02-26 16:47 0次下载

    i2c总线相关知识

    I2C总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线
    发表于 12-06 10:48 3495次阅读
    <b class='flag-5'>i2c</b><b class='flag-5'>总线</b>相关<b class='flag-5'>知识</b>

    I2C总线协议基础知识资料总结免费下载

    I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于I2C总线的工作原理与应用
    发表于 04-30 18:23 3次下载
    <b class='flag-5'>I2C</b><b class='flag-5'>总线</b><b class='flag-5'>协议</b>的<b class='flag-5'>基础知识</b>资料总结免费下载

    I2C总线基础知识

    如果用GPIO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。
    发表于 07-16 17:52 1900次阅读

    i2c总线用来做什么_i2c总线数据传输过程

    I2C总线控制器为微控制器或微处理器提供控制I2C总线的接口,它控制所有I2C总线的特殊序列、
    发表于 11-24 14:16 7180次阅读

    I2C总线协议英文资料

    I2C总线协议英文资料
    发表于 11-24 10:00 13次下载

    简述I2C总线协议

    I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来 产生I2C总线
    的头像 发表于 02-13 10:14 1374次阅读
    简述<b class='flag-5'>I2C</b><b class='flag-5'>总线</b><b class='flag-5'>协议</b>

    I2C串行总线协议是什么?I2C总线有哪些优点?

    I2C串行总线协议是什么?I2C总线有哪些优点? I2C(Inter-Integrated Ci
    的头像 发表于 09-12 11:18 1475次阅读

    I2C总线协议的工作原理和寻址格式

    I2C(Inter-Integrated Circuit)总线协议,即集成电路总线协议,是一种用于连接微控制器及其外围设备的串行
    的头像 发表于 05-27 15:47 1445次阅读

    I2C协议基础知识

    本文从I2C协议的概述开始,描述协议的历史、不同速度模式、物理层和数据帧结构,最后介绍I2C混合电压系统中电平兼容性以及上拉电阻大小计算。
    的头像 发表于 10-22 15:51 131次阅读
    <b class='flag-5'>I2C</b><b class='flag-5'>协议</b>的<b class='flag-5'>基础知识</b>