歡迎您光臨本站 登入註冊首頁

概述

摘要:針對USB2.0高速數據傳輸在實際應用中存在的具體問題,深入分析了諸如協議開銷、帶寬分配、工作環境、主機硬體結構和操作系統配置、設備驅動程序等影響速度提高的種種因素。同時重點闡述了USB2.0設……

摘要:針對USB2.0高速數據傳輸在實際應用中存在的具體問題,深入分析了諸如協議開銷、帶寬分配、工作環境、主機硬體結構和操作系統配置、設備驅動程序等影響速度提高的種種因素。同時重點闡述了USB2.0設備介面中端點FIFO通道和GPIF通用可編程介面的關鍵作用。並利用USB2.0控制晶元EZ-USB FX2進行了不同模式下數據傳輸的實驗.最後在此基礎上指出解決高速數據傳輸問題的幾條對策。

1 引言
    USB(Universal Serial Bus,通用串列匯流排)是計算機與其外設連接的一種新型介面技術。儘管在2000年4月27日發布的USB2.0規範中最高傳輸速度已經達到了480 Mbps(即60 MB/s)。但是很多USB2.0設備在實際工作時的數據傳輸速度卻與此相差甚遠。本文作者曾為此利用測試軟體BusHound對諸如快閃記憶體盤、mp3、移動硬碟等典型USB2.0設備進行速度測試,其結果由表1給出。
 
    由於USB2.0的實際數據傳輸速度與PC主機和USB設備的諸多因素有關,且其中任一個因素都有可能成為影響數據傳輸速度的瓶頸。因此對此進一步地深入探討是很有必要的。

2 影響USB2.0數據傳輸速度的因素分析
(1)USB通信協議的開銷
    在USB數據通信的過程中,匯流排上傳輸的並不只是真正需要的數據信息,還要包括諸如同步信號、類型標識、校驗碼、握手信號等各種協議信息。因此實際數據傳輸的速率根本沒有可能達到匯流排傳輸的極限速度480 Mbps。且對不同的傳輸類型,存在不同的協議開銷。如在USB1.1協議下規定的每毫秒1幀中,對一個設備的中斷傳輸只能進行一次,考慮中斷傳輸的數據包為64Byte,故可算出這種傳輸的最大速度只有64 kB/s。
    對USB2.0的情況,由於採用了微幀結構,每幀分為8個微幀,且中斷傳輸在每個微幀下可以傳輸3個數據包,而每包的數據也增加到1024個位元組,故可以算出USB2.0的中斷傳輸的最大速度提高到8×3×1024 B/ms=24 MB/s。儘管與USB1.1的64 KB/s相比提高很大,卻仍與480
Mbp(60 MB/s)相差很遠。
 
    如表2所示.USB2.0中最能體現高速傳輸特點的應屬批量傳輸類型,其53.24 MB/s的理論傳輸速度上限可以說比較接近60MB/s的匯流排速度極限。因此,如果僅從獲取最高數據傳輸的目標出發,應當選用批量傳輸工作方式。
(2)USB帶寬的分配
    USB協議規定。控制傳輸應確保在低/全速時能夠使用10%的帶寬,高速時能夠使用20%的帶寬。而批量傳輸並沒有保留任何帶寬。即批量傳輸只有在控制傳輸和其它傳輸不需要使用其帶寬的情況下,方能使用剩下的帶寬。因此,儘管匯流排閑置時批量傳輸可以在一段時間裡儘快地傳輸大量的數據,但匯流排忙時批量傳輸就可能工作很慢。
    通常PC主機可能同時使用諸如滑鼠、鍵盤、攝像頭、印表機和掃描儀等多種USB設備,它們分別採用不同的傳輸方式。可以設想.如果開始只有一個設備以批量傳輸方式獨佔系統的全部帶寬。顯然速度會很快(接近53 MB/s)。但如果新插入的若干設備需要使用控制傳輸全部20%的保留帶寬,那麼先前設備批量傳輸的可用帶寬就會下降到原先的80%,傳輸速度可能變為42 MB/s以下。作為一種更極端情況是批量傳輸設備插入前,已有設備以控制傳輸方式完全佔有了20%的保留帶寬.其它設備也以中斷或者同步傳輸方式共同佔據了剩下的80%帶寬,那麼批量傳輸設備就會因為沒有保留帶寬,只能處於等待的狀態。
    USB的實時傳輸可以保證傳輸的速率恆定,而中斷傳輸要求每幀或每個微幀都能為每個設備進行一次數據傳輸。因此確保主機對設備響應的實時性。然而實時傳輸和中斷傳輸並不保留帶寬。主機只有在匯流排確實能夠分配足夠帶寬的情況下才會接受設備的通信要求。且實時傳輸不進行握手包的確認過程,因而不能確保數據傳輸的正確性。
