close

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


(http://tw.myblog.yahoo.com/chamberplus-taiwan/article?mid=776&prev=798&next=742&l=f&fid=7)


這個想法就是來自人家的一本書,當然,在該書中所提到的介面,還是用傳統的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的東西還蠻多的嘛!...就敬請期待吧...還是有興趣一起研究啊?!


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





 

arrow
arrow
    全站熱搜

    賈老師的真老公 發表在 痞客邦 留言(1) 人氣()