0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

科普一下什么是USB的描述符

單片機匠人 ? 來源:單片機匠人 ? 作者: 黃忠老師 ? 2021-12-02 14:41 ? 次閱讀

USB只是一個總線,只提供一個數(shù)據(jù)通路而已。USB總線驅(qū)動程序并不知道一個設備具體如何操作,有哪些行為。具體的一個設備實現(xiàn)什么功能,要由設備自己來決定。那么,USB主機是如何知道一個設備的功能以及行為呢?這就要通過描述符來實現(xiàn)了。那么什么是USB的描述符呢?其實就是一些傳遞的協(xié)議信息,比如設備的類型、廠商ID、產(chǎn)品ID、端點情況、版本號等信息。

既然描述符是協(xié)議信息,那么不同的版本也會有所不同,比如USB1.1協(xié)議定義的標準描述符有設備描述符、配置描述符、接口描述符、端點描述符、字符串描述符、類特殊描述符以及廠商自定義的描述符。那么USB2.0協(xié)議中又增加了兩個新的標準描述符有設備限定符描述符和其他速度配置描述符。隨著USB協(xié)議版本的提升,大家知道都是為了提升速度和可靠度,讓用戶有更快更高效的體驗。那么USB1.1是全速設備,現(xiàn)在我們一起看下USB1.1協(xié)議定義的描述符吧。

一個USB設備只有一個設備描述符。設備描述符里決定了該設備有多少種配置,每種配置都有一個配置描述符;而在每個配置描述符中又決定了該配置里有多少個接口,每個接口都有一個接口描述符;在接口描述符里又定義了該接口有多少個端點,每個端點都有一個端點描述符;端點描述符定義了端點的大小、類型等。

如果有類特殊描述符,它跟在相應的接口描述符之后。由此可以看出,USB的描述符之間的關系是一層一層的,最上一層是設備描述符,接下來是配置描述符,再下來是接口描述符,最下面是端點描述符。在主機獲取描述符時,首先獲取設備描述符,接著再獲取配置描述符,然后根據(jù)配置描述符中的配置集合的總長度,一次將配置描述符、接口描述符、類特殊描述符(如果有)、端點描述符一次讀回。對于字符串描述符,是單獨獲取的。主機通過發(fā)送獲取字符串描述符的請求以及描述符的索引號、語言ID來獲取對應的字符串描述符。

l 設備描述符主要記錄的信息有:設備所使用的USB協(xié)議版本號、設備類型、端點0的最大包大小、廠商ID(VID)和產(chǎn)品ID(PID)、設備版本號、廠商字符串索引、產(chǎn)品字符串索引、設備序列號索引、可能的配置數(shù)等。

l 配置描述符主要記錄的信息有:配置所包含的接口數(shù)、配置的編號、供電方式、是否支持遠程喚醒、電流需求量等。

l 接口描述符主要記錄的信息有:接口的編號、接口的端點數(shù)、接口所使用的類、子類、協(xié)議等。

l 端點描述符主要記錄的信息有:端點號及方向、端點的傳輸類型、最大包長度、查尋時間間隔等。

l 字符串描述符主要是提供一些方便人們閱讀的信息,它不是必需的。

說了半天,也許你還沒搞清楚到底設備、配置、接口、端點等這些是什么東西。不要急,這些東西的確是有點暈人。特別是剛接觸時,這么多的內(nèi)容很容易讓人搞混,或者似乎是懂了,然后再想想,似乎又沒懂……這些所說的設備,就是一個實實在在的USB設備,例如一個USB鼠標。設備有一個設備地址,USB主機依靠這個設備地址來訪問設備。而在設備內(nèi)部還會分的更細。

它會分出一些端點出來,例如端點0、端點1等。就是說,如果USB主機要和USB設備通信,光有設備地址是不夠的,還需要一個端點地址。有了設備地址和端點地址,就能準確地對端點發(fā)送和讀取數(shù)據(jù)了。好比你要去找8號教學樓的605教室,8號樓就是設備地址,而605教室就是端點地址。而配置和接口,是為了更方便地管理端點而抽象出來的概念。一個設備可以有多個配置,但是同一時刻只能有一個配置有效。每個配置下又可以有多個接口。當我們需要不同的功能時,只要選擇不同的配置即可。

