每次當插上滑鼠或者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...