I2C原理简介及那些坑
I2C总线工作原理

I2C总线工作原理I2C是一种串行通信总线,常用于连接主控制器和外设设备之间。
I2C总线通过低速的串行数据传输,可同时连接多个设备,使用双线(SDA和SCL)来进行通信。
本文将详细介绍I2C总线的工作原理。
1.物理层:I2C总线包含两条线路:数据线(SDA)和时钟线(SCL)。
SDA线用于数据传输,而SCL线用于同步数据传输的时钟信号。
这两条线都由一个上拉电阻连接到正电源,以保持高电平状态。
当总线上的设备需要发送数据时,它将拉低SDA线上的电平。
在同一时间,SCL线上的电平将控制数据的传输速率。
2.起始信号和停止信号:I2C总线使用起始信号和停止信号来定义数据传输的开始和结束。
起始信号是由主控制器发送的,通常在主控制器要发送数据之前。
停止信号也是由主控制器发送的,在数据传输完成后。
起始信号由将SCL线保持高电平,SDA线从高电平跳变到低电平。
停止信号是在SCL线保持高电平,SDA线从低电平跳变到高电平。
3.地址和数据传输:在I2C总线上,每个设备都有一个唯一的7位地址,用于寻址特定的设备。
主控制器在发送数据之前,必须先向设备发送一个地址字节。
地址字节由起始信号之后的8个位组成(其中最高位为0用于读操作,1用于写操作)。
设备在成功接收到其地址之后,将向主控制器发送一个应答位。
4.字节传输:一旦设备的地址被成功接收,主控制器可以开始发送数据字节。
数据字节的传输遵循以下步骤:-主控制器发送一个数据字节-设备接收到数据字节并发送一个应答位-主控制器发送下一个数据字节-设备接收到数据字节并发送一个应答位-重复以上步骤,直到所有数据字节都被传输完成5.应答信号:每当主控制器发送一个应答请求时,设备都应该发送一个应答位来确认数据的接收情况。
应答位是一个低电平脉冲,由设备在接收到数据字节后发送。
如果设备成功接收到数据字节,则发送一个低电平的应答位。
若设备遇到错误或无法接收数据,则发送一个高电平的非应答位。
6.时钟同步:I2C总线的数据传输是由SCL线上的时钟信号进行同步的。
I2C工作原理范文

I2C工作原理范文I2C(Inter-Integrated Circuit)是一种串行通信协议,用于在集成电路之间进行通信。
它由Philips公司(现在是恩智浦半导体公司)于1982年推出,并已广泛应用于各种电子设备和嵌入式系统中。
I2C的工作原理如下:1.总线拓扑结构:I2C使用两根线进行通信,一根是串行数据线(SDA),另一根是串行时钟线(SCL)。
所有I2C设备都连接到同一条总线上,并且每个设备都有一个唯一的7位地址。
2. 主从模式:I2C通信分为主设备(Master)和从设备(Slave)。
主设备是发起通信的一方,负责控制总线上的通信。
从设备则是被动接收和响应来自主设备的命令或数据。
3. 起始信号和停止信号:I2C通信始于主设备发送一个起始信号(Start)和一个从设备地址。
起始信号告诉所有从设备,接下来的通信将是针对一些特定从设备的。
停止信号(Stop)则标志着一次通信的结束。
4.寄存器读写:主设备通过发送一个从设备地址和一个读/写位来指定是读取还是写入数据。
在写入模式下,主设备发送数据字节到从设备;在读取模式下,主设备请求从设备发送数据字节。
5.硬件应答:在每个字节的传输结束后,接收方(主设备或从设备)都会返回一个应答位。
如果接收方成功接收到了字节,则返回一个低电平的应答位;否则,返回一个高电平的非应答位。
6.时钟同步:I2C通信的时钟由主设备控制。
主设备在SCL线上产生时钟信号,而从设备则根据这个信号来同步自己的时钟。
总的来说,I2C通信是通过主设备发起的,它控制总线上的通信流程和时钟信号。
从设备根据主设备发送的命令或数据来执行相应的操作,并通过应答位来确认是否成功接收到数据。
这种通信协议适用于多个设备之间进行简单的数据交换和控制操作。
I2C的优点是可以同时连接多个设备,并且只需要两根线就能实现通信。
这大大减少了总线的复杂性和成本。
同时,I2C还具有可靠性高、速度适中、容错能力强等特点,使得它成为了很多电子设备中主要的串行通信协议之一总之,I2C是一种简单、灵活且可靠的串行通信协议。
i2c协议仲裁机制

