2007年9月19日 星期三

USB Bus 之邏輯分析儀(一)

上回我們有提到關於PC based 的邏輯分析儀的一些觀念,

(http://chamberplus.blogspot.com/2007/09/usb-controller.html)

這個想法就是來自人家的一本書,當然,在該書中所提到的介面,還是用傳統的RS232。

而對認識版主的人來說:當然不可能還在用這種傳統介面,我們要講的就是USB 啊。

上回我也有提到:在使用USB當傳輸介面時,雖然速度會比傳統的RS232來的快。

但是,在先天上,USB介面會碰到一個比較「棘手」的問題是:

您不知道您所使用的USB Port 上還會不會有人跟您搶傳輸頻寬?!

這對於一些要號稱取樣率很高的PC based 儀器設備來說:可能是另一種挑戰。

我們今天就來作個簡單的實驗。來看一下實際的情形。

首先我們找來一台國產很平價的PC Based 的邏輯分析儀(LA, Logic analyzer)。

至於是哪一家品牌的?我想各位看倌,如果您有用過的,應該就會有印象吧。

這台LA 是屬於16 channels 的邏輯分析儀....規格上的取樣率是:200MHz~100Hz 。

(關於這一部份我上回有提過:就算您有很高的取樣率,但若您USB 頻寬搶不到的話...

您可能會有取樣結果的資料傳不出去的危險!)

在實驗上,我們就讓這一台LA隨時一直在抓資料,我們來攔截USB Bus的資料來分析結果。

而在所有的取樣Channel 上,我們就設定:Channel 0 & 1及 Channel 15 為High  !

我們來看結果如何?!

下圖我們從該PC 端的應用軟體來看:果然是如我們所預料。


當然,我們若用一般八位元的資料來看的話,他們就分別為0x03及0x80 的值。

--------
在看USB BUS上的資料之前,我們先來分析一下:若您要用USB 來抓這種即時資料時,

您該如何去控制USB BUS的開開關關呢?!因為其實USB BUS 對於上層的應用程式到驅動程式,

往往是:一發不可收拾啊,資料您沒收完,您的底層的驅動程式是很難放開的,讓您的應用程式

去處理資料的...這是USB在設計上為了取得高效能的傳輸因素。...

而對於這種儀器設備來說:又好像資料不能流失(Miss) !所以,人家會比較容易想到的方法

就是:Bulk 傳輸方式。但是Bulk 的傳輸方式,在傳輸的Handshake上是要講明每一筆傳輸資料的大小的!

所以,每一次的BULK的傳輸之前就必須利用Control Token 來下達傳輸命令的。

(當然,您也可以利用類似Mass Storage Device Class 的那種BOT(Bulk Only Transfer)的方式來處理命令)

但相對來說:USB Device 端的韌體就比較難處理,利用Control + Bulk 還是一般人比較容易處理的!)

所以,我們先得到一個基本USB 傳輸觀念了,我們再來看實際的傳輸情況:

首先,我們發現果然不出我們所料:就是利用Control Token 中的Vendor Control 命令來下達傳輸啟動介面。

所以啊,名義上雖然是即時(也就是無時無刻)的抓資料,但我們發現:其實,在USB的頻寬上是塞入一些Control Token 的,所以,一定會每隔一陣子,USB BUS上就會停下來一下下的。

至少,在這一個Control Token 的SOF 之間是一筆也沒傳出來。

(再跟各位複習一下:這一組抓到的資料就是OHCI的USB 南橋資料!所以,可以在一個SOF之間完成所有Control Token)。

從BULK的資料內容,我們也的確看到了 0x80這一組熟悉的數據內容。...

(或許您是有很好的工程Sense的人,您應該會開始有一些疑問了吧?!)

我們再來看另一組資料內容:

還是利用Control Token 來控制BULK的傳輸啟動機制。還是一樣會犧牲一點USB的頻寬。

我們也發現0x03 這個我們一開始所設定的測試條件之數據資料。

喔,原來,他們在所謂的 16 Channels 之MSB 與LSB的資料是分開分別傳給PC端的。

但我們不能說人家的機器是分別取樣的喔。否則鐵定會發生MSB 與LSB 不同步取樣的問題。