(3)USB設備的使用環境
    USB的使用環境也是需要考慮的一個重要因素,如果處於一個電磁環境非常複雜的使用場合。不可避免地會受到干擾而產生傳輸錯誤。儘管這種錯誤在大多數通信協議(控制、中斷、批量傳輸)的管理下並不會影響通信的最終結果,但由此引發的重發、等待等糾錯工作則會明顯地影響數據傳輸速度.甚至發生堵塞的現象。因此,USB2.0設備和PC主機間最好採用帶磁環的USB2.0專用連接線,且其長度最好限制在3 m-5 m 的範圍內,這樣受到的電磁干擾和雜訊影響較小。糾錯重發的概率也較小,數據傳輸的速度也就顯得較快。
(4)PC主機本身的硬體結構與操作系統
    PC主板的數據吞吐量高度取決於USB2.0主控制器在主板晶元組結構中的位置。在用來管理I/O設備和控制I/O匯流排通信的南橋晶元的_T作模式下. 當USB2.0主控制器掛在PCI匯流排時,雖然PCI匯流排132 MB/s的帶寬處理USB1.1下12 Mbps的傳輸速度沒有問題,但對USB2.0高速模式就會受到PCI匯流排帶寬的限制。因此。較新的主板將USB2.0控制器與南橋晶元直接連接。從而消除PCI匯流排的帶寬瓶頸。
    目前PC機上大規模使用的Windows操作系統是非實時操作系統。存數據傳輸時,操作系統不能實時響應數據傳輸的請求。雖然從Windows98開始. 以及隨後的Windows Me和Windows2000增加了對USB設備類的支持,但版本仍然是USB1.1。如需使用USB2.0設備,還需安裝相應的USB2.0驅動程序。目前只有Windows XP的Service Pack1才能完全支持USB2.0。
(5)USB設備驅動程序
    USB設備的驅動可以分為設備驅動程序、USB匯流排驅動程序、USB控制器驅動程序三個部分。如圖1所示。應用程序通過使用Windows API函數與USB設備驅動程序對話。USB設備驅動程序通過調用驅動程序棧完成對設備的介面操作、數據讀寫和管理電源等功能。USB匯流排驅動程序(USBD.sys)和USB2.0控制器驅動程序由操作系統提供。設備驅動通過構造URB(USB Request Block),並傳給匯流排驅動程序來完成與總
線驅動程序的通信。通常情況下設備驅動程序需要頻繁產生中斷。而設備驅動程序系統優先順序並不高,當計算機負荷較重或者有其它優先順序較高的中斷髮生時,它的中斷得不到處理而需要等待。如果設備驅動程序向USB匯流排傳遞URB的時候設置一個較大的緩衝區.便可減少了中斷的頻率而減少等待時間。從而提高數據傳輸的速度。此外,調整驅動程序中諸如命令排隊策略、改變請求包大小等措施,也能對USB的數據傳輸速度產生一定的影響。

(6)USB設備的硬體與固件
    由於USB2.0的速度實在太快。一般單片機通過CPU的數據讀寫處理方式常常成為限制數據傳輸速度的瓶頸。因此為了實現USB設備與PC主機之間的高速傳輸,必須採用專門的介面電路和固件程序。

