I2C 是一种流行的串行协议,适用于电源控制器、ADC、DAC、EEPROM 以及其他器件。在某些数据采集和电源控制设备中,您必须把 I2C主设备与一个或多个从设备隔离开来,以便解决噪声、接地和安全等问题。另外,虽然可以把 128 个外设连接到总线,但在某一部位,地电位差和总线电容过大会使噪声余量和定时余量变小。本设计思路表明如何利用用一种符合 400kHz 增强型 I2C 总线规范要求的方法,对 I2C 或 SMBus信号进行快速的、无毛刺光隔离。I2C 总线由双向时钟和数据线(SCL 和 SDA)组成,SCL和SDA 均用电阻器或电流源来拉高电平。各器件均用集电极开路的I/O 引脚连接到总线。有一种隔离I2C信号的办法是用图1所示电路的变种来实现的,图1仅仅示出了 SDA;SCL 工作原理与SDA相同。
图1,本电路是一种简单的I2C隔离器。
图 1 所示电路的工作原理是,把非隔离 的SDA 线路电位拉低的一个器
件会使一个光耦合器 LED导通,从而使隔离的 SDA 线路电位拉低,并使隔离侧的光耦合器 LED不工作,反之亦然。然而,如果隔离势垒两侧的器件正在拉低各自的 SDA 线路的电位,则这些光耦合器就处于一种不确定状态,两个 LED 部分导通。当非隔离的器件释放其 SDA 线路时,SDA线路上的电压上升,直到隔离侧的 LED 能够完全导通为止。只有这样,非隔离的 SDA 线路才会再次变为低电平。这种情况在I2C通信期间的各个时候都会发生,其中包括时钟同步(在 SCL 线路上)、多主设备仲裁、SMBus 中断仲裁(在 SDA 线路上)。图 2 示出了图 1 所示电路的工作细节。 74HC125 三态非反相缓冲器仿真两个 I2C 器件的漏极开路输出。 线上的逻辑低电平迫使输出端变为低电平,而逻辑高电平则使输出端处于高阻抗状态。波形1 和波形 2 表示 SDA缓冲器 和隔离的 SDA 缓冲器的使能线的输入信号。波形3 和波形 4 则分别表示相应的输出信号。
图2,简单的 I2C 隔离器在某些情况下会产生大量毛刺。
这类电路以多种形式发表在报刊上,而且通常配有需要 5 ~ 10 mA LED 驱动电流的慢速光耦合器。这些电路可在有限的设备中使用,但它们速度慢,而且仍然会产生毛刺。试图用高速元件来克服速度问题和驱动问题,只会使这些电路变得几乎无法使用。图 1 所示电路使用需要 500mA LED 驱动电流的高速 HCPL2300 光耦合器。如果两条 SDA 线都保持为低电平,然后同时释放,则两个光耦合器就会互相对抗,形成振荡器(图 3)。这种振荡的特性取决于上拉电阻、供电电压和电容型数据线路(去掉 9pF 示波器探头中的一个,就会使振荡停止,而用一个 10pF 电容器代替这一探头,就会再次开始振荡)。
图3,在图1所示电路中使用高速元件会导致不可预测的行为。
图4,改进的I2C隔离器速度快,不会产生毛刺。
图 4 所示电路通过建立“高”(上拉至 5V)、“拉低”和“被拉低”三种逻辑电平来解决这些问题。当两侧都处于空闲高电平时,两个光耦合器均关断。当某一侧把其SDA线拉至低于 0.4V(适合于集电极开路输出和漏极开路输出的安全假定值)时,比较器使其 LED导通。另一侧的SDA线拉低至大约 0.6V,这仍被解释为逻辑低电平,但不会导致那一侧的 LED 导通。当两侧均在拉低各自SDA线电平时,两个 LED 都导通。在这种状态下,如果一侧释放其SDA线,那么它会很明显地从 I2C器件输出的低电平升至大约 0.6V。
图5,这一示波器照片示出了改进的I2C隔离器的工作情况。
图 5 示出了图 4 所示电路的工作细节。LT1719 比较器和 Agilent公司的 HCPL2300 光隔离器的组合,能满足 400kHz 增强 I2C 总线规范的定时要求。总传输延迟大约为 100 纳秒,因此您可以调节逻辑阈值来适应其它要求。虽然您可以使用该电路来使SDA 和 SCL 线支持时钟完全同步,但只要主设备的通信速度不快于最慢的从设备,就不必使用这种额外的电路。如果您不需要时钟同步,则您可在SCL中 使用一个光耦合器。