I2C接口之线路实务

(郭长佑/ DigiTimes.com

2005/04/08

 

  前言

 对许多电子电机工程师而言,「 I2C 」并不是个陌生的名词,甚至可说是相当基础的接口技术,然而就因为基础,因此也容易造成忽略,根据笔者过往的经验,在校的微控器应用课程中,多半还是教导以并列、寻址、译码、致能等逻辑程序来联系外围芯片(最典型的示范即是 i8255 I/O 扩充芯片),这是 80 年代最普遍的芯片间沟通方式,然而往后的嵌入控制应用领域中,几乎都尽可能改采简易的串行方式。

 串行接口在控制类的电子应用中逐渐兴盛,包括 RS-232/422/485 CAN-bus SPI 等,就连 PC 也逐渐倾向实行串行,包括 USB 1394 ,乃至今日的 SerialATA (串行式 ATA )、 PCI Express (串行式 PCI )等,都是以串行为主的传输接口,而本文将仔细讨论的 I2C 亦是其一。

 由于在此我们无法逐一说明各种串行接口的运作方式,但这又是真正离开课堂后所必须面临的实务,所以在此先以最普遍运用的 I2C 接口为例,希望能因此让各位对串行方式的设计有更大的兴趣。

  I2C 的起源与发展简历

 如同 CAN-bus 由德国 BOSCH 公司所提出, SPI 由美国 Motorola 公司所提出, I2C 是由荷兰 Philips 半导体所提出。 Philips 早在 80 年代即摸索、尝试此一串行传输技术,最初是为了用在电视应用的相关设计( TV Set )上,能让 CPU 与外围芯片间获得速简的连通,之后于 1992 年正式发表 I2C-bus 1.0 版)。


▲Philips 半导体的 I2C 标志,书写时当写成「 I 平方 C I2C 」。(图片来源/ Semiconductors.Philips.com

  I2C 全名为 Inter-IC IC 即集成电路, I2C 有跨芯片的「芯片际」之意,至于念法, Philips 半导体的官方网站如此写着:「 eye-squared-see 」。

  I2C 1.0 即提供两种寻址模式与三种传速模式,寻址方面分成 10-bit 长寻址与 7-bit 短寻址,表示在同一个 I2C-bus 上能允许的芯片连接数(长寻址为 1,024 个,短寻址为 128 个,但实际上极难用至如此多的连接数,原因将于后述),传速方面则有 10kbps 的低速模式、 100kbps 的标准模式、及 400kbps 的快速模式。

 附注:低速模式甚少使用,因此在多数文件中也极少提及。

 附注: I2C 一个频率传送一个位,所以 400kbps 传输率,其意思等同于 400kHz 运作频率。

 到了 1998 年, Philips 提出 I2C-bus 2.0 (至此时已有超过 50 家业者取得 I2C 技术授权,并用于超过 1,000 种不同的芯片上),追加了 3.4Mbps 的高速模式,之后 2000 年提出 I2C-bus 2.1 ,针对高速模式进行一些修订,以避免可能的误动作,并放宽部分与时序参数有关的规范。

  I2C 除了用于许多嵌入式的电子设计外,在信息领域其实也有使用,在 USB 尚未兴盛前, Philips 曾以 I2C 为基础提出 Access.bus (简称: A.b ),与 USB 相同,希望竞逐取代遗旧( Legacy I/O 埠之用,其中 A.b 鼠标、 A.b 键盘曾流行一小段时间,不过最后还是被 USB 所一统,主要的败因当是在传输速度。不过 I2C 仍有地方优于 USB I2C 装置相互间没有绝对的主控( Master )、受控( Slave )设定,这表示任两个 I2C 装置可以互接运用, USB 则必然是 PC 为主,其余为仆。

 虽然 Access.bus 未成风气,但之后 I2C 却被 VESA 所用,用于 PC 上的模拟视讯接口( D-sub )中,让显示器与显示卡间能相互沟通,好协调出最佳的输出组态,运用在此的 I2C 被称为 DDC Display Data Channel ),并有单向的 DDC (显示器传至显示卡)、双向的 DDC2 DDC2B DDC2AB 等版本演进,即便是今日的 DVI HDMI 等数字视讯接口也都持续使用 DDC

 附注:各位今日的 Windows 操作系统,在初接显示器或换接不同的新显示器时,会显示「随插即用显示器」的信息,有时甚至直接显示厂牌与型号,此背后其实就是 PC 透过 DDC I2C )接口对显示器进行侦测、辨识、协调沟通的作用。

 另外 1995 Intel 因应笔记型计算机省电设计所用的智能型电池系统( Smart Battery System )而提出 SMBus System Management Bus ),也与 I2C 相当高程度的近似, SMBus 今日亦成为 PC 的组态、电源管理(即 ACPI Advanced Configuration and Power Interface 1997 年提出)所用的基础接口。

  I2C 的实体层面

  I2C 在实体连接上相当简单,仅有两条线路: SDA Serial Data Line )数据线、 SCL Serial Clock Line ,有些也写成 SCK )频率线,所有 I2C 装置(多半是指一颗独立封装的芯片)都并接这两条线路,同时各连接都是开汲极( Open Drain )式的 I/O 接脚,亦即接脚内部的开关在导通时为接地的逻辑低准位( Low Lo ),而不导通时则形同断线浮接,不过 I2C 并不是要使用浮接状态,而是要使用真正的逻辑高准位,所以在 SDA SCL 两在线都加入提升电阻( Pull-up resister ),使未导通状态下线路会处于逻辑高准位( High Hi )状态。


