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

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

3天内不再提示

不理解i2C?现在来教你

瞿小洲 来源:jf_33322995 作者:jf_33322995 2024-07-10 09:26 次阅读

I2C(Inter-Integrated Circuit,集成电路总线)是一种简单、双向、二线制的串行通信总线,由Philips半导体公司(现在的NXP半导体公司)在八十年代初设计出来。它以通俗易懂的方式解释如下:

基本概念

双向二线制:I2C总线只使用两根线——一根数据线(SDA)和一根时钟线(SCL),就可以实现数据的双向传输。这种设计使得连接设备变得非常简单和节省空间。

串行通信:数据不是同时传输多个比特(并行通信),而是按顺序一个接一个地传输(串行通信)。这虽然降低了传输速度,但简化了硬件设计。

wKgaomaN4w2AaeUYAABSst5mEgU628.png

工作原理

SCL为高电平的时候,SDA由高电平向低电平跳变。SCL为高电平的时候,SDA由低电平向高电平跳变。

I2C总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功,对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。如果接收器是主控器,则在它收到最后一个字节后,发送一个NACK信号,以通知被控发送器结束数据发送,并释放SDA线,以便主控接收器发送一个停止信号P。

主机+从设备地址+写命令,从机应答,应答成功,表示有这个设备,然后主机+设备内部寄存器地址,此时不用再加写命令控制字,从机应答,应答成功,表示设备内有这个地址,主机写入数据,从机应答,是否继续发送,不发送的话,发送停止信号P。

要想读设备,首先要知道将要所读取设备的地址告诉从设备,从设备才能将数据放到(发送)SDA上使主设备读取,从设备将数据放入SDA上的过程,由硬件主动完成,不用人为的写入。所以首先先写入从机地址,然后+写控制命令,从机应答,应答成功,表示有这个设备,然后写入内部寄存器地址,此时不用再加写命令控制字,从机应答,应答成功,表示设备内有这个地址。然后主机继续发出:写入从机地址,然后+读命令,从机应答,应答成功,此时便可以读取数据了,从设备已经将数据放入到SDA上了。地址跟设备已经验证了,不用再进行验证。

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

为了支持您的项目开发需求,我们特别准备了详尽的开发资料(有例程)。若您对此感兴趣,并希望获得这些资源以助力您的项目进展,欢迎添加我的微信(限前50位:xinsousou 会亲自解答)。我将免费为您发送这些资料,希望能为您的开发工作带来便利与启发。

总线封锁状态

在特殊情况下,如果需要禁止所有发生在I2C总线上的通信活动,封锁或关闭总线是一种可行途径,只要挂接于该总线上的任意一个器件将时钟线SCL锁定在低电平上即可。

总线竞争的仲裁

总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况,这种情况叫做总线竞争。I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位的比较,从而确保了竞争仲裁的可靠性。由于是利用I2C总线上的信息进行仲裁,因此不会造成信息的丢失。

为何识别到“0”将丢失仲裁呢?因为对于OD门,只能驱动到低电平,释放总线只能通过不驱动总线释放,停止驱动即产生“1”,但是发现总线还是“0”,这说明还有主机在跟自己竞争总线使用权,自己线驱动到“1”,确检测到“0”,那代表自己已经失去了仲裁。

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

当SCL 线是高电平时,仲裁在SDA 线发生;这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。然后,进一步获得其的判定条件:

仲裁可以持续多位。首先是比较地址位。如果每个主机都试图寻址同一的器件,仲裁会继续比较数据位(假设主机是发送器),或者比较响应位(假设主机是接收器)。

I2C 总线的地址和数据信息由赢得仲裁的主机决定,在仲裁过程中不会丢失信息。丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾。

在串行传输过程中时,一旦有重复的起始条件或停止条件发送到I2C 总线的时侯,仲裁过程仍在进行。如果可能产生这样的情况,有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件。

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

I2C 总线的控制只由地址或主机码以及竞争主机发送的数据决定,没有中央主机,总线也没有任何定制的优先权。

通信过程

起始信号:当SCL为高电平时,SDA由高电平向低电平跳变,表示通信开始。

发送地址:主机发送一个字节的数据,其中包含了从机的地址和后续字节的传送方向(读或写)。

从机应答:从机在接收到地址后,如果地址匹配,则在第9个时钟周期将SDA拉低以应答;如果不匹配或无法应答,则保持SDA为高电平。

数据传输:在确认从机应答后,主机开始发送或接收数据。每个字节的数据后面都跟着一个应答位,以确保数据传输的可靠性。

结束信号:当数据传输完成后,主机发送停止信号来结束通信。停止信号是在SCL为高电平时,SDA由低电平向高电平跳变。

时序图

wKgaomaN4mKACo6_AAFtVWZmlIY248.png

I2C总线因其简单性和灵活性而被广泛应用于各种电子设备中,如连接传感器、存储器、显示屏等外设到微控制器微处理器上。它特别适用于需要多个设备共享通信线并由一个(或多个)主设备管理的场景。

总结

I2C是一种简单、双向、二线制的串行通信总线,通过两根线(SDA和SCL)实现数据的双向传输。它采用主从架构和时钟同步机制来确保数据的可靠传输。由于其简单性和灵活性,I2C总线在电子设备中得到了广泛应用。

审核编辑 黄宇

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

    关注

    39

    文章

    1127

    浏览量

    81705
  • 总线
    +关注

    关注

    10

    文章

    2805

    浏览量

    87630
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1445

    浏览量

    122065