拿剛才的教學樓來說,我們可以把它分成兩個配置:平時上課用和考試用??荚囉脮r,全部的教室都拿來作考場(即該配置下只有一個接口,接口下有很多端點---教室);而平時上課用時,分成兩類(即該配置下有兩個接口,每個接口下有一些端點---教室):教師休息室和上課的課室。教師休息室和課室是不能共用的(這在USB中也是如此,同一個端點號不能出現(xiàn)在同一個配置下的兩個或者更多個不同的接口中)。但是平時用來做課室或者休息室的教室,考試時都可以拿來作考場(這在USB中也是如此,同一個端點號可用在不同的配置中)。

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

總結一下:由端點構成一個接口(或者反過來說,接口是端點的集合),由接口又構成一個配置(反過來說,配置是接口的集合),再由配置構成一個設備(設備是配置的集合)。學習USB,一定要把這些關系理清楚了,才能按照需要構造出一個合格的USB設備。如果一個設備的各種描述符成功返回了,那么可以說已經(jīng)成功了大半。相反,只要描述符出現(xiàn)一點問題,哪怕只是一個bit的錯誤,都可能造成設備無法識別或者無法正常工作。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    8148

    瀏覽量

    271013
  • 通信
    +關注

    關注

    18

    文章

    6178

    瀏覽量

    137392
  • MIDI
    +關注

    關注

    0

    文章

    78

    瀏覽量

    16045

原文標題:什么是USB的描述符?