典型的 I2C 接口连接法,各装置以开汲极输出的方式与 SDA SCL 线路并接,并在线路上加入提升电阻。(图片来源/ Semiconductors.Philips.com

 很快面临第一个问题:提升电阻的阻值该多少?一般工程师可能直接依据参考设计( Reference Design )上的信息来给定,即是按图施工,但今日若希望增减 I2C-bus 上的连接数目呢?阻值可能就有必要重新考虑或调整。

 一般而言,若 I2C 所用的 Vdd 为传统 5V ,则提升电阻必须在 1.6k ohm (奥姆)以下, 1992 I2C 刚提出时,当时的 486 计算机也都还在用 5V 。不过,今日 3.3V 已是主流,若 Vdd 3V 左右,则阻值勿超过 1k ohm

 阻值有上限,那么是否有下限?其实是有的,但却是间接性的要求,其下限来自于 I2C-bus 上的电流值,当 I2C-bus Hi 时,其接脚内的 FET 开关未导通,但即便如此线路上的电流也不得高于 0.4mA ,相对的处在 Lo 的导通状态时电流量会增大,但也不能超过 3mA 。所以设计一个 I2C-bus 系统时,必须先试行 Hi Lo 运作,并在过程中量测电流表现,若电流大于规范则必须修正电阻,增加阻值。

 进一步的,我们要确认 Hi Lo 的逻辑准位认定, I2C-bus 是以 Vdd 为依据的比例认定,其 Hi 必须是 Vdd 0.7 倍以上, Lo 必须是 Vdd 0.3 倍以下,例如今日 Vdd 5V ,则 Hi 最低必须有 3.5V Lo 最高不能破 1.5V

 附注: I2C 另也有一种不依据 Vdd 比例式的固定式电压准位定义,直接以 3V Hi 1.5V Lo

 此外也有最低 Lo 准位与最高 Hi 准位限制,最低 Lo 不得低于 -0.5V ,最高 Hi 不得高于 Vdd+0.5V ,在这里 Lo 与典型电气规范无异,但 Hi Vdd+0.5V 就很特别,这其实是为了准位偏移( Level Shift )才特许的,若 Vdd 5V 则可至 5.5V ,关于准位偏移将于后述。

 接着是重点:一个 I2C-bus 上可以连接多少个装置?虽然更上层的逻辑协议以长短寻址来看,可有 128 1024 个装置,但实际上受限于 I2C 线路上的电容值, I2C 规格书中明订不得超过 400pF (法拉),如此就一般设计而言,约在 10m 的线箔( PCB 印刷电路板上)内,或者约连接 20 30 个装置,就无法再扩增。而订定 bus 上的最大允许电容值,实是与前述的电流限制相应关连。同样地,最好在验证阶段能测试所设计的 I2C-bus 之电容值。

 如果坚持要再扩增呢?希望有更大的连接长度(跳脱仅在 PCB 上运用的拘限,让 I2C 成为跨板的接线,或其它更长距离的运用,甚至可转成红外线传输)、更高的连接数目,就必须用上变通方法,过去许多工程师尝试用 Latch-up (准位拴锁)、 Opto-Isolate (光隔离,如光耦合器、光敏晶体管)、降低线路阻值(好允许更大的电容值)等技术来实现,不过都并非很牢靠,最后 Philips 自己提出了可双向式缓冲器( Bi-Directional Buffer )作为较合适的延伸方案。

 还是确认一下位升、位降的反应时间

 上述的部分大体只是简易的量测,例如量测线路电容值,简易的 Hi Lo 状态尝试,并验证 Hi Lo 过程中的电压、电流是否合乎标准,并对应测试结果来调修提升电阻的阻值等,若有余裕,则可再添入防静电保护( Electrostatic Discharge ESD )或过电流保护( Over-current Protection )等设计。

 更进一步的,将需要验证 Hi Lo 于实际运作时的准位上升时间( Rise-Time )、下降时间( Fall-Time ),在标准模式下,上升时间不能慢过 1,000nS (即 1mS ),下降则不能慢过 300nS ,而快速模式则是上升、下降都不能慢过 300nS ,但是也不能太快,至少要超过 20 0.1Cb nS )才行,所谓 Cb 即是单一线路( SDA SCL )上的电容值,假若为 200pF ,则 200pF 0.1 倍为 20pF ,取 20 20 20 40 ,表示必须要超过 40nS 才行,若 10nS 就完成准位的上升、下降程序也是不行,因此不可提早完成,唯一的例外是在混接高速装置时,允许有更快的下降时间。

 若是在高速模式下,信号时间的要求就更为严苛,且已经与前述的 bus 电容值密切关连,以规格书上所言,在 10pF 100pF 400pF 两种情形为例,在 10pF 100pF 时,升降时间不能慢于 40nS ,也不能快于 10nS :若是 400pF 且电流达 3mA (电流与电容要求都近极致)则不能慢于 80nS 、亦不能快于 20nS

 完成这样的确认后,大体上已经完成所有的硬件设计工作,除非韧体、软件在验证时一直找不到错误,怀疑是信号层面的问题,这时就需要用上记忆型示波器、逻辑分析仪,对更细部的时序( Timing )运作进行记录、分析,且先从慢速开始尝试,特别是 I2C 没有慢速下限, 0Hz 的直流都可行。

 而前述的上升、下降时间量测,只要让芯片反复 Hi Lo 变化,用一般示波器即可量出(最破的机种都有 20MHz 取样率),无需波形记忆或逻辑记录。

 如何持续强化 I2C 的实体面?

 若往 I2C 的协议层面讨论,则须从 Master (主控者)、 Slave (受控者)、 Transmitter (发送者)、 Receiver (接收者)、 Multi-master (多主控者)、 Arbitration (仲裁)、 Synchronization (同步) 等基础概念开始说明,本文在此无法详述,因此我们就实体层面进行更多的强化。

 首先, I2C 系统不见得非要用提升电阻,部分情况中只要用「电流源, Current Source 」便可达到拉升效果而省去电阻。另外,也不见得整个 I2C 系统中就只倚赖两个提升电阻,每个 I2C 装置还可以在「自家门前」再行串接电阻(通常称为 Rs Series Resistor ),如此可防止峰值电压出现时的大电流伤害。