i2c协议仲裁机制摘要:1.I2C 协议概述2.I2C 协议的仲裁机制3.I2C 协议仲裁机制的优点4.I2C 协议仲裁机制的局限性5.总结正文:1.I2C 协议概述I2C(Inter-Integrated Circuit)协议是一种串行通信协议,主要用于在微控制器(MCU)和周边设备(如EEPROM、LCD 显示器等)之间进行低速通信。
I2C 协议的主要特点是主从模式、两线制通信、设备地址和数据传输方向。
2.I2C 协议的仲裁机制在I2C 总线上,可以连接多个设备。
当多个设备同时尝试在总线上发送数据时,就会产生冲突。
为了解决这个问题,I2C 协议引入了仲裁机制。
仲裁机制主要通过设备地址和数据传输方向来避免冲突。
(1)设备地址:I2C 协议为每个设备分配一个唯一的地址,地址范围从0 到127。
设备地址越小,优先级越高。
当多个设备同时尝试发送数据时,具有更高地址的设备会等待较低地址的设备发送完毕后再发送数据。
(2)数据传输方向:I2C 协议规定,数据传输方向由主设备控制。
当主设备向从设备发送数据时,从设备不得同时向主设备发送数据。
这样可以避免数据冲突。
3.I2C 协议仲裁机制的优点I2C 协议的仲裁机制有效地解决了多设备共享总线时的冲突问题,使得I2C 总线可以连接更多的设备。
同时,仲裁机制简化了总线控制,降低了系统设计的复杂性。
4.I2C 协议仲裁机制的局限性虽然I2C 协议的仲裁机制有效地解决了多设备冲突问题,但在某些情况下,仍然可能出现仲裁失败。
例如,当主设备发送数据时,从设备错误地认为总线空闲并尝试发送数据,就会导致仲裁失败。
此外,当I2C 总线上连接的设备数量过多时,仲裁机制的效率可能会降低。
5.总结I2C 协议的仲裁机制有效地解决了多设备共享总线时的冲突问题,使得I2C 总线可以连接更多的设备。
i2c的基本工作原理

I2C(Inter-Integrated Circuit)是一种串行通信协议,用于在芯片之间进行数据传输。
它由飞利浦半导体(现在的恩智浦半导体)于1982年开发,并广泛应用于各种电子设备中。
I2C具有简单、高效和可靠的特点,成为众多芯片和模块之间常用的通信接口之一。
本文将详细介绍I2C的基本工作原理。
一、总线架构I2C采用了主从结构的总线架构,其中主设备(Master)负责发起数据传输请求,而从设备(Slave)则在接收到请求后进行响应。
一个I2C总线上可以连接多个从设备,每个从设备都有一个唯一的地址。
主设备通过发送起始信号(Start)来启动通信,然后选择要与之通信的从设备地址,最后发送停止信号(Stop)结束通信。
二、物理层I2C使用双线制进行数据传输,包括数据线(SDA)和时钟线(SCL)。
数据线上的信号是双向的,用于传输数据。
时钟线则由主设备控制,用于同步数据传输。
三、起始和停止信号I2C通信以起始信号(Start)和停止信号(Stop)来标识通信的开始和结束。
起始信号由主设备产生,它表示将要发起一次新的通信。
停止信号同样由主设备产生,表示一次通信的结束。
四、数据传输格式I2C采用了基于字节的数据传输格式。
每个字节都由8位二进制数据组成,包括7位数据位和1位数据方向位。
数据方向位为0表示发送数据,为1表示接收数据。
在每个字节的传输过程中,都会先发送数据方向位,然后再发送数据位。
五、时钟同步I2C使用时钟同步机制来确保通信的准确性。
时钟线由主设备产生,并控制整个数据传输过程的时序。
在每个时钟周期中,数据线上的数据必须稳定,并且只有在时钟线为低电平时才能改变。
六、地址传输在I2C通信中,每个从设备都有一个唯一的7位地址。
主设备通过发送地址来选择要与之通信的从设备。
地址由8个位组成,最高位是固定的0或1,用于表示读(1)或写(0)操作。
其余的7位用于指定从设备的地址。
七、数据传输流程I2C通信的数据传输流程如下:1. 主设备发送起始信号(Start)。
i2c的工作原理

