USB總線架構(gòu)
USB 是每條總線支持一個主機的一種主機控制架構(gòu)。大部分的PC 上都有多個USB 主機。設備能用集線器以菊花鏈方式連接到主機上。多個集線器能夠以菊花鏈方式連接起來,支持多達127 個不同設備,每個菊花鏈段長度不能超過五英尺。
這種菊花鏈式連接,形成了稱為層式星狀(tiered star)的拓撲結(jié)構(gòu), 它與 10-Base T 以太網(wǎng)類似。與以太網(wǎng)拓撲結(jié)構(gòu)相比,USB 有一些優(yōu)點,因為USB 集線器能為連接在其上的設備供電,并在發(fā)生過流現(xiàn)象時關(guān)閉設備。USB 集線器還能適當過濾主機和設備間的數(shù)據(jù),實現(xiàn)低速(LS)、全速(FS)和高速(HS)設備的無縫集成。
USB 是即插即用型協(xié)議,能動態(tài)加載和卸載USB 驅(qū)動程序。要加載USB 驅(qū)動程序,必須有USB 提供商標識符(VID)和產(chǎn)品標識符(PID)。這兩個標識信息記錄在USB 設備的設備描述符中。
VID 用來識別USB 總線的制造商。通常,VID 由名為“通用串行總線開發(fā)者論壇”(USB Implementers’ Forum,USB-IF,www.usb.org)組織分配。申請者需要支付注冊VID 費用。
與VID 類似, PID 是一個16 位數(shù)字。PID 標識的是產(chǎn)品。設備制造商提供PID 號。不同于VID,對于PID 來說,USB-IF 對其沒有任何管理上的限制。
USB 的另一個重要特性是它支持不同類型的數(shù)據(jù)傳輸方式。例如,USB V2.0 支持四種不同類型的數(shù)據(jù)傳輸:
1. 控制傳輸方式??刂苽鬏斣谠O備插入時對其進行配置,并能用于其他的設備特定用途,諸如對設備上的其他通道進行控制等。
2. 批量傳輸方式。在數(shù)據(jù)的產(chǎn)生和使用量相對較大時采用批量傳輸方式。
3. 中斷傳輸方式。中斷傳輸用于及時且可靠的數(shù)據(jù)傳送。例如,具有人類可感知反應或反饋響應特征的字符或坐標,等等。
4. 同步傳輸方式。同步傳輸方式在預先約定的傳輸延遲時間占用預定的USB 帶寬。同步傳輸也稱為“流實時傳輸”。
A 型USB 連接器專用于數(shù)據(jù)下行傳輸,即,數(shù)據(jù)從設備傳輸?shù)街鳈C。所以,A 型連接器位于設備上。
B 型USB 連接器專用于數(shù)據(jù)上行傳輸,即,數(shù)據(jù)從USB 主機傳輸?shù)皆O備或從集線器傳輸?shù)皆O備。B 型連接器位于主機和集線器上,如圖2 所示。
有時為了使占用空間更小,可以使用微型USB 連接器。
USB 設備通過拉高D+ 或D-端線電平來指示其速度,最高為3.3 伏。全速設備在D+ 端接一個上拉電阻表明它是全速設備,如圖3 所示。
如果沒有上拉電阻, USB 就假定總線上沒有連接任何東西。有些設備中,上拉電阻是內(nèi)置的,能通過固件開啟和關(guān)閉。另一些設備則需要外部上拉電阻。在這種情況下,通過固件進行速度控制會受到限制,并且要求另外對外部中繼服務進行實現(xiàn)與編碼。
低速設備在D-端連接上拉電阻,表明其為低速設備,如圖4 所示。
最開始,高速設備被當作全速設備進行連接(D+ →1.5k 至3.3V)。初始連接之后,設備在復位時將發(fā)出高速的啁啾聲,然后與主機建立高速連接。一旦設備經(jīng)初始化進入高速模式,上拉電阻就被禁用。
USB數(shù)據(jù)流模式:枚舉在設備可以與應用進行通信前,USB 主機需要了解設備狀態(tài)并給它分配設備驅(qū)動程序。實現(xiàn)這一初始信息交換的過程就叫作枚舉。在枚舉過程中,根據(jù)USB V2.0 規(guī)范的定義,設備將經(jīng)歷以下設備狀態(tài):
1. 上電狀態(tài)(Powered)
2. 缺省狀態(tài)(Default)
3. 地址狀態(tài)(Address)
4. 配置狀態(tài)(Configured)
另外還有兩個USB 設備狀態(tài),“連接狀態(tài)”(attached)和“掛起狀態(tài)”(suspended)。枚舉過程的具體細節(jié)超出了本文的范圍;不過,在設備配置中使用的命令與結(jié)構(gòu)是相關(guān)的。
描述符是讓USB 主機能獲取設備信息的數(shù)據(jù)結(jié)構(gòu)。在枚舉過程中,主機請求描述符,從最上層設備描述符開始,一直到最低層端點描述符,順序如圖5 所示。
枚舉過程
下面概述一下USB 設備的枚舉過程所包含的步驟,并講解設備在枚舉過程如何經(jīng)歷從上電到缺省、地址以及配置這幾個狀態(tài)。
1. 用戶將一個USB 設備插入USB 端口。主機為端口供電,設備此時處于上電狀態(tài)。
2. 主機檢測設備。
3. 集線器使用中斷通道將事件報告給主機。
4. 主機發(fā)送Get_Port_Status(讀端口狀態(tài))請求,以獲取更多的設備信息。
5. 集線器檢測設備是低速運行還是高速運行,并將此信息送給主機,這是對Get_Port_Status 請求的響應。
6. 主機發(fā)送Set_Port_Feature(寫端口狀態(tài))請求給集線器,要求它復位端口。
7. 集線器對設備復位。
8. 主機使用Chirp K 信號來了解全速設備是否支持高速運行。
9. 主機發(fā)送另一個Get_Port_Status 請求,確定設備是否已經(jīng)從復位狀態(tài)退出。
10. 設備此時處于缺省狀態(tài),且已準備好在零端點通過缺省通道響應主機控制傳輸。缺省地址為00h,設備能從總線獲取高達100mA 的電流。
11. 主機發(fā)送Get_Descriptor(讀設備描述符)報文,以便確定最大數(shù)據(jù)包大小。設備描述符的八個字節(jié)是bMaxPacketSize。
12. 通過發(fā)送Set_Address(寫地址)請求,主機分配地址,設備此時處于地址狀態(tài)。
13. 主機發(fā)送Get_Descriptor 報文,以獲取更多的設備信息。主機通過發(fā)送描述符響應設備請求,隨后發(fā)送全部的次級描述符。
14. 主機分配并加載設備驅(qū)動程序。
15. 通過發(fā)送Set_Configuration(寫配置)請求,主機的設備驅(qū)動程序選擇一個有效配置。設備此時處于配置狀態(tài)。
16. 主機為復合設備接口分配驅(qū)動程序。
17. 如果集線器檢測到有過流現(xiàn)象,或者主機要求集線器關(guān)閉電源,則USB 總線切斷設備供電電源。在這種情況下,設備與主機無法通信,但設備處于連接狀態(tài)。
18. 如果在3 毫秒內(nèi)設備在總線上未見任何動作,則它將進入掛起狀態(tài),在掛起狀態(tài)設備消耗的總線電能最少。
USB 協(xié)議層
控制傳輸使主機和設備之間可以交換設備配置信息和其他控制信息??刂苽鬏斣诘退俸腿賯鬏斶\行時占用10% 的帶寬,在高速運行時占用20% 的帶寬??刂苽鬏斢稍O置階段、可選的數(shù)據(jù)階段和狀態(tài)階段組成。下面詳細描述每個階段的包。
1. 標記包。USB 中所有事務都是由主機(PC)來完成的。IN 表示數(shù)據(jù)被讀入PC,OUT 表示數(shù)據(jù)由主機送出至設備,如圖6 所示。
2. 數(shù)據(jù)包(可選)。USB 主機有兩個數(shù)據(jù)包——DATA0 和DATA1。每一個包的容量為1024 字節(jié)。
3. 狀態(tài)包。在諸如應答(ACK)、否定應答(NACK)以及停止(Stall)等事務中,狀態(tài)包用來跟蹤USB 狀態(tài)。
4. 幀起始包(SOF)。每一毫秒,USB 主機都將發(fā)送一幀SOF,每幀有11 位數(shù)據(jù)。
評論
查看更多