概述
通用串行总线(USB)已经成为外围设备与个人计算机连接的标准方式。如果一个与 PC 连接的设备需要电气隔离,USB 将是一个很自然的选择接口。USB 的两个著名的隔离应用是基于 PC 平台的医疗设备和具有很大地电位差的工业应用。

 

USB 基础信号
USB 具有以下三种工作速率:


低速,1.5Mbps


全速,12Mbps


高速,480Mbps


本文讨论全速(12Mbps) USB 连接的光隔离,12Mbps 的速度可满足一般数据传输的带宽要求,设计中使用廉价光耦,支持足够的数据传输速率。

 

USB 连接器包含四条线:2 条用于电源供电(VBUS 和 GND),2 条用于 USB 数据传输(D+和 D-)。VBUS 提供 5V 电源,电流可达 500mA。D+和 D- 为双向信号线,信号传输速率为 12Mbps (每位 83ns)。D+和 D- 信号电平为 3.3V。

 

USB 隔离的设计挑战

 

图 1. 一个 USB 外设可以在三个位置隔离:位置 1,USB 总线;位置 2,收发器接口;位置 3,应用接口。现在绝大部分设计中,SIE 和收发器集成在一起,无法在位置 2 实现隔离。
 

USB 外设结构框图如图 1 所示。从右至左来看该图,USB 收发器连接至 D+和 D-,发送或接收数据都由 OE (输出使能)控制。中间单元是 USB 串行接口引擎(SIE),其作用是将总线信号(由收发器发送和接收)转换成字节数据或 USB 信号,以供 USB 外设使用。最左边的单元是应用电路,可能是微处理器、专用集成电路或数字信号处理器(DSP)。

 

标记 1、2 和 3 的灰色的长方形,显示了放置光耦、隔离 USB 设备与主计算机的三种可能位置。

 

图 2. 示波器显示 USB D+和 D- 信号(图 1 中的位置 1),83ns 的位时间和严格匹配的上升 / 下降时间,使光耦隔离很难保持信号的保真度。D+和 D- 是双向信号,使得隔离更加复杂。
 

位置 1

下列理由说明在 USB 总线上进行光耦隔离是不切实际的,见图 2:


信号速率为 12MHz,对于性价比较高的隔离器来说成本过高。


D+和 D- 信号的传输延迟、偏差必须完全一致,使用光耦隔离器很难满足一致性要求。


总线为双向,而隔离器为单向,使光耦隔离更加复杂。而且对于一个使用集成收发器的外围设备,无法得到 OE 信号(指示传输方向)。

 

位置 2

使用外置收发器的 USB 外设其收发器接口暴露在外部,对于这些单向信号可以考虑使用光耦隔离。尽管如此,这个位置和位置 1 有着相同问题:数据速率过高,而且有多路 12MHz 速率的信号需要隔离。VPO、VMO、RCV、VPI 和 VMI 信号都运行在 12MHz 速率,必须严格保持这些信号传输延迟、偏差的一致性。此外,现代 USB 设计中将 SIE 和收发器集成在同一芯片,也很难获得这个接口。

 

位置 3

这是最有希望实现隔离的位置,这个接口工作速率低于 USB 数据速率和线速率,且该接口可以完全由单向信号构成。事实上,一个理想的接口应该只使用少量单向信号,且这些信号的数据速率远低于 USB 的 12MHz 信号速率。

 

符合这些要求的理想接口是 SPI (串行外围设备接口),该接口由 Motorola 定义,现已用于许多半导体器件。由于其简单、高效,SPI 成为非常流行的接口。

 

SPI 基础信号

 

