usb常用描述符以及一些資料報

2021-07-27 23:34:21 字數 2191 閱讀 8220

usb1.1協議定義的標準描述符有裝置描述符(device descriptor)、配置描述符(configuration descriptor)、介面描述符(inte***ce descriptor)、端點描述符(endpoint descriptor)和字串描述符(string descriptor)。usb2.0相比於usb1.1新增加的兩個描述符:限定符描述符(qualifier descriptor)和其他速度配置描述符(other speed configuration descriptor)。另外還有一些類描述符,例如hid描述符,音訊介面描述符,以及廠商自定義描述符

乙個裝置只有乙個裝置描述符,裝置描述符中會有字段描述有多少種配置描述符,而配置描述符中又有字段描述有多少種介面(介面描述符),介面描述符中又有字段描述有多少個端點(endpoint),而endpoint描述符中又描述了乙個端點的大小,還有一種是特殊的類描述符,例如hid,cdc,uvc,uac的類描述符,這種描述符是在介面描述符之後描述的。

主機讀取這些描述符的過程是先獲取裝置描述符,然後根據裝置描述符獲取配置描述符,然後根據配置描述符中的總長度一次性將後面的描述符一併讀取。還有一種是字串描述符,是通過單獨的命令獲取的。

裝置描述符:usb協議的版本號,裝置型別,端點0的大小,vid,pid,裝置版本號,廠商字串索引,產品字串,裝置序列號,以及配置數目(配置描述符相關)

配置描述符:配置所含有的介面數量,配置的編號,供電方式,是否支援遠端喚醒,需要的電流數大小

介面描述符:介面的編號,介面的端點數,介面所使用的類,子類,協議等。

端點描述符:端點號,端點的大小方向,最大包的長度等等。

裝置列舉的簡單過程:

裝置插入主機,主機復位裝置,傳送獲取裝置描述符的指令,正確獲取之後,然後再復位usb裝置,設定usb裝置的位址,設定成功 之後,再獲取剩餘的描述符,最後完成整個列舉過程。需要注意的是有的描述符是單獨獲取的。

usb輸出傳輸過程中,是lsb在前,msb在後,傳輸的資料以乙個包(packet)為單位的,包和包之間不同的地方,但是每個包都是以同步域開始,緊隨包的識別符號(pid,packet id),然後最後以eop(end of packet)結束包的傳輸。

在低速和全速傳輸中,同步域是00000001開始,而高速中是以32位資料,最後一位是1結束

而且針對包結束符低速和高速裝置也是不同的。

關於pid(包描述符)可以描述整個包的型別,比如說令牌包,資料報,握手包,以及特殊包,pid 0~3 bit是真正描述符,而bit4~7是0~3bit的取反。

usb每次傳輸都是有主機發起,而令牌包是用來啟動一次usb傳輸的。

@1:out:傳送給裝置,表明下次資料緊隨而來從主機傳送到裝置

@2:in:傳送給裝置,要求從裝置端回傳資料給主機

@3:sof:幀起始包每毫秒產生乙個幀,而高速裝置每毫秒產生8個幀,這8個幀號相同

@4:setup:類似與out,但是下次資料報必須是data0資料報

以下是各個令牌包的結構:

其中5bit的crc校驗是對前面11bit的資料進行校驗

資料報:

資料報不同的型別,可以區分資料報是否是因為握手包發生錯誤時導致資料沒有傳輸成功。

握手包:

握手包資料型別有ack,nak,stall,nyet,而ack主機和裝置都可以發出,其它只能是裝置發出,注意nak,不是錯誤,而是裝置端沒有能力接收資料或者沒有什麼資料可以返回,而stall 表明裝置端點掛起,或者無法執行相關的操作,需要主機進行相關的干預解除這種狀態,而nyet是說裝置已經成功接受資料,但是沒有空間儲存下一次資料,告知主機下一次可以使用ping令牌包去試探裝置是否有能力接收資料,保證頻寬。

usb音效卡驅動(一) USB描述符

前面看了核心的啟動,接下來就是驅動的學習。正好手邊有乙個usb音效卡,就準備以此為基礎,進行usb音效卡驅動的學習。因此,在學些usb音效卡之前,先看看usb驅動。然後再是alsa驅動,然後再是兩者的結合 任何usb裝置,都有一段資料,用來描述自己。比如自己有什麼功能,自己的廠商id是多少等等 有個...

我對全域性描述符和區域性描述符的一些理解

在一開始接觸保護模式的時候,特別容易被其中的描述符搞得思維混亂,但是在有了一些了解之後,才發現原來32位系統中的全域性描述符很容易理解。下面是我對全域性描述符的理解 全域性描述符表gdt 包含乙個段的基址 界限以及屬性內容。其中段基址和16位系統中的段位址意思是一樣的,只是在16位系統中段位址必須是...

類裝飾器與函式裝飾器的一些應用,描述符裝飾器

類裝飾器包含普通類作為乙個裝飾器,同時描述符類作為乙個裝飾器的2種方式 類裝飾器需要小心使用的一點是當作用於另乙個類 被裝飾的類 方法時,被裝飾的類的self傳遞的問題 見下面例子 結論 如果要編寫乙個既適用函式也適用類方法的裝飾器,要麼是用函式裝飾器,要麼是用描述符裝飾器 類裝飾器與函式裝飾器的一...