usb setup請求結構體分析

2021-06-21 23:09:44 字數 2637 閱讀 9270

在usb通訊裡,從主控器發出來的第乙個配置包就是裝置描述符配置包,目的只有乙個,就是獲取插入的usb屬性,以便載入合適的驅動程式。現在就來詳細地分析一下裝置描述符包的定義。

在usb2.0的協議裡找到9.3 usb device requests裡就找到這個結構的定義,這裡我使用c的定義結構如下:

typedef

struct

_usb_setup_packet

usb_setup_packet;

bmrequesttype是包含有下面幾方面的內容:

d7 d6 d5 d4 d3 d2 d1 d0

在這乙個位元組裡,又按位分為:

d7位是表示後面傳送資料的方向位。

當d7等於0時,表示後面的資料從主控器傳送到usb裝置。在pc裡,就是從pc機傳送到usb的裝置。

當d7等於1時,表示後面的資料是從usb裝置傳送到主控器。在pc裡,就是從usb裝置傳送到usb裝置。在上次裡,我收到並顯示出來的資料是80,就表示從usb裝置裡傳送資料給pc。在這裡再次給出上一次的包資料:

80 06 00 01 00 00 40 00

這裡的80,就是d7位為1。

d6-d5位是請求主分型別

0 是表示標準的請求。

1 是表示類別的請求。

2 是表示廠商的請求。

3 是保留。

d4-d0位是表求接收這個包的介面。

0 是表示usb裝置接收。

1 是表示介面接收。

2 是表示端點接收。

3 是表示其它接收,不知道的。

4-31是保留。

brequest

是本描述符的請求型別,也就是後面

傳送的資料是什麼樣的東西。由於usb裡有很多配置資訊,比如獲取裝置描述符,又有設定usb位址等等,就是通過這個位元組來區分的。

從usb協議裡查詢表9-4,就可看到如下的編碼:

get_status  0

clear_feature  1

reserved for future use  2

set_feature  3

reserved for future use  4

set_address  5

get_descriptor  6

set_descriptor  7

get_configuration  8

set_configuration  9

get_inte***ce  10

set_inte***ce  11

synch_frame  12

在上面的資料報裡,看到它的內容是06,那麼它就是get_descriptor型別。也就是主控器想讀取usb裝置的描述符,到這裡就已經分析出來的意思,就是主控器想

讀取usb描述符,但還不知道是什麼描述符的內容。

wvalue是根據不同的請求而設定不同的值。一般就是傳送引數給裝置標明這是什麼請求。在上面

get_descriptor獲取裝置描述符裡,它的值是00 01。在

get_descriptor裡這個欄位的低位元組表示描述符的索引高位元組表示描述符的型別。高位元組的型別如下:

device  1

configuration  2

string  3

inte***ce  4

endpoint  5

device_qualifier  6

other_speed_configuration  7

inte***ce_power

1   8

wvalue值在這裡的高位元組是01,那麼它就是裝置描述符了低位元組是00,那麼它就是表示從偏移位址0開始讀取裝置描述符由於在配置描述符裡有很多配置,所以低位元組在那裡就可以用來識別獲取同樣型別的描述符不同的配置。

windex是根據不同的請求而設定不同的值。一般用來說明端點號或者說明介面標識。在獲取描述符裡,設定為0,或者是語言id。在這個傳送的描述符裡,它是設定為00 00

wlength是根據請求來決定下一階段傳送資料的長度前面請求第乙個位元組裡,已經說明下一階段資料傳送的方向,這裡說明了傳送資料的長度。不管是傳送資料,還是接收資料,都不要超過這個資料長度,否則主機會出問題,或者裝置有問題。在這個獲取裝置描述裡,它的長度是40 00,按小端格式去解釋,就是64個位元組。

usb setup請求結構體分析

在usb通訊裡,從主控器發出來的第乙個配置包就是裝置描述符配置包,目的只有乙個,就是獲取插入的usb屬性,以便載入合適的驅動程式。現在就來詳細地分析一下裝置描述符包的定義。在usb2.0的協議裡找到9.3 usb device requests裡就找到這個結構的定義,這裡我使用c的定義結構如下 ty...

Kobject結構體分析

kobject是組成裝置device 驅動driver 匯流排bus class的基本結構。如果把前者看成基類,則後者均為它的派生產物。device driver bus class構成了裝置模型,而kobject內嵌於其中,將這些裝置模型的部件組織起來,並形成了sysfs檔案系統。kobject就...

Kobject結構體分析

kobject是組成裝置device 驅動driver 匯流排bus class的基本結構。如果把前者看成基類,則後者均為它的派生產物。device driver bus class構成了裝置模型,而kobject內嵌於其中,將這些裝置模型的部件組織起來,並形成了sysfs檔案系統。kobject就...