3 通用USB2.0設備控制器的高速工作模式
    EZ-USB FX2是一種支持USB2.0的微控制器,FX2內部集成了USB2.0收發器、智能串列介面引擎(SIE)、增強型8051內核、8.5 KB的RAM、4 KB的FIFO存儲器、I/O埠、I2C匯流排介面、8/16位數據匯流排和通用可編程介面(GPIF)等,最終通過通用的標準ATA介面連接外部電路,以適應不同的用戶功能。
    這裡串列介面引擎SIE負責完成諸如串列數據的編碼和解碼,差錯控制,位填充等支持USB底層協議的功能。數據傳輸則通常需要微處理器通過固件訪問介面晶元中的端點FIFO, 也需要微處理器通過固件訪問外圍設備的介面電路,正如圖2中標識符② 和③所示的數據傳輸路線。然而,這種工作方式會因微處理器固件程序執行較慢而限制數據傳輸速率的提高,且在高速時顯得格外突出。
  
    為了適應USB2.0高速數據傳輸的需要.這裡採用了一種特殊的數據傳輸模式,如圖2中標識符①所示的數據傳輸路線,此時無需執行內部8051固件程序便可直接實現端點FIFO與外部的數據交換。從而很好地解決了普通微處理器轉發方式造成的帶寬瓶頸。
    實際電路結構中,4 KByte的端點FIFO可以通過固件程序配置成多重緩衝的形式,這種結構可有效地提高USB帶寬的性能,平滑帶寬的抖動,並減少通信等待的時間。具體控制分為從機模式和主機模式兩種。主機模式是指利用FX2內部集成的通用可編程介面GPIF(General Programmable Interface)產生時序邏輯信號來控制與外圍設備的數據傳輸。從機模式則指利用外部信號控制端點FIFO與外設之間的數據傳輸。
    GPIF可包含8個時序狀態,支持控制輸出線CTL、狀態輸入線RDY和地址信號ADR,構造的各種時序邏輯信號可以有效地支持16位數據匯流排的雙向操作。描述GPIF波形的數組稱為波形描述符,可以在設備初始化時同固件程序一起下載.GPIF將根據其表達的時序邏輯關係,執行相應的控制作用。
    FX2的固件程序是設備運行的核心.擔負著處理USB驅動程序的請求,執行應用程序的控制指令,完成數據的讀寫操作,以及根據需要啟動GPIF周期.實現端點FIFO與外界的數據交換等功能。固件程序並不經常參與數據傳輸的具體過程.通常僅起檢測、判斷的作用,決定GPIF的工作在何時開始.何時停止。

4 USB2.0高速數據傳輸的速度測試
    USB2,0速度測試的基本方法是通過PC主機上的測試軟體,記錄該PC主機與某USB設備在固定時間內交換的數據信息流量,進而算出實際使用中的數據傳輸速度。這裡採用的速度測試軟體是美國Perisoft公司提供的一種名為Bus Hound的匯流排分析測試軟體.其界面如圖3所示.這個軟體在運行中不會對設備的工作產生任何影響。用該軟體來觀察USB設備工作情況,可以直接讀取當前USB設備輸入輸出的數據量大小、數據傳輸速度和設備屬性等信息。
    本文為USB2.0實際傳輸速度的具體測試流程如圖4所示。利用EZ-USB FX2控制晶元開發的USB2.0設備通用控制器和一台PC機。用一根大約2 m長的帶磁環的USB2.0專用連接線連接在一起。PC機的硬體配置是Intel P4 2.4 GHz的CPU,基於Inte1848晶元組的主板,主板上帶有支持高速模式的USB2.0介面,256 M DDR333內存. 操作系統是WindowsXP SP1。主機設備驅動程序採用Cypress公司為FX2系列控制器提供的通用驅動程序ezusb.sys。其中數據緩衝區設為64KB,應用程序用VC編寫,其作用是向USB介面控制器發送需要數據上傳的指令和上傳數據量的大小后。將數據從USB設備讀到PC之中。作為USB設備的FX2的固件程序在Keil集成開發環境中開發。應用GPIF進行邏輯控制.並將所用端點6設為單區容量大小為512Byte的4重緩衝模式。固件程序的功能只是將來自并行數據線的數據源源不斷地送往USB的端點FIFO中。
 
    在固件程序設計中首先採用圖2中標識符②和③所示的數據傳輸模式.測得的數據傳輸速度一直在200 KB/s以下。然後採用圖2中標識符①所示的數據傳輸模式,在實驗中讓PC主機多次重複採集大量數據。以提高速度測試的準確性。在PC機不接其它USB設備一次採集數據的量為650.2 Mbyte的情況下,USB2.0匯流排的實際數據傳輸速度最高達到了25.5 MB/s,即204Mbps。

5 結束語
    綜上所述,這裡強調幾點看法:首先,人們通常所說的480 Mbps是USB2.0匯流排速度的上限.考慮通信協議的開銷后,實際數據的傳輸速度存理論上最高也只有53 MB/s(426Mbps).實際綜合條件下15 MB/s至25 MB/s都可以作為合理的高速目標。其次,為了追求數據的高速傳輸時應當考慮採用批量方式.但在多設備同時工作的場合考慮實時響應.USB2.0下的中斷方式也是不錯的選擇。再者,USB設備中微處理器轉發數據的傳統方法不能適應高速數據傳輸的要求,必須建立USB端點FIFO和應用數據通道之間的直接聯繫。另外,為了真正實現數據的高速傳輸.必須綜合考慮PC主機本身的軟硬體配置、設備驅動程序開發和實際工作環境。


[admin via 研發互助社區 ] 實現USB2.0高速數據傳輸的問題探討已經有2034次圍觀

http://cocdig.com/docs/show-post-44838.html