I2C总线简介
I2C(集成电路间互连总线)是由飞利浦公司于上世纪80年代早期开发的。它是一个简单的两线总线,包括一条数据线和一条时钟线。目前I2C已经成为重要的全球业界标准,被所有主要的IC厂商所认同和使用。它具有多种机功能和仲裁特性,采用主控-伺服通讯方式,通常在某一时刻,只有两个器件进行通信,广播呼叫例外,此种情形下伺服设备可充当伺服接收机或伺服发射机使用。
I2C是低数据速率方式,用于短距离用途。目前的I2C指标显示,它的速度可以做到100kHz、400kHz和3.4MHz,不过还没有出现3.4MHz的产品。400kHz产品是经过了很长一段时间才变得普及,3.4MHz走向应用尚需时间。这里将主要讨论100kHz、400kHz产品。I2C没有规定的电缆长度,唯一的限制是I2C总线规范,它规定I2C的最大电容是400pF,现在通过使用缓冲器如P82B96可以延长总线的距离。
所有的I2C硬件架构均为漏极开路或集电极开路设计,具有上拉电阻。上拉电阻的值为2-10千欧,它们不超过I2C规范中3mA反向电流的规定和上升时间的规定。大多数飞利浦伺服设备的SCL上没有下拉电阻。有一点特别重要,即设备的最大输入电容是10pF。
I2C总线与其它总线如UART、CAN、USB、SPI相比,在性能上各有千秋,I2C的优点是它非常简单,如在一个微控制器上使用两个插脚来产生I2C。I2C得到应用的时间比较长,为众多工程师所了解,也有着大量的产品系列支持。
I2C技术及产品介绍
飞利浦I2C器件
飞利浦拥有一系列的新器件用来克服规范指标上的限制,以扩展I2C使用。I2C总线的主要局限是它的7位地址,通过使用飞利浦的I2C多路复用器,可以在一条总线上使用具有相同地址的相同设备。多路复用器允许应用工程师将主I2C总线动态划分为几个子分支,以解决I2C地址冲突。如果在一个系统中有两个具有相同I2C地址的设备,显然造成系统问题。这时在系统中放置一个多路复用器,便可以使得主控者选择希望交谈的设备。
在系统要求超过400pF限制的情况下,上升时间信号将超过I2C规范,这时也可以使用一个多路复用器或开关来克服这个限制。它可以做到动态分配主I2C总线给子分支,它可以编程,并可使用不止一个多路复用器。其局限是所有的子分支不能在相同时间内编址。如做一个500pF总线上通讯的主控设备,这里则需要改变总线,使其改变最大400pF的指标。放一个多路复用器进去,它将总线分成两个下行200pF线加一个100pF的上行总线。这种情形下的另一种潜在解决方案是使用I2C总线转发器或网络集线器。飞利浦的这类产品包括PCA8515A、PCA9516A等。
I2C总线延伸器用来延长电缆的距离,其主要性能为:双绞线85kHz下50米到31kHz下的1000米;超过400kHz为短距离,约10米。飞利浦这类产品有P82B715,P82B96。
飞利浦的I2C开关可以用来协调同一总线的不同I2C逻辑电平。假设有一些设备在5V下工作,有一些设备在3V或4V下工作,有一个主控者在2.7V下工作,这时便可以使用一个I2C开关对所有设备进行透明地对话。飞利浦这类产品有PCA954xx系列和GTL2000系列。
当需要在同一总线上同时使用100kHz、400kHz的设备时,可以使用一个I2C总线转发器,将两种设备隔离在两侧,使它们分别按自己的频率工作。飞利浦这类产品有PC9515A。
飞利浦的I2C总线微控制器可用于与微控制器的并行端口进行接口,以开发两主控者应用。这方面飞利浦的产品有PCF8584和PCA9564。PCF8584产品已发布较长时间。PCA9564为更新的产品。
飞利浦I2C器件应用
使用飞利浦I2C新器件可以使I2C总线更稳固或故障更少。它的主要应用方面包括:
(1)隔离有故障的伺服设备。用I2C开关将I2C总线分割为几个分支,在有总线挂起时,可将其隔离。这对高可靠性应用尤为重要。
(2)在同一总线使用一个主控者和一个备份的主控者,或是在一个总线上使用两个主控者,这种应用主要存在于高端服务器。这种情况下可以采用一个I2C主控选择器,这样可以使用两个独立的主控者控制总线,不会有故障或系统讹误,完全从总线上进行隔离。
(3)如果要做到将一种插卡实时插入系统而不影响I2C总线上的数据或损坏设备,可使用I2C热交换总线缓冲器,用它来检测总线闲置状态,隔离电容,防止SDA、SCL线上的脉冲干扰。
I2C器件应用案例
I2C器件的典型应用为:蜂窝电话、PDA、笔记本电脑、数码相机、便携式测试设备、服务器、cPCI和AdvancedTCA等。如在蜂窝电话中,有用户希望加入GPIO、LED闪光灯等,I2C是连接两种功能的很好的解决方案(图1)。此类应用中可使用飞利浦的PCA9537产品等,输出最多可达16个。
图1 手机应用实例图(略)
上面介绍过的总线缓冲器可以应用于多种ATCA板应用。I2C产品还可以应用于温度监控应用(图2),飞利浦的SA56004产品就具有外部和内部的传感器功能供使用。另外,飞利浦还拥有DIP开关应用产品,如夏普LCD电视,在最后的汇编中用I2C总线完成视频标准设置。
图 2 温控应用实例图(略)
问答选编
问:请介绍一下I2C总线的应用领域和应用注意事项。
答:I2C总线是一个通用的串行总线,可以在很多领 域中应用,如计算机、电信设备、消费类电子、 手 持设备等。应用中需要注意的主要有:总线容量、
信号传输距离 、总线频率、Slave地址、上拉电阻 阻值计算等。
问:我在I2C总线的芯片中在存放的数据会丢失,如 何解决?
答:我想这是存储芯片的问题,和什么接口并无关 系,除非没有写进去。若能确定数据已经写入,我 建议联系芯片供应商请求协助测试解决该问题。
问:1.I2C是否支持热拔插?
2.如果热拔插I2C总线上的设备,是否易对总线 及总线上的设备会产生严重影响,如何影响?
情况1:拔插当时总线上的空闲设备;
情况2:插拔当时总线上的Busy设备,Master或Slave。
答:1.支持热插拔;
2. 如果声明支持热插拔的I2C器件不会对总线产 生任何的影响,器件插入的时候它会自动的检测 线路状态,并且只在总线空闲的时候连接器件,所
以不会对总线产生任何的影响。
问:我们把I2C通过迷你USB接口从机器上引了出 来,和另外的一台机器连接。现在线长1米左右, 速度是280Kbps可以正常传输。我们想知道按
这种速度可以不出错传多远,如果距离很长,中 间是否需要加什么设备,是否有相应的解决方案。
答:如果采用USB 1.1可以传送25米,我们有相应的 芯片进行I2C和USB间的转换。
问:我一直搞不清I2C总线和CAN总线它们的真正 区别,希望专家能结合实例应用帮忙彻底区分。
答: CAN总线通过复杂的传输协议可以实现很高容 错性能,所以多用于对数据准确要求很高的场合, 比如汽车,机械等领域,但是其速度很低,协议复
杂。而I2C总线协议实现非常的简单,速度更高, 但是没有提供如CAN那样复杂的纠错和检测机 制。所以综合而言,CAN复杂,但是容错度高,速
度低。而I2C简单,高速,容错度相对低。
问:通过缓冲器可以扩大I2C总线传输距离,允许采 用多少级缓冲器?
答:Philips很多的缓冲器可以级联,所以允许无限的 缓冲器。
问:I2C总线与RS232、RS458有怎样的不同?
答:最主要的区别在于:
1. I2C主要用于系统内部,而RS485/232多用于外 部设备的连接;
2. I2C从技术上说属于同步串行总线,RS485/232 属于异步串行总线;
3. I2C总线上不需要专门的收发器设备,所以简 单,而RS485/232需要专门的电平转换器件。
问:I2C总线的传输速度有多高?它的数据完整性和 安全性如何?
答:I2C总线理论上传输速度可以为100KHz(标准)、 400KHz(快速)和3.4MHz(高速)。目前还没有成 熟的3.4MHz速率的产品。I2C总线是板内总线,总
线内部有地址管理和仲裁机制,在总线容量、Slave 地址等技术指标正确的情况下,数据的完整性和 安全性是有保证的。
问:请问LPC系列单片机的I2C接口是否支持热插拔?
答:不支持,I2C总线上的热插拔需要专门的器件支 持,比如PCA9511。
问:SDA线为什么需要一个漏极开路的上拉电阻? 这个电阻是否所有I2C器件内部都已经集成。
答:通过将总线拉至低电平,漏极开路驱动,所有总 线上设备都可以传送数据。有的I2C器件内部已 经集成了上拉电阻,如PCA9555等,有的则没有,
请使用前查阅数据表。
问:1. I2C总线的工作速度是否有下限?如果有,是 多少?
2. I2C总线的2个上拉电阻怎样计算?
答: 1. I2C总线的工作速度取决于主控器的性能,是 有下限的,如果是待机模式速度为0。
2.I2C总线的2个上拉电阻取决于电源电压、总线 电容、 连接器件的数量。电源电压决定了最小值, 容限和上升时间决定了最大值。
问:I2C总线是否会出现锁死?如果出现锁死,主设备 怎么才能察觉总线故障,以及排除?
答:就总线本身而言,不会锁死,锁死通常是由于外 部器件的失效和故障造成,此时主设备会连续收 到总线Busy的中断,若是Slave器件故障造成的,
那么必须移除或者通过I2C开关器件隔离故障器 件。
问:I2C总线有多大的优点,和过去的相比,最突出的 好处是什么?
答:1.方便将框图变成原理图;
2. 在总线上增加或去掉某器件不会影响到其它 器件工作;
3. 多主机功能允许通过外部连接到生产线,快速 测试和调整最终用户的设备,故障诊断和调试都 很简单;
4.软件调试简单,可调用应用软件包来缩短软件 开发进程;
5. 所有I2C器件共用一条总线可节省IC引脚资源, 减少PCB板面积;
6. 通过允许简单地构造设备变量,保持设计是最 新的简易升级功能增加了系统设计的灵活性。
问:I2C总线不存在差错处理机制,一旦总线发生故 障,如何解决?
答:有两种方法:
1. Reset出现问题的Slave(如果这个Slave有Reset 管脚);
2. 启动“恢复序列”。
恢复序列流程为:
在SCL线发送9个时钟脉冲;
由Master保持SDA线为高,直到Slave-Transmitter 模式释放SDA执行ACK操作;
在ACK操作时,保持SDA线为高;
在Master-Receiver和Slave-Transmitter模式都过 去后,Master会发一个Stop命令完全初始化总线
。
问:在I2C总线上能否采用LVDS信号?有何好处?
答:我想是可以的,好处也是显而易见的,比如可以 传输更远的距离,提供更高的数据稳定性等。但是 实现起来会比较复杂。首先你必须将双向总线分
开,再接入LVDS驱动器件等。这样的话,I2C总想会 变成8条线,失去了I2C简洁易用的优势。
问:对上拉电平有没特别的要求?
答:具体电平承受能力要看具体芯片,现在Philips的 I2C芯片一般都可以承受2.3V~5.5V。再选择合 适的上拉电阻,可以保证上拉电平值正确。
问:在(一主多从),发现I2C从方式可以很可靠的工作 (定时器正常,不会溢出),而主方式有时候会读不 到数据(我设起始条件不满足或从器件没有响应
时提示),这时候再重新启动总线读一两次就正 常了,此情况不是经常出现,但是在要求特别高的 总线上就不允许了。请问,我该注意哪些问题以避免
有时读不到数据的情况,使用器件为 P87LPC767/769。
答:这个问题可能需要更详细的debug工作,因为I2C 总线基本由硬件完成,所以在由I2C接口的器件 上使用时一般不容易出现问题,我建议你可以考
虑I2C总线上的干扰,并尝试降低速率。
问:通过那些措施能提高I2C总线的防干扰能力?目 前能达到那种水平?
答:如果你所说的干扰是指电磁干扰的话,在I2C规 范限制条件下,减小上拉电阻是一个办法,考虑 使用I2C总线驱动器提高输出驱动能力也是一个
办法,至于确切的数据并无一个标准可以评价。
问:当使用I2C作为一主多从方式通讯,在速率不是 要求很高的情况下,总线能允许多长的线路(类 似RS232通讯,1米或者可以更长),有什么特殊
的要求吗?综合抗干扰能力如何?
答:在100KHz情况下,大约可以传输1m左右,如 果 要求更长距离的传输,可以考虑加总线驱动芯片, 如PCA9515A、P82B96等。
问:如何利用I2C进行程序的烧录?
答:我想提供I2C烧录功能的单片机应该是提供完整 的时序、指令和要求,这对于不同提供商的MCU 不一定是相同的。
问:I2C接口内部硬件是怎样的,是如何实现多用户 仲裁的?
答:I2C内部为漏极开路或集极开路。当2个或更多 Master发出Start命令时会出现仲裁问题,I2C芯片 有自动仲裁机制。
问:有的时候I2C在快速模式读写时会出错,在低速 模式读写时就没问题,该如何解决?
答:这种问题并不少见,也许是主从器件并不完全的 支持最高速度,还有就是是否总线电容负载较大, 是否布线过长等,调试中可以采取的动作有限,
可以尝试改变上拉电阻的值。
问:上拉电阻的大小对数据的传输速度和距离有什 么影响吗?
答:上拉电阻是由I2C芯片容许的反向电流和信号的 上升时间T(由传输速率决定) 。
问:I2C总线使用了几位地址码,最多能支持多少个 设备?
答:两种标准,7位和10位,所以最多支持1024个设备。
问:I2C的时钟同步的要求有多高?
答:I2C总线上如果有多个CLK,则总线时钟的Low由 时间最长的Low CLK决定,High由时间最短的High CLK决定。
问:如果超过8个节点,如何识辨?
答:1.使用我们的I2C mux/switch器件在不同时刻隔离。
2.考虑使用带有更多地址位的器件 。
|