摘要:如果必须隔离一个与PC机连接的设备,人们很自然地会选择USB接口。USB广泛的工业支持和简易结构(USB电缆仅有4条线)使其成为一种通用的PC接口。USB控制器配合SPI接口的嵌入式系统可以很容易地实现电气隔离。SPI接口由简单的单向信号线构成,可在任何速率下运行。
USB连接器包含四条线:2条用于电源供电(VBUS和GND),2条用于USB数据传输(D+和D-)。VBUS提供5V电源,电流可达500mA。D+和D-为双向信号线,信号传输速率为12Mbps (每位83ns)。D+和D-信号电平为3.3V。
图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-是双向信号,使得隔离更加复杂。
符合这些要求的理想接口是SPI (串行外围设备接口),该接口由Motorola定义,现已用于许多半导体器件。由于其简单、高效,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" (非应答)握手信号完成信号流量控制。由此,外围设备告知主机请求的数据还没准备好,主机应稍后再试。
图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数据速率,以适应高性价比设计中的光耦选择。
详细电路图(PDF, 204kB)
图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)已经成为外围设备与个人计算机连接的标准方式。如果一个与PC连接的设备需要电气隔离,USB将是一个很自然的选择接口。USB的两个著名的隔离应用是基于PC平台的医疗设备和具有很大地电位差的工业应用。USB基础信号
USB具有以下三种工作速率:- 低速,1.5Mbps
- 全速,12Mbps
- 高速,480Mbps
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信号SPI Signal | Description | Comments |
SS# | Slave Select | Selects the chip for data transmission, supplied by the master |
MOSI | Master Out Slave In | Unidirectional data pin |
MISO | Master In Slave Out | Unidirectional data pin |
SCLK | Serial Clock | Serial clock, supplied by the master |
表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设计实例
详细电路图(PDF, 204kB)
图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接口的灵活性。
评论
查看更多