和菜鳥一起學linux匯流排驅動之初識USB裝置列舉

2021-06-09 17:48:43 字數 2575 閱讀 8135

每次當插上滑鼠或者u盤的時候,電腦是怎麼知道是什麼裝置的呢?那就需要列舉了,列舉,其實就是讓host認識這個usb涉筆,並且為該裝置準備資源,建立好主機和裝置之間的資料傳遞機制。

usb裝置列舉過程可以分為8個部分:

1、  獲取裝置描述符

2、  復位

3、  設定位址

4、  再次獲取裝置描述符

5、  獲取配置描述符

6、  獲取介面、端點描述符

7、  獲取字串描述符

8、  選擇裝置配置

先看一下上篇文章看的usb滑鼠列舉的包吧。那樣更加明顯易懂。

把列舉過程和這幅圖對比下,是不是一樣呢?好了,接下去就一部分一部分慢慢分析吧。

1、  獲取裝置描述符

這次傳輸方式是控制傳輸,她由5個事務組成,分別是setup、in、in、in、out。

首先看第乙個事務即setup事務的data資料,根據其資料再根據usb協議中的setup協議可以知道其含義了。下面按照自己來看協議

a、80,她表示的就是裝置要傳送資料給主機。

b、06,

c、00 01,和brequest對應,就是

device,就是裝置的描述符。

d、00 00,zero

e、40 00,裝置描述符長度

然後看in包,就是裝置把她的裝置描述符發給了主機。

2、  復位

這個沒什麼好講的了。

3、  設定位址

簡單分析下,首先是setup事務,根據所發的資料和usb的協議可以知道

05:02;

然後是乙個in事務。

4、  再次獲取裝置描述符

這個是第2部分是一樣的,就不再分析了。

5、  獲取配置描述符

看第一行就知道了這個是get_descriptor,configuration descriptor。

下面還是看下具體的事務吧。

首先還是setup事務了,看資料80 06就可以知道了是裝置要發描述符給主機,而02就表示configuration,就是配置描述符了,

接著就是in事務,裝置給主機傳送資料了。具體的資料含義看下圖。

最後就是out事務。

6、  獲取介面、端點描述符

還是老方法,看setup事務,和上乙個一樣,是獲取配置描述符,這裡的配置描述符。

具體含義,看下面的圖就明白了。

7、  獲取字串描述符

這裡就不多做分析了。

8、  選擇裝置配置

這裡,setup事務,主要是device 的set_configuration。

好了,差不多usb的列舉就是這麼回事了。好久沒運動了,去跑步去,鍛鍊下身體。好歹是革命的本錢嘛。。。。。。

和菜鳥一起學linux匯流排驅動之初識USB系統結構

主機host控制器和乙個根hub,然後下面可以接很多的裝置,也可以繼續接hub,然後hub下面還可以接裝置,接下乙個hub,一直往下。對於usb匯流排,最多只能接127個裝置。usb的主控制器主要負責處理主機和裝置之間的電氣和協議層的互聯。主要有ohci uhci usb1.0 hci usb2.0...

和菜鳥一起學linux之本地git中心倉庫建立

昨天把gpio模擬spi控制wm8768 codec實現了,於是要提交 也終於知道了怎麼簡單用git倉庫了,以前一直是叫同事幫忙的,總覺得自己也得好好學一下啊。上傳了 之後就覺得其實也不是很難的嘛。早上在老薑的指導下,終於知道了怎麼在本地建立乙個git中心倉庫,用來管理 好了,下面把所學的分享下,也...

和菜鳥一起學linux之本地git中心倉庫建立

1 首先建立乙個資料夾用以測試 2 在test中寫入乙個main.c的檔案 其內容如下 3 然後就建立乙個git倉庫了 4 然後就是把內容加進去了,上傳上去 5 然後我們看下git log的資訊 6 有東西了吧?說明上傳好了。然後就是要在建立乙個git中心倉庫repos了。他是clone了剛剛那個g...