i2c的工作原理1. 引言i2c是一种串行通信接口,被广泛应用于各种电子设备之间的通信。
本文将详细介绍i2c的工作原理。
2. i2c的概述i2c是Inter-Integrated Circuit的缩写,最早由飞利浦公司(现在的恩智浦公司)在1980年代开发并推出。
它采用2根传输线(即SDA和SCL),用于在多个设备之间进行数据传输。
i2c具有简单、低成本、高可靠性的特点,非常适合中小规模的系统集成。
3. i2c的物理层i2c的物理层采用比特传输技术,即通过不同电平来表示不同的值。
在i2c中,SDA线是串行数据线,SCL线是串行时钟线。
这两根线通过上拉电阻连接到VCC,通常在3V到5V之间。
3.1 时钟同步i2c通信采用主从模式,由一个主设备控制通信的起始和停止。
主设备通过控制SCL线的电平变化来同步通信。
当主设备将SCL线拉低时,通信开始;当主设备释放SCL线时,通信停止。
所有的从设备在SCL线上都能感知到这些时钟变化。
3.2 数据传输i2c的数据传输通过在SDA线上传输二进制数据来实现。
每个数据位都在SCL时钟的边沿传输,当时钟从低电平变为高电平时,数据被采样。
4. i2c的工作机制i2c的工作机制可以分为地址传输阶段和数据传输阶段。
4.1 地址传输阶段在i2c通信开始时,主设备首先发送一个地址和读/写位,用于指定要访问的从设备。
地址是从设备在总线上的唯一标识。
读/写位用于指示主设备是要将数据发送给从设备还是从从设备读取数据。
4.2 数据传输阶段在地址传输阶段之后,主设备和从设备可以进行数据传输。
数据传输可以分为两种模式:主设备发送数据和主设备读取数据。
4.2.1 主设备发送数据在主设备发送数据时,它将数据逐位地发送到SDA线上,并由SCL线上的时钟同步。
1.主设备拉低SDA线,将第一个数据位(即最高位)发送到总线上。
2.主设备通过改变SCL线的电平来同步通信。
3.从设备在SCL线的上升沿采样数据位。
i2c总线协议的工作原理详解

i2c 总线协议的工作原理详解一、概述1、I2C 总线只有两根双向信号线。
一根是数据线SDA,另一根是时钟线SCL。
SCL:上升沿将数据输入到每个EEPROM 器件中;下降沿驱动EEPROM 器件输出数据。
(边沿触发)SDA:双向数据线,为OD 门,与其它任意数量的OD 与OC 门成\ 线与\关系。
I2C 总线通过上拉电阻接正电源。
当总线空闲时,两根线均为高电平(SDL=1;SCL=1)。
连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA 及SCL 都是线与关系。
2、主设备与从设备系统中的所有外围器件都具有一个7 位的\从器件专用地址码\,其中高4 位为器件类型,由生产厂家制定,低3 位为器件引脚定义地址,由使用者定义。
主控器件通过地址码建立多机通信的机制,因此I2C 总线省去了外围器件的片选线,这样无论总线上挂接多少个器件,其系统仍然为简约的二线结构。
终端挂载在总线上,有主端和从端之分,主端必须是带有CPU 的逻辑模块,在同一总线上同一时刻使能有一个主端,可以有多个从端,从端的数量受地址空间和总线的最大电容400pF 的限制。
主端主要用来驱动SCL line;从设备对主设备产生响应;二者都可以传输数据,但是从设备不能发起传输,且传输是受到主设备控制的。
二、协议1.空闲状态I2C 总线总线的SDA 和SCL 两条信号线同时处于高电平时,规定为总线的空闲状态。
此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
2.起始位与停止位的定义:起始信号:当SCL 为高期间,SDA 由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。
停止信号:当SCL 为高期间,SDA 由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。
起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。
i2c协议仲裁机制