文章出處:【微信號:gh_e7f294a514ca,微信公眾號:單片機匠人】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    cx3提示未知的描述符是怎么回事?

    我通過配置生成個新的工程 運行起來總是提示 未知的描述符
    發(fā)表于 06-04 07:08

    通過 FX3 以 5200*3900 分辨率、15fps 的速度從我的 fpga 傳輸視頻數(shù)據(jù)流,但無法設置最小/最大比特率描述符值,怎么解決?

    我正試圖通過 FX3 以 5200*3900 分辨率、15fps 的速度從我的 fpga 傳輸視頻數(shù)據(jù)流,但無法設置最小/最大比特率描述符值,因為描述符大小只有 32 位。 描述符的預期值應該是
    發(fā)表于 05-23 06:35

    fx3 uvc uart組合代碼在usb 2.0中不起作用怎么解決?

    。 當我連接 2.0 電纜時,它顯示設備無法識別。 請注意以下幾點: 1)Windows 中的 fx3 驅(qū)動程序是否僅在 usb 3.0 模式支持組合 uvc 和 cdc,而不支持 2.0 模式 2)或者 fx3 驅(qū)動程序是否也支持 2.0 模式
    發(fā)表于 05-15 07:32

    將CY7C68013A連接到基板管理控制器 (BMC),讀取設備描述符時發(fā)生FX2超時錯誤怎么解決?

    : 使用 ehci-platform 的新高速 USB 設備編號 4 [391.934969] usb 1-1:設備描述符讀取/8,錯誤-110 [397.134834] usb 1-
    發(fā)表于 05-14 07:36

    LPC55S28修改音頻數(shù)據(jù)格式后USB Aduio類異常的原因?

    您好 NXP 前輩,我已經(jīng)更改了 LPC55S28 官方 SDK 上的 USB 音頻數(shù)據(jù)格式。 我的主要問題是修改音頻流格式類型描述符。 我的想法是將 USB Aduio 每個通道的數(shù)據(jù)字節(jié)數(shù)從 2
    發(fā)表于 03-20 07:33

    使用stm32u535實現(xiàn)usb hid custom上下位機通信功能時遇到了從上位機(計算機)接收數(shù)據(jù)有個別錯誤的問題,怎么解決?

    usb傳輸?shù)臄?shù)據(jù)無誤。 但是調(diào)試時發(fā)現(xiàn)下位機接收到的數(shù)據(jù)第21~24位發(fā)生了改變。 調(diào)試后發(fā)現(xiàn)這些被改變的值和設備描述符的接收數(shù)據(jù)長度有關,如下圖分別是將修改為0x20和0x40后的變化。 此
    發(fā)表于 03-12 07:16

    使用官方評估板STM32H563ZI進行USB虛擬串口開發(fā),下載后電腦提示USB設備無法識別,設備描述符請求失敗怎么解決?

    使用官方評估板STM32H563ZI進行USB虛擬串口開發(fā),找到官方例程:Ux_Device_HID_CDC_ACM,屏蔽掉HID相關的配置和初始化代碼,下載后電腦提示USB設備無法識別,設備描述符請求失??!求指教?。?!
    發(fā)表于 03-11 08:06

    USB組合設備的配置描述符定要用IAD描述符嗎?

    USB組合設備的配置描述符定要用IAD描述符
    發(fā)表于 03-11 06:41

    服務器數(shù)據(jù)恢復——Ext4文件系統(tǒng)umount失敗的數(shù)據(jù)恢復案例

    塊組:Ext4文件系統(tǒng)的全部空間被劃分為若干個塊組,每個塊組結構基本上相同。 塊組描述符表:每個塊組都對應個塊組描述符,這些塊組描述符統(tǒng)
    的頭像 發(fā)表于 11-13 13:25 ?797次閱讀
    服務器數(shù)據(jù)恢復——Ext4文件系統(tǒng)umount失敗的數(shù)據(jù)恢復案例

    聊以太網(wǎng)發(fā)送描述符

    相對于其他總線,以太網(wǎng)的知識龐雜,當然,可獲取的資料也豐富。以太網(wǎng)的知識從驅(qū)動層到上層協(xié)議棧,很難一下消化,所以,不妨從點開始,不斷地拓展和鏈接,從而形成完整地以太網(wǎng)知識框架,進而更好地解決工程問題。
    的頭像 發(fā)表于 10-22 15:09 ?1129次閱讀
    聊<b class='flag-5'>一</b>聊以太網(wǎng)發(fā)送<b class='flag-5'>描述符</b>

    TLV320AIC3254EVM-K連接電腦無法識別USB是怎么回事?

    電腦系統(tǒng)是win10的,本來是可以識別的,后來我打開DFUTEST.exe,下載了image內(nèi)的個bin文件就變成無法識別USB了。現(xiàn)在要怎么辦? 電腦設備管理器,USB識別顯示:未知US
    發(fā)表于 10-12 08:10

    在Ubuntu 20.04上使用USB 3時遇到了FX3無法枚舉的情況,怎么解決?

    設備描述器請求響應只包含了應包含的 18 個字節(jié)中的 8 個字節(jié)。 描述符內(nèi)容包括正確的長度 18,但響應中沒有包含該數(shù)據(jù)。 FX3 固件將描述符創(chuàng)建為個常量變量 \"
    發(fā)表于 07-26 08:26

    嵌入式開發(fā) Win11安裝ST-Link 提示 設備描述符請求失敗 怎么處理?

    請問各位前輩,嵌入式開發(fā) Win11安裝ST-Link 提示 設備描述符請求失敗 怎么處理? 我安裝的ST-link版本是STSW_LINK009_V1.02和STSW_LINK009_V2.0.0。 目前安裝后顯示如下:
    發(fā)表于 07-23 13:53

    esp32-s2-soala-v1.2如何獲取攝像頭描述符?

    descriptors from PC side,eg. run `lsusb -v` in linux, 請問我該如何獲得所需usb描述符?
    發(fā)表于 06-27 06:48

    ESP32-C3載ble_hid_device_demo例程后自帶的USB串口無法識別怎么處理?

    當我在我的板子上下載了ble_hid_device_demo例程后,USB-SERIAL-JTAG口連接到電腦后不能被識別。 設備管理器中顯示:未知USB設備(設備描述符請求失敗)
    發(fā)表于 06-18 06:39

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品