一、USB設備描述結構 1.邏輯組織結構 在USB設備的邏輯組織中,包含設備、配置、介面和端點4個層次。設備通常有一個或多個配置,配置通常有一個或多個介面,介面有零或多個端點。 每個USB設備都可以包含一個或多個配置,不同的配置使設備表現出不同的功能組合,配置由多個介面組成。在USB協議中,介面代表
一、USB設備描述結構
1.邏輯組織結構
在USB設備的邏輯組織中,包含設備、配置、介面和端點4個層次。設備通常有一個或多個配置,配置通常有一個或多個介面,介面有零或多個端點。
每個USB設備都可以包含一個或多個配置,不同的配置使設備表現出不同的功能組合,配置由多個介面組成。在USB協議中,介面代表一個基本的功能,一個功能複雜的USB設備可以具有多個介面,而介面是端點的彙集。
一個USB播放器帶有音頻,視頻功能,還有旋鈕和按鈕。
配置1: 音頻(介面)+旋鈕(介面)
配置2: 視頻(介面)+旋鈕(介面)
配置3: 音頻(介面)+視頻(介面)+按鈕(介面)
音頻介面,視頻介面,按鈕介面,旋鈕介面均需要一個驅動程式。
USB設備中的唯一可定址的部分是設備端點,端點的作用類似於寄存器。每個端點在設備內部有唯一的端點號,這個端點號是在設備設計時給定的。主機和設備的通信最終都作用於設備上的各個端點。每個端點所支持的操作都是單向的,要麼只讀,要麽只寫。
2.描述符
在每一個USB設備內部,包含了固定格式的數據,通過這些數據,USB主機就可以獲取USB設備的類型、生產廠商等信息。這些固定格式的數據,我們就稱之為USB描述符。標準的USB設備有5種USB描述符:設備描述符,配置描述符,介面描述符,端點描述符,字元串描述符。
2.1 設備描述符
bLength : 描述符長度,固定為0x12。
bDescriptorType : 設備描述符類型,固定為0x01。
bcdUSB : USB 規範發佈號。表示了本設備能適用於那種協議,如2.0=0200
bDeviceClass : 類型代碼。
bDeviceSubClass : 子類型代碼。
bDeviceProtocol : 協議代碼。
bMaxPacketSize0 : 端點0最大分組大小。
idVendor : 供應商ID。
idProduct : 產品ID(由廠商分配)。
bcdDevice : 設備出產編碼,由廠家自行設置。
iManufacturer : 廠商描述符字元串索引.索引到對應的字元串描述符。
iProduct : :產品描述符字元串索引。
iSerialNumber : 設備序列號字元串索引。
bNumConfigurations : 可能的配置數。
2.2 配置描述符
bLength : 描述符長度,固定為0x09。
bDescriptorType : 配置描述符類型,固定為0x02。
wTotalLength : 返回整個數據的長度,指此配置返回的配置描述符,介面描述符以及端點描述符的全部大小。
bNumInterfaces : 配置所支持的介面數,指該配置配備的介面數量,也表示該配置下介面描述符數量。
bConfigurationValue : 作為Set Configuration的一個參數選擇配置值。
iConfiguration : 用於描述該配置字元串描述符的索引。
bmAttributes : 供電模式選擇。Bit4-0保留,D7:匯流排供電,D6:自供電,D5:遠程喚醒.
MaxPower : 匯流排供電的USB設備的最大消耗電流,以2mA為單位。
2.3 介面描述符
bLength : 描述符長度,固定為0x09。
bDescriptorType : 介面描述符類型,固定為0x04。
bInterfaceNumber: 該介面的編號。
bAlternateSetting : 用於為上一個欄位選擇可供替換的設置。
bNumEndpoint : 使用的端點數目,端點0除外。
bInterfaceClass : 類型代碼(由USB組織分配)。
bInterfaceSunClass : 子類型代碼(由USB組織分配)。
bInterfaceProtocol : 協議代碼(由USB組織分配)。
iInterface : 字元串描述符的索引。
2.4 端點描述符
bLength : 描述符大小,固定為0x07。
bDescriptorType : 介面描述符類型,固定為0x05。
bEndpointType : USB設備的端點地址。Bit7,方向,對於控制端點可以忽略,1/0:IN/OUT。Bit6-4,保留。BIt3-0:端點號.
bmAttributes : 端點屬性,Bit7-2,保留。BIt1-0:00控制,01同步,02批量,03中斷。
wMaxPacketSize : 本端點接收或發送的最大信息包大小。
bInterval : 輪訓數據傳送端點的時間間隔.對於批量傳送和控制傳送的端點忽略.對於同步傳送的端點,必須為1,對於中斷傳送的端點,範圍為1-255。
二、USB數據通訊
1. 通訊模型
2. 傳輸
USB的數據通訊首先是基於傳輸(Transfer)的,傳輸的類型有:中斷傳輸(比如USB,鍵盤)、批量傳輸(大容量傳輸:比如U盤)、同步傳輸、控制傳輸.
3. 事物
一次傳輸由一個或多個事務(transaction)構成,事務可分為:In事務,Out事務,Setup事務
4. 包
一個事務由一個或多個包(packet)構成,包可分為:令牌包(setup)、數據包(data)、握手包(ACK)和特殊包
5. 域
一個包由多個域構成,域可分為:同步域(SYNC),標識域(PID),地址域(ADDR),端點域(ENDP),幀號域(FRAM),數據域(DATA),校驗域(CRC)
三、USB數據枚舉
USB設備在正常工作以前, 第一件要做的事就是枚舉。枚舉是讓主機認得這個USB設備, 並且為該設備準備資源,建立好主機和設備之間的數據傳遞通道。
1. 獲取設備描述符
2. 複位
3. 設置地址
4.再次獲取設備描述符
5. 獲取配置描述符
6. 獲取介面、端點描述符
7. 獲取字元串描述符
8. 選擇設備配置