i2c协议仲裁机制摘要:I2C 协议仲裁机制1.I2C 协议简介2.I2C 协议仲裁机制的作用3.I2C 协议仲裁机制的工作原理4.I2C 协议仲裁机制的优缺点5.应用案例正文:I2C(Inter-Integrated Circuit)协议,又称为两线制串行通信协议,是一种串行通信总线,广泛应用于各种电子设备之间的低速通信。
I2C 协议仲裁机制是保证多个设备在总线上进行通信时,能够高效、有序地完成数据传输的关键。
1.I2C 协议简介I2C 协议是一种串行通信协议,它只需要两根信号线即可实现设备之间的通信,分别是数据线(SDA)和时钟线(SCL)。
I2C 协议支持多个设备连接在同一条总线上,设备之间可以进行地址识别和数据传输。
2.I2C 协议仲裁机制的作用I2C 协议仲裁机制的主要作用是在多个设备同时发送数据时,保证数据传输的有序进行,防止数据冲突。
通过仲裁机制,设备能够确定发送数据的顺序,确保数据传输的可靠性。
3.I2C 协议仲裁机制的工作原理I2C 协议仲裁机制的工作原理主要基于总线上的电平。
在数据传输过程中,设备会根据总线上的电平情况来判断是否可以发送数据。
当总线上的电平为高电平时,设备会认为总线空闲,可以发送数据;当总线上的电平为低电平时,设备会认为总线上有其他设备正在发送数据,此时设备需要等待,直到总线空闲再发送数据。
4.I2C 协议仲裁机制的优缺点优点:- 简单易用:I2C 协议仲裁机制基于电平判断,不需要复杂的逻辑电路。
- 支持多设备通信:I2C 协议可以连接多个设备,实现多设备间的通信。
缺点:- 通信速度受限:由于I2C 协议仲裁机制基于电平判断,当总线上的设备数量较多时,电平判断的延迟会影响通信速度。
- 可能出现数据冲突:在多个设备同时发送数据时,仲裁机制不能完全保证数据传输的有序性,可能导致数据冲突。
5.应用案例I2C 协议仲裁机制广泛应用于各种电子设备,如微控制器、存储器、传感器等。
I2C详解