因為人家的機器裡是有Embedded 一些記憶體Buffer的。所以,USB Bus只不過是從這些記憶體的BUFFER中,把資料傳出而已吧了!

這一部份我們就先不追究,我們此次實驗的目的就要探討USB Bus 頻寬的問題。

好,我們接下來看:我們都知道:一般PC 南橋的USB是兩個PORT是共用一組南橋介面。

(好像這樣說有點不太對?!我們一般可以在下圖中發現一般PC主機板是有兩組ControlSet 的,

當您把USB 裝置插到另一組USB port時,可能會碰到另一個ControlSet,而此時作業系統會再跟您要驅動程式的!

所以,這一部份是南橋硬體與作業系統之間的設定,如果您們有很好的名詞解釋的話,

也歡迎回應說明!謝謝!)

當我們把一支簡單的滑鼠插在另一個USB 共用的PORT時,我們在USB Bus 上就發現了這個低速裝置的Handshake了。

如下圖所示:

這一個毫不起眼的低速裝置的差入會造成USB Bus 上怎樣的變化呢?!

沒錯,他就是會搶USB Bus 上傳輸的頻寬!而且很討厭的是:他不知道什麼時候會插入,

而且您的USB 裝置還不知道這件事哩!!

我們把整個SOF之間的資料列出來分析:(就在"2" 與 "3"之間插進這一個低速裝置PID)

而當沒有插入此一低速裝置的Handshake 時,又是如何?!






我們發現:這樣一個小小稀疏平常的低速裝置的資料,

竟然使得兩個SOF 之間的Bulk 傳輸量從 18 組變成了17 組。當場就少了一組。

一組就是64 Bytes ...就是64 個取樣數據資料被擠到下一個SOF才能再傳。神奇吧

這也代表著這64 組取樣數據要多留在記憶體Buffer 中多待一下子...如果您前端的取樣數據一直進來的話,

就有可能會發生Overflow的問題風險。....

------
好了,若是您在USB PORT上面不是插入低速裝置,而是像大量資料的隨身碟時,

那個結果我想大家都可以想像的到了吧!所以,這種機器當然在訴求上就要強調他們記憶體Buffer 的深度啊。

不過,就我之前提過的:再深的記憶體終究還是可能面臨Overflow的可能性。

因為您永遠不知道您的客戶在使用USB介面時,他們會不會在USB Bus 上插入什麼USB 裝置?

---
從以上一個小小的實驗,我們大家可以體會得到:為什麼這種算是窮人版的LA為何比一般稍微專業一點LA便宜那麼多?!

因為在他們的使用上是有一些限制的。我可沒有說:這種機器是不能買的...

因為畢竟他在售價上是有很大的價差空間的...對於一些人來說:或許這樣的功能已經可以符合他多數的應用。

PS:我們只是純粹分析USB Bus上的傳輸頻寬而已,還沒考慮到上層應用程式端所有造成資料LAG的問題呢。

或許改用ISO Token 會比較好一點,但相對來說:也會有相對ISO Token的問題產生...

而相對來說 USB Controller 所扮演的USB 資料流控管來說,就相對很重要了...

當然,您不是什麼有名的儀器大廠,所以,人家的USB  Controller 也不會為您量身訂作的...

更何況要幫您從韌體到驅動程式再到應用程式端...一路把任都二脈打通是很難的...

像這一家的這一台機器就是用國內某USB廠的Controller ...人家也是隨便從另一個產品線,

拿一個覺得大概可以給您用的一棵USB Controller 給您用的...巧的是:另一家相仿的公司也是用同一家的...

到底是誰抄誰的...我也不想去釐清...好玩的是:我剛好有認識這家USB Control廠的人員...

他們說:他們給這兩家的USB Controller 的確也都沒花什麼心思幫他們解決USB的問題...

結果,這兩家公司還可以在市場上殺得您死我活的呢!.....厲害吧...

----

   後話:我看了全華的那本「基礎邏輯分析儀設計」以及這台市售的LA之後,我發現用我常用的那顆USB COntroller,要作這樣一台陽春型或學生版的LA 好像也不難喔...因為,我直接利用8051 對於外部Memory bus 的Access 信號來當作取樣Timing ...然後,讓USB Bus直接 Access 這些數據傳輸至PC 端...好像就完成了...

