全部博文(83)
分类:
2008-07-01 10:07:18
I2C(发音为:”I squared see”)能用于替代标准的并行总线,能连接的各种集成电路和功能模块。对于嵌入式系统设计者来说,有以下好处:
支持I2C的设备有微控制器,A/D、D/A转换器,储存器,LCD控制器,LED驱动器,I/O端口扩展器以及实时时钟。
通过使用内建的I2C接口硬件或 者连接到微控制器标准并行总线的外部I2C控制芯片,微控制器能够连接到I2C总线。任选其中一种方式,通过通常的 I/0管脚和软件上的“位拆裂(bit-banging)”技术,你就能实现一种软件I2C接口。这种方式比较慢,比以硬件为基础的实现要复杂的多。
标准I2C总线传输速率可以到100Kbit/s,通过使用了7位地址码,就能支持128个设备。加强型I2C总线用了10位地址码(能够支持1024个设备),快速模式(400Kbit/s)和高速模式(最高有3.4Mbit/s)。
I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存。
只要很小的电路附件,I2C总线就能够支持设备在不同电平下工作(例如:3.3伏和5伏),
I2C总线的规范中规定了如何在两个设备之间传递数据,采取的方法是总线仲裁、时钟同步和总线的电气特征。
在一次数据传输中,一个设备扮演临时主控器,开始在它和一个有单一地址设备(从控器)之间的传输。主控器为数据传输产生时钟信号。规范中要求数据线(SDA,串行数据线)只有在时钟(SCL,串行时钟线)处于低平时才能变化。
总线的一次典型工作流程如下:
1.开始:信号表明传输开始。
2.地址:主设备发送地址信息,包含7位的从设备地址和1位的指示位(表明读或者写,即数据流的方向)。
3.数据:根据指示位,数据在主设备和从设备之间传输。数据一般以8位传输,最重要的位放在前面;具体能传输多少量的数据并没有限制。接收器上用一位的ACK(回答信号)表明每一个字节都收到了。传输可以被终止和从新开始。
4.停止:信号结束传输。
在向那些只有一个主设备(典型的是主微控制器)的基本系统中不会有仲裁的。然而,更多的复杂系统能够有多个主控设备,因此,就有必要用某种形式的仲裁来避免总线冲突和数据丢失。
通过用线与(开路基极)连接I2C总线的两路信号(数据和时钟)可以实现仲裁。所有的主设备必须监视I2C的数据和时钟线,如果主设备发现已经有传输正在进行,它就不会开始传输了。
有很小的几率会产生一下情况:有两个或更多的设备同时发出“开始”信号。在这种情况下,相互竞争的设备自动使它们的时钟保持同步,然后像平常一样继续发射信号。
第一个检测到自己发送的数据和总线上的数据不匹配的设备要失去仲裁能力。这种情况会在这时发生:当前述设备发送一个高电平时,而同时另一个主控设备也正在发送一个低电平。也许直到相互竞争的设备已经传输了许多字节后,仲裁才会完成。
因为没有数据丢失,仲裁处理是不需要一种特殊的仲裁相位的。获得主控权的设备从本质上来说,是不知道它为了总线而和其它设备竞争的。
在一个以硬件为基础的I2C中,有关发送、同步和仲裁的细节是自动处理的,不用你操心。如果你计划实现一个软件驱动的多主控I2C接口,那你需要研究I2C详细规范(),并懂得其细微差别,
作者简介:
本文作者David Brenan是一名具有15年以上工作经验的独立嵌入式系统开发人员。他的作品包括设计过获奖的专业数字音频产品。