收藏 人收藏

    评论

    相关推荐

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

    等特点,在嵌入式系统设计中得到了广泛应用。本文将详细介绍I2C总线协议的工作原理和寻址格式,帮助读者深入理解该协议。
    的头像 发表于 05-27 15:47 1086次阅读

    什么是I2C协议 I2C总线的控制逻辑

    在实际使用过程中,I2C比较容易出现的一个问题就是死锁 ,死锁在I2C中主要表现为:I2C死锁时表现为SCL为高,SDA一直为低。
    发表于 03-12 09:17 568次阅读
    什么是<b class='flag-5'>I2C</b>协议 <b class='flag-5'>I2C</b>总线的控制逻辑

    GD32 MCU硬件I2C不可靠不如软件I2C?来看看红枫派开发版的硬件I2C驱动如何做到稳得一批

    在一个评论中,看到网友对硬件I2C的讨论,硬件I2C Busy找不到原因、软件I2C稳得一批。
    的头像 发表于 02-23 09:37 2152次阅读
    GD32 MCU硬件<b class='flag-5'>I2C</b>不可靠不如软件<b class='flag-5'>I2C</b>?来看看红枫派开发版的硬件<b class='flag-5'>I2C</b>驱动如何做到稳得一批

    i2c工作原理及使用方法

    I2C(Inter-Integrated Circuit)是一种串行通信协议,用于在集成电路(IC)之间传输数据。它由Philips公司(今天的NXP半导体)于1982年开发,现在已经成为一种通用
    的头像 发表于 12-19 16:17 920次阅读

    I2C地址跳变问题的调试案例

    引言:I2C作为使用最为广泛的通讯接口,调试各类I2C器件,大家应该都很轻车熟路。一般对于外挂电阻配置器件的I2C地址,例如电阻上拉之后,器件的地址就会固定下来不再变动,但是今天给大家分享一个自己的调试案例,即
    的头像 发表于 11-22 10:51 1081次阅读
    <b class='flag-5'>I2C</b>地址跳变问题的调试案例

    I2C总线信号与测试案例(一)

    I2C bus是Inter-IC bus的缩写,意思是IC器件之间的通讯总线;I2C 总线的特点如下
    的头像 发表于 11-20 15:45 1431次阅读
    <b class='flag-5'>I2C</b>总线信号与测试案例(一)

    I2C总线—电平转换

    我们先来看一张图,熟悉I2C的人一看,这不是I2C的level shifter电路嘛,在Philip的I2C标准里面有,没有啥复杂的。
    的头像 发表于 11-02 12:32 3613次阅读
    <b class='flag-5'>I2C</b>总线—电平转换

    I2C总线学习笔记

    I2C在小P以前接触的设计中大多只用到400k的速率,EVB的设计中更经常发现实现不了就降速到100k。现在突然再看看I2C,发现原来还有更高的速率规范,最高都已经到5M了。
    的头像 发表于 10-25 14:35 1218次阅读
    <b class='flag-5'>I2C</b>总线学习笔记

    I2C总线原理详解

    I2C两线式串行总线通讯协议,它是由飞利浦开发的,主要用于连接微控制器及其外围设备之间,它是由数据线SDA和信号线SCL构成的,可发送和接收数据即在MUC和I2C设备之间,I2CI2C
    发表于 10-18 17:20 1857次阅读
    <b class='flag-5'>I2C</b>总线原理详解

    I2C总线介绍 I2C读写时序介绍

    作为嵌入式开发人员,无论是硬件还是软件工程师,或多或少都会接触过I2C接口的外设。诸如常用的存储器EEPROM等皆是I2C接口进行通信。
    发表于 10-01 16:57 1859次阅读
    <b class='flag-5'>I2C</b>总线介绍 <b class='flag-5'>I2C</b>读写时序介绍

    I2C读写时序分析和实现思路

    上篇推文对I2C总线的特性进行了介绍和描述。对于开发者而言,最重要的是编码I2C的读写时序驱动。本篇推文主要总结和分享I2C总线主机端通信的编程实现思路,并不对应特定MCU的硬件I2C
    发表于 10-01 16:54 1255次阅读
    <b class='flag-5'>I2C</b>读写时序分析和实现思路

    i2c采样是上升沿吗?

    i2c采样是上升沿吗?  I2C采样是指在I2C总线上对数据进行采样。在I2C总线上,数据的传输是通过2条线传递。一条是时钟线(SCL),另
    的头像 发表于 09-19 17:16 1974次阅读

    什么是串口转I2C?有什么特点?

    信号转换为I2C信号,从而可以使用I2C协议与其他设备进行通信。 串口转I2C的特点 1. 易用性 串口转I2C通常是一个易于使用的设备。大多数串口转
    的头像 发表于 09-14 17:52 1066次阅读

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

    I2C串行总线协议是什么?I2C总线有哪些优点? I2C(Inter-Integrated Circuit)是一种串行总线协议,由Philips(现为NXP Semiconductors公司)在
    的头像 发表于 09-12 11:18 1268次阅读

    如何解决I2C器件死锁的问题?

    如何解决I2C器件死锁的问题? I2C总线是一种流行的串行通信协议,在许多嵌入式系统中使用。I2C可以连接多个从属设备到一个主控设备上,简化了系统设计和管理。然而,当I2C总线上的从属
    的头像 发表于 09-12 11:18 2009次阅读