然後,我還有三組A/D...還可以當混合型的LA+示波器...看來還蠻好玩的!...

我看我來作一台實驗機來試試...因為最近Survey 了幾家大廠的混合型LA+示波器,價碼都不低...(Aglient..Lecroy..Tektronix..)

雖然我不需要很高的取樣率,但他們機器的起跳都是200~300 MHZ 的...然後價格也都不貲...都至少20 萬台幣起跳的!..

您說一般人,或是學生哪玩得起啊...

    看來有空的時候,可以DIY的東西還蠻多的嘛!...就敬請期待吧...還是有興趣一起研究啊?!

可以跟版主聯絡啊...大家可以交個朋友....也謝謝您們的指教。




 

2 則留言:

  1. 想聽聽版主對於這篇報導的看法,謝謝!

    轉貼自電子工程專輯 --- "挑戰更高傳輸速率 USB 3.0向Firewire宣戰"


    英特爾(Intel)宣佈正與多家業者合作,訂定把USB的理論吞吐量提高到4Gbps以上的新一代介面標準,號稱傳輸速率較現有標準10倍。該USB 3.0規格的目標是在應用層提供300Mbytes/seconds的可用速率,並添加新的服務品質性能,好跟另一種互連介面標準1394 (又稱為Firewire)相抗衡。
    在1990年代USB標準問世之初,針對鍵盤和滑鼠的USB1.1規格的傳輸速度小於12Mbps;而Firewire鎖定的則是諸如攝錄影機這類傳輸速率達100Mbps及以上的視聽應用。然而,隨著時間的推移,USB已經獲得了廣泛的應用,速率逼近480Mbps,相較之下,Firewire的應用遠遠沒有這麼廣泛。而根據Intel在美國舊金山IDF的最新宣佈,新一代的USB標準目標就是超越Firewire。
    Intel的一位工程師表示,他們已經透過軟體模擬以5Gbps和25Gbps的速率對新協議的基本版本進行了測試。該連結標準無媒介限制(media agnostic),將執行在銅線和光纖上。這種又稱為SuperSpeed USB的互連標準,目標是為基於快閃記憶體的設備提供服務,包括USB隨身碟、攝影機以及媒體播放器,設計目標之一就是為了跟上快閃記憶體晶片的傳輸速度。
    「我們不想成為系統中的瓶頸,」Intel負責監督USB 3.0標準訂定的主管Jeff Ravencraft表示。目前包括HP、Microsoft、NEC、NXP和TI都正協助新標準的訂定,預計新規格會在11月於美國San Jose舉行的兩天會議中進行審查。Intel表示,該標準訂定小組將向所有成員公司發出最終規格召集令,期望能在明年初通過,並在2009年初完成首款晶片實作。
    USB3.0將採用一種新的實體層,其中,用兩個通道把數據傳輸(transmission)和確認(acknowledgement)過程分離,因而達到較高的速度。為了取代目前USB所採用的輪流檢測(polling)和廣播(broadcast)機制,新的規格將採用一種封包路由(packet-routing)技術,並且僅容許終端設備有資料要發送時才進行傳輸。
    新的連結標準還將讓每一個元件支援多種資料流,並且每一個資料流都能夠維持獨立的優先級(separate priority levels);該功能可在視訊傳輸過程中用來終止造成抖動的干擾。資料流的傳輸機制也使固有的指令隊列(native command queuing)成為可能,因而能使硬碟的資料傳輸最佳化。
    USB3.0陣營表示,該標準將能夠取代Firewire;他們指出Firewire已經失去許多業界的支持者,如新力(Sony)已經在攝影機這樣的產品中轉向採用USB2.0。「很多人都發現1394正在走下坡,」參與USB3.0標準訂定的NEC電子美國分公司資深工程經理Masami Katagiri表示。
    不過Firewire陣營的1394貿易協會(Trade Association)執行總監James Snider卻表示:「看來USB3.0的進展迅速,然而如此不同的連結方法要在2009年產出晶片可能是一大挑戰。他指出,目前有很多種類的產品──包括許多外接硬碟,都採用1394提供速度達800Mbps的最大物理層吞吐量;該組織並預計在明年初推出將速率提高到3.2Gbps的新版本。
    新版Firewire的速度等級將繼續採用跟定義現行1394b標準一樣的電纜和連接器;那些電纜和連接器的額訂速度為10Gbps。Snider並補充,該協會正在審查10G版Firewire規格的提案。
    Apple將轉而支持USB 3.0?
    據了解,身為Firewire長期支持者的蘋果(Apple)也獲邀加入USB3.0陣營,但該公司尚未對邀請作出回應。Apple針對多媒體應用的iMac系列產品都採用Firewire,該領域的應用目前超越USB的能力範圍。對此NEC的Katagiri表示,Apple可能被迫轉向採用USB3.0,因為Intel目前是該公司的主要晶片供應商,並將在其晶片組中最終採用USB 3.0。
    不過USB 3.0也面臨挑戰;Katagiri表示,新標準可能不得不把目前USB 2.0的5公尺傳輸距離縮短到僅剩2公尺。此外,主機控制器(host controller)將必須具備更多智慧功能,因為必須管理資料傳輸的路由(routing)。
    另一方面,USB 3.0陣營也正在尋求一種支援同步資料傳輸的新技術,以提供比Firewire更具優勢的功能,Katagiri補充。而Snider則指出,1394協會一直在研究採用Firewire規格在5/6類電纜和光纖上實現達100公尺的傳輸距離,此外也在研究以同軸電纜為基礎的家用、車用Firewire規格。
    無論USB組織是否能夠在吞吐量上取得突破,1394的服務品質(QoS)和上市時間優勢仍是有目共睹。而許多參與USB 3.0標準訂定的業者,也在關注採用超寬頻(ultrawideband)的無線USB標準進度。同時主導兩個標準訂定的Intel的Ravencraft說:「我們的菜色還很多。」無線USB小組近日公佈了其1.1規格的目標,將把吞吐量目標從480Mbps,提升到在3公尺的傳輸距離上實現1Gbps的吞吐量。
    NEC的Katagiri說,吞吐量目標是可延伸的,因為目前大多數公司仍然推出數據傳輸速率僅40Mbps的第一代無線USB元件。「我們必須使該協議更有效率,」Katagiri表示:「如果我們要達到Gbps級的速率,我們將需要至少500Mbps的速率。」
    無線USB 1.1規格將支援無線USB 1.0支援的3~4GHz頻段以及6GHz以上頻段。該規格鎖定較低功耗的應用,並將採用NFC技術,讓兩個設備透過簡單的接觸彼此識別。
    目前,USB論壇(USB Implementers Forum)已經認證了一大批符合無線USB 1.0規格的筆記型電腦和網路集線器。WiMedia Alliance則可望在不久之後認證第一批符合無線USB 1.0規格的產品。
    (參考原文:USB 3.0 guns for Firewire)

    回覆刪除
  2. 賈老師的真老公2007年10月9日 上午9:18

    我不知道您是要版主從哪個觀點來談 ?!
    若從技術看, 個人覺得一點也不覺得有任何值得興奮之處,
    就像當初USB 2.0 出來要取代 1.1 時 , 因為還有多人都還搞不定 1.1 呢 ?!
    至於若從商業角度來看, 這也只不過是一種商業手法, 用來建立與尾隨競爭者之間的屏障而已.
    就轉述從事光碟機產業十年的我的電子啟蒙"師父"來說:
    以目前產業來說: 有許多替代的儲存媒介出現(像FLASH)與行銷手法的改變(網路下載或行銷)
    所以, 未來光碟片或光碟機的使用榮景絶對比不上前十年間的規模...
    也就是說明他只是會是一個頂多持平甚至往下走勢的產業...
    那您還期望新的 HDDVD 或是藍光會帶來多少商機呢 ?
    當許多公司裹足不前時...誰還會留意他的技術或規格呢 ....
    ....
    這樣的比喻您說呢 ?!....
    我想能把一個很基礎的東西能發揮其優異的特質就不錯了...
    畢竟他的第一代的規格能風行市場必有其過人之處,
    許多時候,規格雖然重要, 但更重要的是...您要把他用在什麼產品上吧 !
     

    回覆刪除