I2C

页面
参与者: SFUptownMaker
受欢迎的 最喜欢的 79

介绍

在本教程中,您将学习关于我的一亚博在线娱乐官网切2C通信协议,为什么要使用它,和它是如何实现的。。

I2C系统的框图

Inter-integrated电路(我2C)协议是协议旨在允许多个“奴隶”数字集成电路(“芯片”)与一个或多个通信”大师”芯片。像串行外围接口(SPI),只有在单一设备用于短距离通信。像异步串行接口(如rs - 232或uart),它只需要两个信号电线来交换信息。。

建议阅读

东西将有助于知道前阅读本教程:

串行通信

异步串行通信的概念:包,信号的水平,波特率,uart和更多!!

串行外围接口(SPI)

SPI通常被用来连接微控制器外围设备,如传感器,移位寄存器,和SD卡。。

二进制

二进制数字系统的电子和编程。。。所以它也一定是重要的学习。亚博在线娱乐官网但是,二进制是多少?它是如何转化为其它数字系统像小数吗?吗?

移位寄存器

介绍移位寄存器和潜在的用途。。

逻辑水平

亚博在线娱乐官网学习3之间的区别。3 v和5 v设备和逻辑水平。。

为什么使用I2C ?吗?

找出为什么我一想交流2C,你必须先把它比作看看它与其他可用的选项。。

串行UART端口怎么了?吗?

异步串行系统的框图。。

因为串行端口异步(没有时钟数据传输),设备使用必须同意提前数据速率。两个设备还必须有时钟接近相同的速率,和仍将多余的时钟频率在两端之间的差异将会导致混乱的数据。。

异步串行端口需要硬件上方的UART两端相对比较复杂,很难准确地实现软件如果有必要。至少有一个启动和停止位是每一帧数据的一部分,这意味着10比特的传输时间对于每一个8位的数据发送,需要吃到的数据率。。

异步串行端口的另一个核心的错是他们天生适合两个之间的通信,只有两个,设备。虽然它是可能的连接多个设备一个串行端口,,总线争用(两个设备同时试图把同一行)始终是一个问题,必须认真处理,以防损坏设备的问题,通常是通过外部硬件。。

最后,数据速率是一个问题。虽然没有理论限制异步串行通信,大多数UART设备只支持一个特定的固定波特率,亚博国际官网这些通常是最高的约230400位每秒。。

SPI怎么了?吗?

SPI系统的框图。。

SPI的最明显的缺点是针的数量要求。连接一个主,一个奴隶和SPI总线需要四行;每个额外的奴隶需要一个额外的芯片选择I / O销上的主人。销连接的快速扩散使其不受欢迎的在很多的情况下一个主设备必须被控制。同时,为每个设备可以使大量的连接路由信号在紧张的PCB布局的情况下更加困难。SPI总线只允许一个主,但它确实支持任意数量的奴亚博国际官网隶(只需接受设备连接到总线的驱动能力和可用芯片选择针的数量)。。

SPI有利于高数据率全双工(同时发送和接收数据)连接,亚博国际官网支持时钟频率高达10 mhz(因此,1000万比特每秒)对一些设备,速度和尺度。两端的硬件通常是一个非常简单的移位寄存器,在软件允许容易实现。。

进入我2C -两全其美!!

I2C系统的框图

2C仅需要两个电线,像异步串行,但这两个电线最多可支持1008个奴隶设备。亚博国际官网同时,不像SPI,我2C可以支持多亚博国际官网主机系统,允许一个以上的大师与总线上的所有设备(尽管主设备不能对总线相互交谈,必须轮流使用公交线路)。。

异步串行和SPI之间数据速率下降;最我2C设备可以交流在100 khz或400千赫。我有一些开销2C;对于每一个8位的数据发送,一个额外的元数据(“ACK /纳”位,稍后我们将讨论)必须传播。。

我所需要的硬件实现2C比SPI更复杂,但低于异步串行。它可以相当平凡地实现软件。。

2C -一个简短的历史

2C最初是在1982年被开发为各种飞利浦飞利浦芯片。最初的规范只允许100 khz通信,并提供只对7位地址,总线上的设备的数量限制在112年(有几个保留地址,永远不会被用于有效吗2C地址)。在1992年,第一次公开规范出版,添加一个400 khz快速模式以及扩大10位地址空间。大部分的时间(例如,ATMega328设备在许多Arduino-compatible板),设备支持我亚博国际官网2C至此结束。指定额外的模式有三种:快速模式加上,在1 mhz;高速模式,在3。4 mhz;和超快的模式,在5 mhz。。

