当前位置:首页 > 模拟 > 模拟技术
[导读]在电子设计开发中I2C大家已经很熟悉了,每一种电子产品小到电子开关,大到卫星通信都会利用的I2C总线。据统计I2C在电子产品中占据了93%的份额,几乎任何一种电路都要使用。

在电子设计开发中I2C大家已经很熟悉了,每一种电子产品小到电子开关,大到卫星通信都会利用的I2C总线。据统计I2C在电子产品中占据了93%的份额,几乎任何一种电路都要使用。

I2C是由PHILIPS公司在1980年开发的两线式串行总线,至今已经发展30多年的历史了。古老的电子产品中就已经在使用I2C总线了。I2C总线在所有总线中是最简单,最稳定的一种,由于发展历史久远,所以I2C总线出现了多种版本。但是万变不离其中,有的厂商甚至在原有I2C总线的基础上,自己改变了总线时序,成为独有的I2C。但是基本原理不变。我遇到过很多人在问我,自己的I2C程序明明已经调试好,可换了个芯片就通信失败了,不能读取数据了。都是I2C的元器件,只是芯片厂家不同。在这里我告诉大家,这总线历史悠久,各种版本的要有几十种甚至几百种了,所有版本的通信格式,协议都一样,只是时间不同了,因为有的芯片厂家更改了时序中的时钟周期。所以大家遇到这种问题,只需调整延时,其余不动即可,不必不知所措,乱找问题。

I2C总线从机设备最多支持127个,主要是通过串行数据(SDA)线和串行时钟 (SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址。

I2C总线有三种数据传输速度:标准,快速模式和高速模式。标准的是100Kbps,快速模式为400Kbps,高速模式支持快至3.4Mbps的速度。所有的与次之传输速度的模式都是兼容的。I2C总线支持7位和10位地址空间设备和在不同电压下运行的设备。

TTL电平与COMS在I2C这里通用。是相互兼容的。

由于I2C的模式多种多样,我就给大家讲一种常用的7位寻址模式的通信,还有10位模式,大家可以自行找资料去了解,这种10位模式的较少。

总线通信流程大概分为四部分。1.启动—2.数据传输—3.应答—4.结束。

启动与结束:

SCL 线是高电平时,SDA 线从高电平向低电平切换,这个情况表示起始条件;

SCL 线是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件。

数据传输:

发送到SDA 线上的每个字节必须为8 位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL 保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL 后数据传输继续。

SDA仲裁

SDA仲裁

SDA线的仲裁也是基于总线具有线路 "AND "逻辑功能的原则。节点发送1位数据后,比较总线上呈现的数据是否与它发送的内容一致(类似于CAN总线的回读机制),一致继续发送否则退出竞争。SDA线的仲裁可以确保I2C总线系统正常通信,当多个主节点试图同时控制总线时,数据不会丢失。总线系统通过仲裁只允许一个主节点继续占用总线。

仲裁过程

DATA1和DATA2分别是主节点发送给总线的数据信号,SDA是总线上呈现的数据信号,SCL是总线上呈现的时钟信号。当主节点1和2同时发送启动信号时,两个主节点都发送高电平信号,这时,总线上的信号为高电平,两个主节点检测到总线上的信号与自己发送的信号相同,继续发送数据。在第二个时钟周期,两个主节点都发送低电平信号,总线上呈现的信号为低电平,继续发送数据。在第3个时钟周期,主节点1发送一个高电平信号,而主节点2发送一个低电平信号,根据总线的 "AND "线的逻辑功能,总线上的信号是低电平。这时,主节点1检测到总线上的数据与自己发送的数据不同,并断开数据的输出阶段,转向从机接收状态,这样主节点2赢得了总线数据没有丢失,即总线上的数据与主节点2发送的数据相同,主节点1转为从节点后继续接收数据,也没有丢失SDA线。因此在仲裁过程中,数据不会丢失。

小结:SDA仲裁和SCL时钟同步处理不是顺序进行的,而是同时进行的。在实际使用中,I2C很容易出现死锁。有两种常见的情况会发生死锁:

一种情况是,当从属设备回复ACK时,主设备异常复位。

另一种情况是,当从属设备回复的数据位为0时,主设备异常复位。

这两种情况的相同点是,当主设备被异常复位时,SDA处于被从属设备拉低的状态,而SCL在主设备复位后处于VOH(空闲状态)。此时,从设备将等待主设备将SCL拉低,以获取ACK或数据位,而主设备将等待从设备释放SDA线。主设备和从设备互相等待,在空中互相对视,进入死锁状态。

下面是一些解决死锁问题的常用方法:主设备检测到SDA线后,从设备就会释放SDA线。

主设备检测到SDA被拉低超过一段时间后,会主动复位从设备释放SDA。这种方法的前提是,从属设备有一个复位引脚,MCU可以控制从属设备的复位引脚使其复位。

在主设备检测到SDA被拉低超过一段时间后,它向时钟总线推送9个时钟,并占用从属设备的ACK位,这样从属设备就会释放SDA到一个VOH。

在主设备和从设备之间串联一个I2C缓冲器,它可以自动检测死锁情况。当检测到死锁时,它将主动断开与主设备的连接,并向从设备发送9个时钟。在从属设备释放SDA线后,它将重新与主设备建立连接。

I2C死锁问题不能从根本上避免,除了由MCU的异常复位引起的I2C死锁外,在正常的通信过程中,从属设备也可能异常地拉下SDA而引起死锁。因此,当死锁发生时,软件应设计成能够从死锁中恢复,从而使I2C通信能够继续。

CORPORATE CULTURE 时钟拉伸

时钟拉伸

什么是I2C时钟拉伸?在I2C的主从通信过程中,总线上的SCL时钟总是由主站产生和控制,但如果从站不能跟上主站的速度,I2C协议规定从站可以拉低SCL时钟线。传输会暂停,直到从机释放SCL线,然后继续传输。

时钟拉伸是从属设备的一个可选配置。如果不启用,从机不能控制SCL;如果启用,从机可以通过强行将SCL拉低来降低传输速度。在SCL为VOL的期间,主机只能等待从机释放SCL。

CORPORATE CULTURE

重复启动

有时,主站需要在一次通信中进行多次信息交换,如与不同的从站传输信息,或切换读写操作,而又不想在此期间被其他主站干扰,那么可以使用 "重复启动条件"--在一次通信中,主站可以产生多个启动条件来完成多个信息交换,最后产生一个停止条件来结束整个通信过程。由于在此期间没有停止条件,所以主站一直占据着窃听器,而其他主站无法切换进来。


322290bc-ddf5-11ed-bfe3-dac502259ad0.png

CORPORATE CULTURE

下面是UART、I2c和SPI之间的区别


322fe4d8-ddf5-11ed-bfe3-dac502259ad0.png

你可能想知道,这三种通信方式中哪一种是最好的?是UART、I2C,还是SPI?

实际是没有最好的通信外设,每个通信外设都有自己的优点和缺点。

因此,用户应该选择最适合他们项目的通信外设。例如,如果你想要最快的通信外设,SPI将是最理想的。另一方面,如果用户想连接多个设备而又不太复杂,I2C将是最理想的,因为它可以连接多达127个设备,而且易于管理。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