表 1 给出了 SPI 接口的 4 个信号。SPI 为主从式接口,主接口启动并控制与一个从接口的通信。主机提供从机选择信号(SS#)和串行时钟(SCLK),用于同步数据传输。SPI 接口具有四种时钟模式,具体由 2 个模式信号 CPOL (时钟极性)和 CPHA (时钟相位)决定,这些信号表示为(CPOL, CPHA)。

 

图 3 描述了微处理器与 SPI 从设备间的 SPI 数据传输,图 3 采用最常见的 SPI 模式(0,0)。在(0,0)模式中,时钟在无效状态下为低电平。SPI 主机在第一个 SCLK 上升沿之前将 MOSI 数据准备好。SPI 数据在 SCLK 下降沿变化,主从设备均在上升沿对数据进行采样。

 

图 3. 工作在模式(0,0)的 SPI 接口,如果 SCLK 信号为低有效(静止状态为高),同样的接口也可工作在模式(1,1)。这些低频信号易于进行光隔离。
 

很容易在微处理器上实现 SPI 接口,即使是没有包含硬件 SPI 单元的微处理器。SPI 接口只需要微处理器通过 4 个通用 IO 引脚(GPIO)构建图 3 信号,子程序可通过直接触发 IO 引脚的读写操作实现。

 

图 4 显示了 USB 外设控制器使用 SPI 接口时,SPI 与 USB 的数据速率差异。图中,主控制器实现 USB 键盘功能,并周期性地点亮一个 LED 灯。图 5 所示 SPI 数据传输可由 LED 闪烁指示(触发一个输出位);USB 通信为 USB 主机请求键盘数据。

 

两种总线之间数据速率的差异很显著。频率较低的单向 SPI 信号比 12MHz 的双向 USB 总线信号更易于隔离。SPI 信号使隔离方法变得非常简单,能在任何频率下运行,适用于各种光隔离器。

 

图 4. SPI 数据速率和 USB 信号速率的比较。SPI 信号更易于通过光耦传输。
 

系统如何按照图 4 使得存在巨大差异的 USB 控制器的 SPI 总线速率与 USB 信号速率协调工作呢? USB 的优点之一是通过内部流量控制实现“自节流”。通过使用“NAK" (非应答)握手信号完成信号流量控制。由此,外围设备告知主机请求的数据还没准备好,主机应稍后再试。

 

SPI 数据速率和 USB NAK

 

图 5. USB 总线的低速外围设备对主机 IN 数据请求的响应。主机在信息包 362-364 中发出数据请求。外围设备发出信息包 420 表示数据准备就绪。插入的 IN-NAK 信息包为 USB 流量控制,外围设备在数据准备就绪之前始终响应 NAK。

 

图 5 显示了 USB 数据传输的流量控制机制。从信息包 362 开始,主机发出 Get_Descriptor-Configuration 请求。信息包 363 从第二个字节到最后一个字节的 09 表示主机请求外设发送 9 个字节的数据。外设在信息包 364 中对请求应答,然后对请求进行译码,并将请求数据装入数据 FIFO 的末端 0 处。低速外围设备需要一定时间才会应答这个请求,低速 SPI 总线会进一步延长响应时间。

 

988.667 微秒后(信息包 364 后),主机在信息包 366 中开始请求发送数据。外设没有数据,USB 硬件自动产生 NAK 握手响应,表明“忙碌中,稍后再试”。主机在信息包 368 中重试,并从外设获得同样的 NAK 应答。这个 IN-NAK 过程一直持续到信息包 419,外设最终完成请求数据的装载,并在数据末端 0 处准备数据发送。此时,外设在信息包 420 中将以 9 字节的数据包响应取代 NAK,主机在信息包 421 中应答。

 

IN-NAK 响应(图 5 中用虚线矩形标出)可能发生多次,这意味着 SPI 接口的工作速率没有最低限制。允许设计者调整 SPI 数据速率,以适应高性价比设计中的光耦选择。

 

隔离 USB 设计实例

 

图 6. 隔离 USB 设计原理图,左边部分由 USB 总线自身供电,右边部分使用隔离电源供电。在 SPI 接口处进行隔离,使得设计简单,并且不受 USB 总线时序的影响。

 

图 6 是利用 Atmel®的低成本微处理器 AtTiny13 (U6)、光耦 HCPL-2531 (U3-5)和 MAX3420E (U1)构建,MAX3420E 是带有 SPI 接口的 USB 外设控制器。虽然 U6 不包含硬件 SPI 单元,通过对 GPIO 引脚进行“逐位控制”可以很容易地实现 SPI 接口。U1 提供四个通用输入、四个通用输出引脚取代(加至) U6 实现 SPI 接口的引脚。这个设计使用两个输出引脚驱动 LED 指示器 D1 和 D2,一个输入引脚连接至按钮 PB1。因为 U1 本身包含由 SPI 接口控制的 IO 引脚,这些 IO 与 U6 本质上是隔离的,因此不需要额外隔离。

 

图 7. 在隔离接口两侧的 SPI SCLK 信号,上部:ISOVCC = 8.3V,ISOGND = 5V。下部:由 USB 供电:VCC = 3.3V,GND = 0V。
 

图 7 显示了隔离接口两侧的 SCLK 信号,两条曲线的基线都在屏幕底部。上部曲线显示由 U6 产生的 SCLK 信号,但有 5V 的偏移。

 

图 8. 隔离的 SCK 信号(上部)和处于 MAX3420E 侧的 SCK 信号(下部),扩大比例显示。
 

图 8 是图 7 放大比例后的图形,用于说明光耦的性能。这个设计中选择的电阻使光耦在起始位置有 0.5µs 的延迟。SCLK 中间部分的短脉冲由 U6 驱动 SCLK IO 引脚的程序产生。U6 的这部分程序如图 9 所示。

 

图 9. AtTiny13 对 MAX3420E 寄存器进行读操作的汇编程序。在此可以调整 SPI 接口的时序以提高光耦的性价比。
 

在 r4 标号前,SCK 信号驱动为低电平,然后再次驱动为高电平(SCLK_LO 和 SCLK_HI 是汇编宏,不需要改变代码就可以很容易对实际电路的 IO 引脚赋值)。

 

这两个语句之间插入少量 NOP 指令,图 8 中的窄脉冲可以变宽,由此,使用低速光耦(这意味着更低的成本)成为可能。这个方法证明在光隔离应用中使用 SPI 接口的灵活性。

 

结论
由于 USB 数据信号的高速、双向和严格的一致性要求,电气隔离 USB 设计面临诸多挑战。如果隔离 USB 控制器和应用处理器之间的接口(图 1 中的位置 3),隔离问题将会变得简单,因为这个接口可在任意速率下运行。位置 3 的低信号速率使其非常适合低成本光耦解决方案。对于任何隔离设计,需要隔离的线路越少,成本就越低。因为 SPI 接口只使用四条低速、单向信号线,所以 SPI 接口是隔离的理想位置。因为 MAX3420E 可以通过简单的 SPI 接口与任意的微处理器进行通信,是嵌入式系统增加 USB 功能的理想方案,也为系统提供了简单的隔离方案。MAX3421E 也可以用作隔离型 USB 主设备,MAX3421E 即可作为外围设备也可作为主设备,使用与 MAX3240E 相同的 SPI 接口。