I2C详解1 I2C接口简介I2C全称:Inter-Integrated Circuit,是一种同步、半双工的通信总线。
同步:发送接收端要严格同步,一般有同步时钟线。
半双工:I2C只有一条数据线,所以master发数据与收数据不能同时进行。
I2C通信速率:模式速率标准模式100 kbps快速模式400 kbps高速模式3.4 MbpsI2C诞生的背景:最初的嵌入系统是使用内存映射(memory-mapped I/O)的方式来互连微控制器和外围设备的。
要实现内存映射,设备必须并行连入微控制器的数据线和地址线,也就意味着:如果要连接一款新的外围设备,需在设计芯片时候确定好。
所以很不灵活并且成本高。
1982年,Philips实验室开发了I2C,方便CPU与外设之间通信。
1.1 I2C原理简介我理解的是:I2C设计时的理念是:信号线尽量少并且速率要尽量高。
信号线少,可以减少引脚占用,这对早期的芯片(引脚很少)的很重要。
当然,如果单纯说减少信号线,1-wire总线只使用1根线通信(比如DS18B20、DHT11等都是使用这种协议),但是1-wire总线是异步通信,所以1-wire总线速率不可能太高(1-wire总线传输速率一般为16.3Kbit/s,最大可达142 Kbit/s,通常情况下采用100Kbit/s 以下的速率传输数据)。
标准的I2C需要两根信号线:SCL(Serial Clock):时钟线,时钟都是有master提供的SDA(Serial Data):双向数据线,发数据或者收数据(收发不能同时)I2C多master多slave示意图:图中是2个master+2个slave的示意,同一时刻只有一个master 与一个slave通信。
若想实现这个效果:1 多个master-slave 时钟、数据线连在一起,需要实现信号的“线与”逻辑(所以SDA、SCL 被设计为漏极开路结构,外加上拉电阻实现“线与”)2 需要实现“时钟同步”和“总线仲裁”,引脚在输出信号的同时还能对引脚上的电平进行检测,检测是否与刚才输出一致,为“时钟同步”和“总线仲裁”提供硬件基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一般情况下, i2c 设备焊接没什么问题,按照设备手册一步步来,基本上就顺风顺水能够用起来。
如果这么一个简单的东西,有时候想要的结果死活不出来,反复的检查问题的原因,查询解决办法,核查设备的数据手册,甚至发送和接收的每一条命令与数据都知道是什么意思,仍然无法解决问题,那该怎么办呢?
本文主要针对 i2c 设备,讲解如何解决 i2c 设备主机与从机直接无法正常数据交互的问题,侧重点是针对硬件设计不太合理、i2c 设备设计不标准导致总线故障的情况,并且通过分析现象,提出解决方案。
对于在设备初始化中,没有设置相应的寄存器或者发送命令,而导致的无法获取想要的数据情况,不作详细介绍。
1 i2c 基本用法
i2c 总线是一种简单、双向二线制同步串行总线。
所有主机在 SCL
线上产生它们自己的时钟来传输总线上的报文,SDA 线传输每个字节必
须为 8 位,每次传输可以发送的字节数量不受限制,每个字节后必须跟
一个响应位。
在空闲状态时,SCL 与 SDA 均为高电平。
通常一些低功耗 i2c 设备,芯片引脚使用上拉输出即可满足与其正
常数据交互,还有一些 i2c 设备,则需要在总线上外加一个上拉电阻,
此时相应的 I/O 配置成开漏输出,其他的按照芯片手册进行标准配置。
2 硬件问题汇总
2.1 无法正常拉高拉低引脚
首先确定 SDA 与SCL 引脚能够被拉高、拉低,检测方式直接软件控
制 I/O 口输出引脚低电平/高电平,测量引脚电压是否能够随着芯片引
脚的设置输出相应的状态。
如果不能被拉低,检测虚焊、上拉电阻断开、i2c 设备是否正常、
芯片引脚是否损坏等问题,确保能够正常被拉高或者拉低。
2.2 电气特性无法满足
如果正常拉高、拉低的情况下,依然无法正常读取数据。
通常建
议,根据负载电流更换小阻值的电阻。
如果需要详细知道原因,就具体查询 i2c 设备电气特性。
大多数
i2c 设备电气特性,大致下图所示
通常这块内容在 i2c 设备电气特性这一块,主要讲解电平拉高拉低的最长时间、最短时间,以及处于高电平与电平的阈值与持续时间等等内容。
硬件设计,为了降低单片机的功耗与保护芯片引脚,在满足负载电流和负载电容相关要求的前提下,阻值设置通常比较大。
如果同一个总线上挂载多个 i2c 设备,即使在 I/O 口配置正确的前提下,也会导致驱动能力不足。
现象是拉高电压不足,在拉高、拉低过程中消耗时间过长。
这两个问题通常还引起数据线与时钟线:拉高时,高电压持续时间过短;拉低时,低电压持续时间过短。
用示波器抓取图形:从波形上看,显示是尖波、斜波、杂波等不符合 i2c 设备电气特性的波形;从数据上看,数据线高电平持续时间过小,上升沿时间过长,下降沿时间过长等等数据超出设备电气特性的有效值。
典型杂波图,如下所示
如果出现此类异常,建议更换小一点的电阻,用来增强总线驱动能力,提高电平转换速度。
应当注意的是每个 MCU 的耐受电流不一样,减小电阻应避免超过相应引脚承受电流的最大值。
3 SDA 死锁
如果i2c 设备的数据偶尔能够正确获取,但是仍然会在总线发送数据或者命令的时候,爆出总线读写错误,那么有可能遇到下面的死锁问题,死锁时候,就是数据线被拉低,主机无法拉高。
死锁一般发生在从机上,且为数据线死锁。
因为i2c总线是共享的,如果需要确定,是否是从机死锁,可以参照下面两幅图,串联电阻进行测试
如上图所示,如果从机死锁,即从机拉低电平,此时检测到的电压为1/3 Vcc。
如上图所示,如果主机死锁,即主机拉低电平,此时检测到的电压为 1/11 Vcc。
依据这个原理,可以准确判定死锁的具体位置,多个传感器依据类似方式进行定位。
3.1 反复重启导致死锁
3.1.1 现象
如果设备需要反复重启,很有可能在从机设备返回数据的时候,SDA 被锁住。
具体原因是从机设备在回数据,还没有发送完成,主机时钟消失,从机等待时钟信号, MCU重启,如果从机设备的电源没有复位,从机继续等待 MCU 时钟信号,数据一直被钳住,总线无法完成数据交互。
3.1.2 解决方式
解决重启导致总线死锁,一种方式可以如同 rt-thread 驱动解决方式一样,在系统复位的时候,提供9个时钟信号,解初总线死锁;另一种是在按下复位键初始化的时候,给从机设备电源断电重启,这个需要引脚控制。
3.1.3 9 个时钟信号
i2c 设备进行读写操作的过程中,在从机钳住总线的期间,MCU 异常复位,会导致 SDA 死锁,异常产生出现在俩个阶段:从机响应阶段、从机发送数据阶段。
下面将针对这两种异常,对时钟信号进行解释,并且总结其他原因,得出结论。
(a)从机响应阶段
MCU 在开始信号后发送地址,得到从机设备响应,准备开始返回数据,在这个时候,从机将 SDA 信号拉为低电平,如果 MCU 异常复位,会导致总线上 SCL 停止发送时钟信号,从机等待 MCU 的时钟信号,产生钳住并且拉低 SDA 的现象。
如果想要解锁 SDA,从机需要 9 个时钟信号,使得从机完成响应,释放 SDA 。
(b)从机发送数据阶段
如果从机响应完成了,开始给 MCU 返回数据。
这个数据有八位,每一位都有可能为低,如果在数据低位,MCU 异常复位,停止发送时钟信号,从机就会等待 MCU 的时钟信号,产生钳住并且拉低 SDA 的现象。
如果想要解锁 SDA,从机需要1-8个时钟信号,使得从机完成数据响应,释放 SDA 。
(c)其他情况
在从机一个 8 位数据发送完成后,等待 MCU 响应, 即使属于 MCU 的,从机不再钳住 SDA,没有时钟,数据交互停止。
在主机发送数据阶段,总线所有权在主机,主机异常,数据交互停止,总线释放。
所以,这些情况下,不存在 SDA 死锁的情况。
(d)结论
综上所述,解锁 SDA 从机最多需要 9 个时钟信号,也就是异常复位后,MCU 至少发送需要 9 个时钟信号,完成 i2c 总线的 SDA 解锁。
所以,RT_Thread 为了避免此类问题的产生,在 i2c 驱动初始化,对总线进行判断,判断是否需要解锁,如果需要,就进行解锁,确保 i2c 设备不会因为这个问题导致数据交互失败。
3.2 多个 i2c 设备导致死锁
多 i2c 设备除了异常复位导致死锁,还会形成相互干扰的问题,一般情况下,不会把同种从机地址挂在同一条总线上,但除此之外,有些i2c 设备设计不是按照标准的 i2c 总线协议设计,在 i2c 总线共享的前提条件下,有的设备只要总线上从机地址就会有响应。
这样由于从机的错误响应,使得各个 i2c 总线异常,甚至钳住总线,导致 I2C 总线进人一种死锁状态。
解决方式,这样的不标准i2c设备,单独使用一个总线,避免干扰,或者单独一个独立引脚,控制电源。