目前了解了usb通信層面的一些基礎知識如下。如果有空還要再了解hid報告描述符及協議的數據包波形。
一,USB的一些基本概念
1. 管道(Pipe) 是主機和設備端點之間數據傳輸的模型,共有兩種類型的管道:無格式的
流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB 設備一旦上電就存在
一個信息管道,即默認的控制管道,USB 主機通過該管道來獲取設備的描述、配置、狀態,并
對設備進行配置。
2. 端點(Endpoint)是USB 設備中的可以進行數據收發的最小單元,支持單向或者雙向的數據傳
輸。設備支持端點的數量是有限制的,除默認端點外低速設備最多支持2 組端點(2 個輸入,2
個輸出),高速和全速設備最多支持15 組端點。
3. 接口(Interface) 。應用軟件通過和設備之間的數據交換來完成設備的控制和數據傳輸。通常
需要多個管道來完成數據交換,因為同一管道只支持一種類型的數據傳輸。用在一起來對設備進
行控制的若干管道稱為設備的接口。
4. 設備和端點之間關系: 一個USB 設備可以包括若干個端點,不同的端點以端點編號和方向區分。
不同端點可以支持不同的傳輸類型、訪問間隔以及最大數據包大小。除端點0 外,所有的端點只支
持一個方向的數據傳輸。端點0 是一個特殊的端點,它支持雙向的控制傳輸。管道和端點關聯,和
關聯的端點有相同的屬性,如支持的傳輸類型、最大包長度、傳輸方向等。
5. 描述符(Descriptor) 描述設備的屬性(Attributes)。 它本身是一個數據結構, 第一個字節表示
描述符的大小(字節數), 第二個字節表示描述符的類型(Type)。 描述符的種類有:
1) 設備描述符(Device), 描述一個設備的一般信息。
2) 設備修飾描述符(Device_Qualifier), 描述一個高速設備在其它速度下該如何變化的信息。
3) 配置描述符(Configuration), 描述一個特定的設備配置, 如接口的數目等。 一個USB設備有
一個或多個配置描述符。 每個配置有一個或多個接口并且每個接口有0個或多個端點。
4) 其它速度配置描述符(Other_speed_configuration), 描述高速設備在其它可能的速度下的
一個配置。
5) 接口描述符(Interface), 描述一種配置中的一個特定的接口。
6) 端點描述符(Endpoint), 描述主機需要的去決定端點所需帶寬的信息。 這個描述符只能附加
在GetDescriptor()或GetDescriptor()請求中傳送, 不能單獨傳送。 端點0沒有此描述符。
7) 字符串描述符(String), 第0個字符串描述符指定設備支持的語言, 其它的描述符則各包含
一個UNICODE字符串。 設備描述符, 配置描述符 和 接口描述符可能會包含字符串描述符。
6. USB設備請求(USB Device Request) 請求是從主機通過控制管道發送到設備。
標準的設備請求有:
1) Clear Feature
2) Get Configuration
3) Get Descriptor
4) Get Interface
5) Get Status
6) Set Address
7) Set Configuration
8) Set Descriptor
9) Set Feature
10) Set Interface
11) Synch Frame
二,協議層
從字段(Field)和包(Packet)的定義開始,從底向上地展示USB(Univeral Serial Bus)協議。有:同步字段,包字段格式,包標識符字段,地址字段,端口字段,數據字段等等。
三,包字段格式
描述標記,數據和握手包的字段格式。包中位的定義是以未編碼的數據格式給出。為了清楚起見,在此不考慮NRZI編碼和位填充(Bit Stuffing)的影響。所有的包都分別有包開始(Start-of-Packet)和包結束(End-of-Packet)分隔符。包開始(SOP)分隔符是同步字段的一部分,而包結束(EOP)分隔符在第7章有所描述。
四,usb協議的大致過程如下:
當USB設備接上或從USB設備移開的時候,主機啟動一個被稱作總線標識(bus enumeration)的進程,來標識并管理設備狀態的改變,當USB設備接上一個加電端口時,系統當采取以下操作:
1.USB設備所連的集線器通過其通向主機的狀態改變通道向主機,匯報本USB設備已連接上。(參照11.13.3節)。此時,USB設備處于加電狀態,它所連接的端口是無效的。
2.主機通過尋問集線器決定此次狀態改變的確切含義。
3.主機一旦得知新設備已連上以后,它至少等待100ms以使得插入操作的完成以及設備電源穩定工作。然后主機發出端口使能及復位命令給那個端口。具體這些事件發生的順序及時間判定請參看7.1.7.1節及圖7-19。
4.集線器將發向端口的復位信號持續10ms(見11.5.15節)。當復位信號撤消后,端口已經有效了。這時USB設備處于缺省狀態,并且可從VBUS汲取小于100mA的電能,所有設備寄存器及狀態已經被復位,設備可對缺省地址產生響應。
5.主機給設備分配一個唯一的地址,設備轉向編址狀態。(Address state)。
6.在USB設備接受設備地址之前,它的缺省控制通道(Default Control Pipe)在缺省地址處自然是可尋址的,主機通過讀取設備描述表,判決設備缺省通道的實際凈數據負載。
7.主機從設備讀取配置信息要從配置0讀到配置n-1,其中n為配置個數,此操作須花費幾個毫秒。
8.基于從設備取來的配置信息及設備如何被使用的信息,主機給設備一個配置值,此刻,設備就處于配置狀態(Configured state)并此配置有關的所有端節點,都按照配置各就各位,USB設備現在可以從VBUS得到描述中所要求的電量了。從設備的角度來講,它已經準備就緒了。
當UBS設備被取走時,集線器同樣會通知主機,斷開一個設備連接會使得設備所連接的端口無效,一收到斷開通知后,主機就會更新的拓撲信息。
評論