除了“香草”我2C,英特尔在1995年推出的一个变体称为“系统管理总线”(SMBus)。SMBus更严格控制的格式,为了最大化的可预测性支持ICs PC主板之间的通信。亚博国际官网SMBus最重要的区别是它限制速度从10千赫到100 khz,当我2C可以支持设亚博国际官网备从0千赫至5 mhz。SMBus包括时钟超时状态使低速非法操作,尽管许多SMBus设备将支持它无论如何最大化与嵌入我的互操作性亚博国际官网2C系统。。

I2C在硬件水平

信号

每一个我2C总线包含两个信号:sci和SDA。sci是时钟信号,SDA是数据信号。时钟信号总是由当前总线主控;有时一些奴隶设备可能会迫使时钟低延迟主发送更多的数据(或主之前需要更多的时间准备数据试图时钟出来)。这就是所谓的“时钟延伸”和描述协议页面。。

与UART和SPI连接,我的2C公交司机”开放的流失””,这意味着他们可以把相应的信号线低,但不能把它高。因此,不可能有总线争用一台设备在哪里试图将行高而另一个试图把它低,消除潜在的损害司机或系统中过多的功耗。每一行有一个信号上拉电阻,恢复的信号高当没有设备维护它低。。

相当于一个I2C系统的内部电路图。。

注意到两个上拉电阻两个通信线路。。

选择电阻随设备在公共汽车上,但是一个好的经验法则是先4。7 k和在必要时调整下来。我2C是一个相当可靠的协议,和可以使用较短的线(2-3m)。长时间运行时,与大量的设备或系统,电阻更小。。

信号的水平

因为车上的设备并不高的驱动信号,我2C允许一些灵活的连接与不同的I / O设备电压。一般来说,在一个系统,一个设备比另一个更高的电压,可以通过我来连接两个设备2他们之间没有任何水平转移回路。诀窍是上拉电阻连接到这两个电压的降低。这只在某些情况下,这两个系统的低电压超过高级的输入电压越高电压系统的例子,一个5 v Arduino和3。3 v加速度计。。

如果两个系统之间的电压差太大(说,5 v和2。5 v),亚博官网SparkFun提供了一个简单的我2C电平位移器板。董事会还包含一个允许线以来,它可以用于禁用所选设备通信。这是有用的在这种情况下,多个设备使用相同的地址是被连接到一个master-Wii Nunchucks就是一个很好的例子。。

协议

通过我的沟通2C比UART或SPI更复杂的解决方案。的信号必须遵守一定的协议设备在公共汽车上我意识到这是有效的2C通信。幸运的是,大多数设备照顾所有的细节给你,让你专注于你想要交换的数据。。

基础知识

标准7位地址传递消息。。

消息分解成两种类型的框架:一个地址,在主显示消息被发送的奴隶,和一个或多个数据帧,8位数据信息从主的奴隶,反之亦然。数据被放置在SDA行sci后低,sci后,取样直线高。时钟上升沿之间的时间和数据读/写定义的总线上的设备,并将从芯片到芯片。。

开始的条件

启动地址帧,主设备叶子sci高拉SDA低。这使得所有奴隶设备注意传输即将开始。如果两个主设备希望乘坐的所有权,哪个设备拉SDA低首先赢得比赛并获得控制的公共汽车。可以重复问题开始,初始化一个新的通信序列没有放弃控制总线的其他大师;我们以后再谈这个。。

地址帧

在任何新的通信地址帧总是第一个序列。7位地址,地址是最重要的一点(MSB)首先,打卡下班了后跟一个R / W位指示是否这是一个阅读(1)或写(0)操作。。

框架的第九位是纳/ ACK。这是所有帧的情况(数据或地址)。一旦第一个框架的8位发送,接收设备控制SDA。如果接收设备SDA行不拉低9时钟脉冲之前,可以推断,接收设备没有收到的数据或不知道如何解析该消息。在这种情况下,交流中断,它的主系统来决定如何处理。。

数据帧

地址帧被发送后,数据可以被传播。主只会继续产生时钟脉冲的间隔周期,和数据将被放置在SDA主人或奴隶,取决于R / W表示一个读或写操作。数据帧的数量是任意的,和大多数奴隶设备会自动递增内部寄存器,意味着后续读取或写入将来自第二寄存器。。

