对I2C信号和SMBus信号进行无毛刺快速隔离的方法
——

图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公司 (http://www.agilent.com/)的 HCPL2300 光隔离器的组合,能满足 400kHz 增强 I2C 总线规范的定时要求。总传输延迟大约为 100 纳秒,因此您可以调节逻辑阈值来适应其它要求。虽然您可以使用该电路来使SDA 和 SCL 线支持时钟完全同步,但只要主设备的通信速度不快于最慢的从设备,就不必使用这种额外的电路。如果您不需要时钟同步,则您可在SCL中 使用一个光耦合器。 隔离器相关文章:隔离器原理
评论