【轉】USB協議深入分析 裝置描述符配置包 和 返回裝置描述符
阿新 • • 發佈:2018-12-13
USB協議深入分析 裝置描述符配置包 和 返回裝置描述符
(2012-08-14 16:55:52) 轉載▼標籤: 描述符主控器字串裝置位元組it |
分類: 外圍器件介面 |
裝置描述符配置包 和 返回裝置描述符
USB協議深入分析 裝置描述符配置包
裝置描述符配置包 在USB通訊裡,從主控器發出來的第一個配置包就是裝置描述符配置包,目的只有一個,就是獲取插入的USB屬性,以便載入合適的驅動程式。現在就來詳細地分析一下裝置描述符包的定義。 在USB2.0的協議裡找到9.3 USB Device Requests裡就找到這個結構的定義,這裡我使用C的定義結構如下: typedef
USB協議深入分析 返回裝置描述符
bcdUSB是USB釋出的協議版本。也就是本裝置能適用於那種協議,目前USB主要有兩個版本,一個是1.10,一個是2.10版本。在本裝置裡,採用了1.10的協議版本。由於這個欄位是採用BCD編碼,所以1.10的表示為0x0110的格式,按小端格式輸出來,就變成10 01的顯示了。 bDeviceClass是裝置分類。當它的值是0時,表示所有介面在配置描述符裡,並且所有介面是獨立的。當它的值是1到FEH時,表示不同的介面關聯的。當它的值是FFH時,它是廠商自己定義的。在這個裝置裡,是定義為0。 bDeviceSubClass是裝置子分類碼。當前面的 bDeviceClass值是0時,這裡一定要設定為0。其它就跟據USB-IF組織定義的編碼。 bDeviceProtocol是裝置使用的協議。如果使用USB-IF組織定義的協議,就需要設定這裡的值。如果不使用,就直接設定為0。如果廠商自己定義的可以設定為FFH。 以上三個值,在本裝置裡全部設定為0。 bMaxPacketSize0是端點0收發最大的包大小。僅允許設定8,16,32,64中的任何一個大小。在本裝置裡是設定為64個位元組大小。所以看到這個欄位是40 的大小。 12 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01 idVendor是廠商標識。由USB-IF分配的編碼。在這裡使用0x8000。 idProduct是廠商定義的產品標識。由廠家和產品標識,就可以讓作業系統載入不同的驅動程式。如下: 12 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01 bcdDevice是用BCD表示的裝置釋出的版本號。這裡是1.00。 12 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01 iManufacturer是廠商字串的偏移值。這值主要說明了它在字串描述符裡的偏移位置。如果它設定為0,表示沒有廠商字串。在這裡是0x04,就是從字串描述符開始位置算起第4個位元組位置讀取字串。 iProduct是產品字串的偏移值。這值主要說明了它在字串描述符裡的偏移位置。如果它設定為0,表示沒有產品字串。在這裡是0x2C,就是從字串描述符開始位置算起第2C個位元組位置讀取字串。 iSerialNumber是序列號字串的偏移值。這值主要說明了它在字串描述符裡的偏移位置。如果它設定為0,表示沒有序列號字串。在這裡是0x4A,就是從字串描述符開始位置算起第4A個位元組位置讀取字串。 所有字串,都是採有UNICODE編碼。 bNumConfigurations是配置描述符的個數。在這裡只使用了一個配置,所以設定為1。