停止条件

一旦所有的数据帧发送,大师将产生一个停止条件。停止条件定义为一个0 - > 1(低到高)过渡SDA对sci 0 - > 1过渡,剩下sci高。在正常数据写操作,SDA应该价值改变sci很高,为了避免错误的停止条件。。

协议的高级主题

10位地址

10位地址帧的例子。。

在一个10位寻址系统中,要求两帧传输奴隶地址。第一帧将包括代码b11110xyz,在“x”的MSB奴隶地址,y是奴隶的8位地址,和z是一个读/写如上所述。第一帧的ACK位将断言所有的奴隶与前两位的地址。与一个正常的7位转移,另一个立即转移开始,和这个转移包含位7:0的地址。在这一点上,解决奴隶应该回应ACK。如果没有,失效模式是一样的7位系统。。

请注意,10位地址与7位地址设备设备可以共存,自领导‘11110’的一部分地址是没有任何有效的7位地址的一部分。。

重复启动条件

重复启动条件。。

有时,是很重要的,一个主设备允许几个消息交换,不允许其他主设备总线上的干涉。由于这个原因,已经定义了重复启动条件。。

执行重复的开始,SDA是允许高而sci很低,sci允许走高,然后再SDA带来低而sci很高。因为没有停止条件在公共汽车上,之前的沟通不是真正完成和当前主维护控制总线。。

在这一点上,下一条消息可以开始传播。这个新消息的语法是一样的其他message-an地址帧数据帧紧随其后。允许任意数量的重复启动,和主人将保持控制总线,直到它停止条件问题。。

时钟拉伸

一个奴隶使用时钟拉伸推迟下一个数据帧。。

有时,主人的数据率将超过奴隶提供数据的能力。这可能是由于数据还没有准备好(例如,奴隶尚未完成了模拟数字转换)或因为前一个操作尚未完成(说,一个eepm尚未完成写入非易失性内存和其他需要完成,才能服务请求)。。

在这种情况下,一些奴隶设备将执行什么是被称为“时钟延伸”。名义上,,所有时钟是由主device-slaves简言之总线上的数据或数据总线在回应主人的时钟脉冲。在任何时候在数据传输过程中,一个解决奴隶可以容纳sci行低的主版本之后。主需要避免额外的时钟脉冲或数据传输直到奴隶释放sci线。。

资源,进一步

2C是一个相对复杂的接口,有很多资源来帮助你处理它。以下是一些更多的信息的。。

  • 维基百科的文章我2C——不是很好,但不是一个糟糕的开始。。
  • 标准文档几年前-菲利普斯成为NXP半导体;这是医生给我的官方标准2C。。
  • 2C底漆我——官方底漆2C和相关技术。。
  • Linux工具因为我2C——一个不错的工具集来处理我2C和相关公共汽车在嵌入式Linux环境中,像pcDuino或覆盆子π。。

使用我2C远距离,我检查专用PCA9615微分2C总线扩展器。。

Qwiic微分I2C总线Extender (PCA9615)连接向导

5月31日2018

亚博在线娱乐官网学习如何扩展范围的I2C通信总线与Qwiic微分I2C总线extender(PCA9615)爆发。。

或者查看我们的SPI和I2C教程覆盆子π。。

覆盆子πSPI和I2C教程

10月29日2015

亚博在线娱乐官网学习如何使用串行I2C和SPI总线在你的树莓π使用wiringPi I / O库的C / c++和spidev / smbus Python。。

为你的下一个项目需要一些灵感?亚博官网查看一些相关的教程:

亚博官网SparkFun GPS突破——XA1110 (Qwiic)连接向导

世界上找出你与Qwiic SparkFun GPS突破——XA1110。亚博官网。

Qwiic人类存在传感器(AK9753)连接向导

如何开始和你Qwiic启用AK9753人类存在传感器。。

Qwiic Flex手套控制器连接向导

你的手指弯曲吗?你的手指直吗?Qwiic Flex手套控制器板会帮你回答这个古老问题与Flex传感器!!

Qwiic MUX联播指南

有很多相同的传感器I2C的地址吗?放在Qwiic MUX (TCA9548A)让他们都在相同的公共汽车!!

寻找更多的灵感?看看这些博客文章的一些想法: