Monday, July 21, 2014

USB 簡介[4]

本章主要介紹USB電器訊號。因為我不是唸硬體的,所以有錯請包涵。

電器訊號好像對軟體工程師不用看喔?這個想法有點天真,因為出問題別人一定要你先釐清問題倒底是硬體還是軟體出錯,所以多看看是沒錯的。

第一點,HOST是怎麼知道一個USB裝置插上來了呢?絕對不是看VBUS訊號。其實它是偵測D+或D-,如果D+有被PULL-UP,就表示有個Full Speed 裝置插入,如果是D-被PULL-UP,那就是Low Speed。

那High Speed呢?High Speed裝置其實也是先進Full Speed,然後HOST會再透過一些協定(chirp)跟這個FS裝置溝通,如果成功,雙方就會進HS模式。如果失敗,那就維持在FS。很詭異是吧?其實這就是為了向下相容的緣故,因為只有兩根線,沒辦法生出第三種辨識方式了。

由上可知,其實HOST是沒辦法直接移除一個USB裝置的,因為PULL-UP是由裝置端控制。所以當HOST根本就沒偵測到硬體時,這一定是USB裝置的問題。另外一點是,如果你的裝置老是進FS,記得換條好一點、短一點的USB線,或是換個USB插槽試試看,有些線或插槽的訊號真的很糟...。

第二點就是eye-pattern,中文叫眼圖,因為他真的長得很像一隻眼睛。作USB裝置一定得通過眼圖測試。這點就不是軟體工程師要量了,但是軟體工程師還是得讓USB裝置進入一個叫測試模式的狀態,不然硬體工程師沒辦法量測。一般的USB裝置一定支援測試模式,如果沒有,那就換一家chip...。

第三點,Reset、Suspend、跟Resume是硬體訊號。基本上如何偵測跟應對,規格書寫的一清二楚。比較值得注意的是Suspend,在Suspend模式下,一般狀況下,裝置是不能吃HOST超過500uA的電。這個規定很嚴格,基本上就是叫你把整個裝置都斷電的意思。如果你的裝置沒辦法整個斷電,就不要從HOST吃電,改吃電池即可。沒有電池?不好意思,那就不要去過認證...。

第四點,0/1的資料還要透過NRZI編碼,然後再透過J/K訊號傳輸。這是因為USB界面並沒有clock線路,所以只能把clock編進資料裡。而如果資料是一堆0或1的話,會讓D+/D-一直維持在同一個狀態,這樣雙方根本無法維持一定的clock,所以NRZI基本上就是讓一堆0或1會有所變化。不過不用擔心,這個都是直接硬體就做掉了,錯了一定不是軟體的錯。

第五點,電源管理。一個USB裝置只能吃HOST最多500mA的電。吃超過,對不起,無法過認證。至於HOST會怎樣,則是看HOST的實作,有的HOST比較好心,還是會讓這個裝置抽電,有的則是直接斷電。我認為最標準的作法是斷電,因為這樣可以保護HOST不會過載。

1 comment:

老大毓/破布(bush)/Brad said...
This comment has been removed by the author.

codeblock