I2C 装置的近处(原文称为: Leg ,意指总 bus 下的各「腿」)再串接一个电阻,与原有的提升电路串联,可因应峰值电压的电流。(图片来源/ Semiconductors.Philips.com

 此外,从前述已可知,在高速模式下 I2C 的许多电气特性、要求都更严苛,几乎与原有标准模式、快速模式不同(连接脚名称也改成 SDAH SCLH ,以示区别),然而若有需要将高速与标准/快速一同连接(并且希望可在高速、标准/快速间切换运作),则多半需要桥接动作,透过额外的晶体管与电阻搭配,使其能够匹配运作、互通。


让高速模式( Hs-Mode Hs High-speed )的 I2C 接口与标准/快速模式( F/S-Mode Fast-speed/Standard-Mode )的 I2C 接口之桥接作法。(图片来源/ Semiconductors.Philips.com

 再者,若要将不同 Vdd 准位的 I2C-bus 系统共容运作,这时就会用上前述所提及的 Level Shift 技巧,一样用上晶体管,以进行逻辑准位( Level )的转变,如此便可实现互通运作。

 最后, I2C 其实也可以接线化使用,作法是将 Vdd SDA SCL GND 4 条线路同时拉伸。或者,若希望长距离传输,可先连接至 Buffer 缓冲器,之后将信号电压准位拉高(例如 15V ),并于传输过程中将线路进行成对双绞,以抵抗干扰。


SDA SCL 线路上各接上一个晶体管,以实现 Level Shift ,让不同 Vdd 准位的 I2C 接口能共容运作。(图片来源/ Semiconductors.Philips.com

若想实现 I2C 的长距传输,先透过 Buffer (针对此 Philips 提出 P82B96 I2C-bus Buffer )进行电压准位转换,将准位从 5V 提升至 15V ,以利长程传输,并在路程中运用成对双绞方式,降低噪声的干扰程度。同时在极长程传送时,当在收发端用上萧特基二极管或基纳二极管,以抑制假性信号。(图片来源/ Semiconductors.Philips.com

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值