USB協議-USB的描述符及其之間的關系


USB只是一個總線,只提供一個數據通路而已。USB總線驅動程序並不知道一個設備具體如何操作,有哪些行為。具體的一個設備實現什么功能,要由設備自己來決定。那么,USB主機是如何知道一個設備的功能以及行為呢?這就要通過描述符來實現了。描述符中記錄了設備的類型、廠商ID和產品ID(通常依靠它們來加載對應的驅動程序)、端點情況、版本號等眾多信息。

USB1.1協議定義的標准描述符有設備描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端點描述符(Endpoint Descriptor)及字符串描述符(String Descriptor)。USB2.0協議中又增加了兩個新的標准描述符:Device Qualifier Descriptor和Other Speed Configuration Descriptor。

一個USB設備只有一個設備描述符。設備描述符里決定了該設備有多少種配置,每種配置都有一個配置描述符;而在每個配置描述符中又定義了該配置有多少個接口,每個接口都有一個接口描述符;在接口描述符里又定義了該接口有多少個端點,每個端點都有一個端點描述符;端點描述符定義了端點的大小、類型等。如果有類特殊描述符,它跟在相應的接口描述符之后。由此可以看出,USB的描述符之間的關系式一層一層的,最上層是設備描述符,接下來是配置描述符,再下來是接口描述符,最下面是端點描述符。

在主機獲取描述符時,首先獲取設備描述符,接着再獲取配置描述符,然后根據配置描述符中的配置集合的總長度,一次將配置描述符、接口描述符、類特殊描述符(如果有)、端點描述符一次讀回。對於字符串描述符,是單獨獲取的。主機通過發送獲取字符串描述符的請求以及描述符的索引號、語音ID來獲取對應的字符串描述符

  • 設備描述符主要記錄的信息有:設備所使用的USB協議版本號、設備類型、端點0的最大包大小、廠商ID(VID)和產品ID(PID)、設備版本號、廠商字符串索引、產品字符串索引、設備序列號索引、可能的配置數等。
  • 配置描述符主要記錄的信息有:配置所包含的接口數、配置的編號、供電方式、是否支持遠程喚醒、電流需求量等。
  • 接口描述符主要記錄的信息有:接口的編號、接口的端點數、接口所使用的類、子類、協議等。
  • 端點描述符主要記錄的信息有:端點號及方向、端點的傳輸類型、最大包長度、查詢時間間隔等。
  • 字符串描述符主要是提供一些方便人們閱讀的信息,它不是必需的。

這里所說的設備,就是一個實實在在的USB設備,例如一個USB鼠標。設備有一個設備地址,USB主機主要依靠這個設備地址來訪問設備。而在設備內部還會分得更細。它會分出一些端點來,例如端點0、端點1等。就是說,如果USB主機要和USB設備通信,只有設備地址是不夠的,還需要一個端點地址。有了設備地址和端點地址,就能准確地對端點發送和讀取數據了。比如你要去8號教學樓的808教師,8號樓就是設備地址,而808教室就是端點地址。而配置和接口,是為了更方便地管理端點而抽象出來的概念。一個設備可以有多個配置,但是同一時刻只能有一個配置有效。每個配置下又可以有多個接口。當我們需要不同的功能時,只要選擇不同的配置即可。拿剛才的教學樓來說,我們可以把它分成兩個配置:平時上課用和期末考試用。考試用時,全部的教室都拿來作考場(即該配置下只有一個接口,接口下有很多端點——教室);而平時上課用時,分成兩類(即該配置下有兩個接口,每個接口下有一些端點——教室):教室休息室和上課課室。教師休息室和課室是不能共用的(這在USB中也是如此,同一個端點號是不能出現在同一個配置下的兩個或多個不同的接口中)。但是平時用來做課室或者休息室的教室,考試時都可以拿來作考場(這在USB中也是如此,同一個端點號可用在不同的配置中)。

具有多個接口並由接口來實現功能的設備叫做USB復合設備,例如一個USB音頻設備,它具有一個音頻控制接口,另外還可能具有一個到多個音頻流或MIDI流接口。在主機端,會把USB復合設備的每個接口當作一個功能設備來看待。常見的USB鼠標、U盤等,通常是單一的設備,即一個設備下只有一個配置描述符、一個接口描述符。

 

摘錄自《圈圈教你玩USB》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM