摘要:如果必須隔離一個與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實現隔離。](/article/UploadPic/2009-4/2009424173350153.gif)
圖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-是雙向信號,使得隔離更加復雜。](/article/UploadPic/2009-4/2009424173350925.gif)
圖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)。這些低頻信號易于進行光隔離。](/article/UploadPic/2009-4/2009424173350953.gif)
圖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信號更易于通過光耦傳輸。](/article/UploadPic/2009-4/2009424173350794.gif)
圖4. SPI數據速率和USB信號速率的比較。SPI信號更易于通過光耦傳輸。
系統如何按照圖4使得存在巨大差異的USB控制器的SPI總線速率與USB信號速率協調工作呢?USB的優點之一是通過內部流量控制實現“自節流”。通過使用“NAK" (非應答)握手信號完成信號流量控制。由此,外圍設備告知主機請求的數據還沒準備好,主機應稍后再試。
![圖5. USB總線的低速外圍設備對主機IN數據請求的響應。主機在信息包362-364中發出數據請求。外圍設備發出信息包420表示數據準備就緒。插入的IN-NAK信息包為USB流量控制,外圍設備在數據準備就緒之前始終響應NAK。](/article/UploadPic/2009-4/2009424173350178.gif)
圖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數據速率,以適應高性價比設計中的光耦選擇。
![圖6. 隔離USB設計原理圖,左邊部分由USB總線自身供電,右邊部分使用隔離電源供電。在SPI接口處進行隔離,使得設計簡單,并且不受USB總線時序的影響。](/article/UploadPic/2009-4/2009424173350921.gif)
詳細電路圖(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。](/article/UploadPic/2009-4/2009424173351891.gif)
圖7. 在隔離接口兩側的SPI SCLK信號,上部:ISOVCC = 8.3V,ISOGND = 5V。下部:由USB供電:VCC = 3.3V,GND = 0V。
圖7顯示了隔離接口兩側的SCLK信號,兩條曲線的基線都在屏幕底部。上部曲線顯示由U6產生的SCLK信號,但有5V的偏移。
![圖8. 隔離的SCK信號(上部)和處于MAX3420E側的SCK信號(下部),擴大比例顯示。](/article/UploadPic/2009-4/2009424173351678.gif)
圖8. 隔離的SCK信號(上部)和處于MAX3420E側的SCK信號(下部),擴大比例顯示。
圖8是圖7放大比例后的圖形,用于說明光耦的性能。這個設計中選擇的電阻使光耦在起始位置有0.5μs的延遲。SCLK中間部分的短脈沖由U6驅動SCLK IO引腳的程序產生。U6的這部分程序如圖9所示。
![圖9. AtTiny13對MAX3420E寄存器進行讀操作的匯編程序。在此可以調整SPI接口的時序以提高光耦的性價比。](/article/UploadPic/2009-4/2009424173351719.gif)
圖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實現隔離。](/article/UploadPic/2009-4/2009424173350153.gif)
圖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-是雙向信號,使得隔離更加復雜。](/article/UploadPic/2009-4/2009424173350925.gif)
圖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)。這些低頻信號易于進行光隔離。](/article/UploadPic/2009-4/2009424173350953.gif)
圖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信號更易于通過光耦傳輸。](/article/UploadPic/2009-4/2009424173350794.gif)
圖4. SPI數據速率和USB信號速率的比較。SPI信號更易于通過光耦傳輸。
系統如何按照圖4使得存在巨大差異的USB控制器的SPI總線速率與USB信號速率協調工作呢?USB的優點之一是通過內部流量控制實現“自節流”。通過使用“NAK" (非應答)握手信號完成信號流量控制。由此,外圍設備告知主機請求的數據還沒準備好,主機應稍后再試。
SPI數據速率和USB NAK
![圖5. USB總線的低速外圍設備對主機IN數據請求的響應。主機在信息包362-364中發出數據請求。外圍設備發出信息包420表示數據準備就緒。插入的IN-NAK信息包為USB流量控制,外圍設備在數據準備就緒之前始終響應NAK。](/article/UploadPic/2009-4/2009424173350178.gif)
圖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總線時序的影響。](/article/UploadPic/2009-4/2009424173350921.gif)
詳細電路圖(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。](/article/UploadPic/2009-4/2009424173351891.gif)
圖7. 在隔離接口兩側的SPI SCLK信號,上部:ISOVCC = 8.3V,ISOGND = 5V。下部:由USB供電:VCC = 3.3V,GND = 0V。
圖7顯示了隔離接口兩側的SCLK信號,兩條曲線的基線都在屏幕底部。上部曲線顯示由U6產生的SCLK信號,但有5V的偏移。
![圖8. 隔離的SCK信號(上部)和處于MAX3420E側的SCK信號(下部),擴大比例顯示。](/article/UploadPic/2009-4/2009424173351678.gif)
圖8. 隔離的SCK信號(上部)和處于MAX3420E側的SCK信號(下部),擴大比例顯示。
圖8是圖7放大比例后的圖形,用于說明光耦的性能。這個設計中選擇的電阻使光耦在起始位置有0.5μs的延遲。SCLK中間部分的短脈沖由U6驅動SCLK IO引腳的程序產生。U6的這部分程序如圖9所示。
![圖9. AtTiny13對MAX3420E寄存器進行讀操作的匯編程序。在此可以調整SPI接口的時序以提高光耦的性價比。](/article/UploadPic/2009-4/2009424173351719.gif)
圖9. AtTiny13對MAX3420E寄存器進行讀操作的匯編程序。在此可以調整SPI接口的時序以提高光耦的性價比。
在r4標號前,SCK信號驅動為低電平,然后再次驅動為高電平(SCLK_LO和SCLK_HI是匯編宏,不需要改變代碼就可以很容易對實際電路的IO引腳賦值)。
這兩個語句之間插入少量NOP指令,圖8中的窄脈沖可以變寬,由此,使用低速光耦(這意味著更低的成本)成為可能。這個方法證明在光隔離應用中使用SPI接口的靈活性。
評論