博客專欄

EEPW首頁 > 博客 > USB系列之第五章:USB描述符

USB系列之第五章:USB描述符

發(fā)布人:電子資料庫 時(shí)間:2022-09-03 來源:工程師 發(fā)布文章
USB描述符
  • 所有的USB設(shè)備都有一個(gè)描述主機(jī)信息的描述符層次結(jié)構(gòu),如設(shè)備是什么、誰制造的、它支持什么版本的USB、可以配置多少種方式、端點(diǎn)的數(shù)量及其類型等等更常見的USB描述符是

    • 設(shè)備描述符

    • 配置描述符

    • 接口描述符

    • 終結(jié)點(diǎn)描述符

    • 字符串描述符

  • USB設(shè)備只能有一個(gè)設(shè)備描述符。設(shè)備描述符包括以下信息:設(shè)備符合的USB版本、用于加載適當(dāng)驅(qū)動(dòng)程序的產(chǎn)品和供應(yīng)商ID以及設(shè)備可能具有的配置數(shù)量。配置的數(shù)量表示要遵循多少個(gè)配置描述符分支。如果描述器使用的是自供電的配置,那么它指定了設(shè)備的數(shù)量,或者說它使用的是自供電配置的數(shù)量。當(dāng)枚舉一個(gè)設(shè)備時(shí),主機(jī)讀取設(shè)備描述符,并可以決定啟用哪個(gè)配置。它一次只能啟用一個(gè)配置。例如,可以有高功率總線供電配置和自供電配置。如果設(shè)備插入有主電源的主機(jī),設(shè)備驅(qū)動(dòng)程序可以選擇啟用大功率總線供電配置,使設(shè)備在不連接電源的情況下也能供電,但如果設(shè)備連接到筆記本電腦或個(gè)人事務(wù)管理器,則可以啟用第二種配置(自供電)將需要電源的用戶插入設(shè)備。配置設(shè)置不限于功率差。每個(gè)配置都可以以相同的方式供電,并消耗相同的電流,但有不同的接口或端點(diǎn)組合。但是應(yīng)該注意的是,更改配置需要停止每個(gè)端點(diǎn)上的所有活動(dòng)。雖然USB提供了這種靈活性,但很少有設(shè)備有一個(gè)以上的配置。接口描述符可以看作是一個(gè)頭,或者將端點(diǎn)分組到一個(gè)功能組中,執(zhí)行設(shè)備的單個(gè)功能。例如,您可以擁有多功能傳真/掃描儀/打印機(jī)設(shè)備。打印機(jī)接口描述符功能可以描述打印機(jī)接口描述符的三個(gè)功能。與配置描述符不同,一次只啟用一個(gè)接口沒有限制。一個(gè)設(shè)備可以同時(shí)啟用一個(gè)或多個(gè)接口描述符。描述符有一個(gè)接口 B接口指定接口號(hào)和 平衡設(shè)置它允許界面動(dòng)態(tài)更改設(shè)置。例如,我們可以有一個(gè)有兩個(gè)接口的設(shè)備,接口一和接口二。一號(hào)接口 B接口設(shè)置為零表示它是第一個(gè)接口描述符和 平衡設(shè)置零接口2將有一個(gè) B接口設(shè)置為1表示它是第二個(gè)接口和 平衡設(shè)置為零(默認(rèn))。然后我們可以使用另一個(gè)描述符 B接口設(shè)置為1表示它是第二個(gè)接口,但這次設(shè)置 平衡設(shè)置對(duì)于一個(gè),指示此接口描述符可以作為另一個(gè)接口描述符2的替代設(shè)置。啟用此配置時(shí),前兩個(gè)接口描述符 B備用設(shè)置使用等于零。但是,在操作期間,主機(jī)可以發(fā)送一個(gè)指向接口1的SetInterface請(qǐng)求,另一個(gè)設(shè)置為1,以啟用另一個(gè)接口描述符。這比有兩種配置有一個(gè)優(yōu)勢(shì),因?yàn)槲覀兛梢酝ㄟ^接口0傳輸數(shù)據(jù),同時(shí)更改與接口1相關(guān)的端點(diǎn)設(shè)置,而不會(huì)影響接口0。每個(gè)端點(diǎn)描述符用于指定每個(gè)端點(diǎn)的傳輸類型、方向、輪詢間隔和最大數(shù)據(jù)包大小。端點(diǎn)0,默認(rèn)的控制端點(diǎn)總是被假定為控制端點(diǎn),因此從來沒有描述符。

USB描述符的組成
  • 所有的描述符都由一種通用格式組成。第一個(gè)字節(jié)指定描述符的長(zhǎng)度,而第二個(gè)字節(jié)表示描述符的類型。如果描述符的長(zhǎng)度小于規(guī)范定義的長(zhǎng)度,則主機(jī)將忽略它。但是,如果大小大于預(yù)期,主機(jī)將忽略多余的字節(jié),并開始在實(shí)際返回長(zhǎng)度的末尾查找下一個(gè)描述符。抵消場(chǎng)大小價(jià)值說明zero混合one數(shù)量描述符的大小(字節(jié))oneb說明one常數(shù)描述符類型two...n描述符的參數(shù)開始

設(shè)備描述符
  • USB設(shè)備的設(shè)備描述符代表整個(gè)設(shè)備。因此,一個(gè)USB設(shè)備只能有一個(gè)設(shè)備描述符。它指定了一些有關(guān)設(shè)備的基本但重要的信息,例如支持的USB版本、最大數(shù)據(jù)包大小、供應(yīng)商和產(chǎn)品id以及設(shè)備可以具有的可能配置的數(shù)量。設(shè)備描述符的格式如下所示。抵消場(chǎng)大小價(jià)值說明zero混合one數(shù)量描述符的大?。ㄗ止?jié))(18字節(jié))oneb描述器one常數(shù)設(shè)備描述符(0x01)twobcdUSB公司twoBCD公司設(shè)備也符合的USB規(guī)格號(hào)。fourB設(shè)備one等級(jí)類代碼(由USB組織分配)如果等于零,則每個(gè)接口指定它自己的類代碼如果等于0xFF,則類代碼由供應(yīng)商指定。否則字段是有效的類代碼。fiveB設(shè)備子類one子類子類代碼(由USB組織分配)sixB設(shè)備協(xié)議one協(xié)議協(xié)議代碼(由USB組織分配)sevenB包裝尺寸one數(shù)量零終結(jié)點(diǎn)的最大數(shù)據(jù)包大小。有效尺寸為8、16、32、64eightID供應(yīng)商two身份證件供應(yīng)商ID(由USB組織分配)tenIDP產(chǎn)品two身份證件產(chǎn)品ID(由制造商指定)twelveBCD設(shè)備twoBCD公司設(shè)備發(fā)布號(hào)fourteen圖像制造商one索引制造商字符串描述符的索引fifteeni產(chǎn)品one索引產(chǎn)品字符串描述符索引sixteeniSerialNumber公司one索引序列號(hào)字符串描述符索引seventeenbNum配置one整數(shù)可能配置的數(shù)量

    • 這個(gè) bcdUSB公司字段報(bào)告設(shè)備支持的最高版本的USB。該值采用二進(jìn)制編碼的十進(jìn)制格式,格式為0xJJMN,其中JJ是主版本號(hào),M是次要版本號(hào),N是次次要版本號(hào)。e、 g.USB 2.0報(bào)告為0x0200,USB 1.1報(bào)告為0x0110,USB 1.0報(bào)告為0x0100。

    • 這個(gè) b設(shè)備類,b設(shè)備子類 B設(shè)備協(xié)議由操作系統(tǒng)用于為您的設(shè)備查找類驅(qū)動(dòng)程序。通常只有bDeviceClass在設(shè)備級(jí)別設(shè)置。大多數(shù)類規(guī)范選擇在接口級(jí)別標(biāo)識(shí)自己,結(jié)果將bDeviceClass設(shè)置為0x00。這允許一個(gè)設(shè)備支持多個(gè)類。

    • 這個(gè) B包裝尺寸字段報(bào)告端點(diǎn)0的最大數(shù)據(jù)包大小。所有設(shè)備都必須支持終結(jié)點(diǎn)零。

    • 這個(gè) ID供應(yīng)商 IDP產(chǎn)品由操作系統(tǒng)用于為您的設(shè)備查找驅(qū)動(dòng)程序。供應(yīng)商ID由USB-IF .

    • 這個(gè)BCD設(shè)備具有與bcdUSB相同的格式,并用于提供設(shè)備版本號(hào)。此值由開發(fā)人員指定。

    • 存在三個(gè)字符串描述符來提供制造商、產(chǎn)品和序列號(hào)的詳細(xì)信息。不需要有字符串描述符。如果不存在字符串描述符,則應(yīng)使用零索引。

    • bNum配置定義設(shè)備在其當(dāng)前速度下支持的配置數(shù)。

配置描述符
  • 一個(gè)USB設(shè)備可以有幾種不同的配置,盡管大多數(shù)設(shè)備都很簡(jiǎn)單而且只有一種。配置描述符指定設(shè)備的供電方式、最大功耗、接口數(shù)量。因此,可以有兩種配置,一種用于設(shè)備總線供電,另一種用于電源供電。由于這是接口描述符的“頭”,因此使用不同于另一個(gè)配置的傳輸模式的一個(gè)配置也是可行的。一旦主機(jī)檢查了所有配置,主機(jī)將發(fā)送一個(gè)SetConfiguration命令,該命令的值與其中一個(gè)配置的bConfigurationValue相匹配。這用于選擇所需的配置。抵消場(chǎng)大小價(jià)值說明zero混合one數(shù)量描述符的大小(字節(jié))oneb描述器one常數(shù)配置描述符(0x02)two總長(zhǎng)度two數(shù)量返回?cái)?shù)據(jù)的總長(zhǎng)度(字節(jié))fourB接口one數(shù)量接口數(shù)量fiveB配置one數(shù)量值用作選擇此配置的參數(shù)sixI配置one索引描述此配置的字符串描述符的索引sevenBM屬性one位圖D7保留,設(shè)置為1。(USB 1.0總線供電)D6自供電D5遠(yuǎn)程喚醒D4..0保留,設(shè)置為0。eightB最大功率one媽媽2mA單元的最大功耗

    • 讀取配置描述符時(shí),它返回整個(gè)配置層次結(jié)構(gòu),其中包括所有相關(guān)接口和端點(diǎn)描述符。這個(gè) 總長(zhǎng)度字段反映層次結(jié)構(gòu)中的字節(jié)數(shù)。

    • B接口指定此配置的接口數(shù)

    • B配置由SetConfiguration請(qǐng)求用于選擇此配置。

    • I配置是以人類可讀形式描述配置的字符串描述符的索引。

    • BM屬性指定配置的電源參數(shù)。如果設(shè)備是自供電的,則設(shè)置為D6。位D7在usb1.0中用于表示總線供電的設(shè)備,但現(xiàn)在由bMaxPower完成。如果設(shè)備使用來自總線的任何電源,無論它是作為總線供電設(shè)備還是作為自供電設(shè)備,它都必須以bMaxPower報(bào)告其功耗。設(shè)備還可以支持遠(yuǎn)程喚醒,允許設(shè)備在主機(jī)處于掛起狀態(tài)時(shí)喚醒主機(jī)。

    • B最大功率定義設(shè)備將從總線消耗的最大功率。這是以2mA為單位的,因此可以指定最大約500mA。該規(guī)范允許大功率總線供電設(shè)備從VBU中的電流不超過500mA。如果設(shè)備失去外部電源,則其消耗的電量不得超過bMaxPower中指示的值。如果沒有外部電源,它將無法執(zhí)行任何操作。

接口描述符
  • 接口描述符可以看作是一個(gè)頭,或者將端點(diǎn)分組到一個(gè)功能組中,執(zhí)行設(shè)備的單個(gè)功能。接口描述符符合以下格式,抵消場(chǎng)大小價(jià)值說明zero混合one數(shù)量描述符大?。ㄗ止?jié))(9字節(jié))oneb描述器one常數(shù)接口描述符(0x04)twoB接口one數(shù)量接口數(shù)量three平衡設(shè)置one數(shù)量用于選擇替代設(shè)置的值fourB點(diǎn)數(shù)one數(shù)量用于此接口的終結(jié)點(diǎn)數(shù)fiveBinterfaceclassone等級(jí)類代碼(由USB組織分配)six子類接口one子類子類代碼(由USB組織分配)sevenB接口協(xié)議one協(xié)議協(xié)議代碼(由USB組織分配)eight接口one索引字符串描述符索引

    • B接口指示接口描述符的索引。它應(yīng)該從零開始,并且每增加一個(gè)新的接口描述符。

    • 平衡設(shè)置可用于指定替代接口. 這些可選接口可以用設(shè)置接口請(qǐng)求

    • B點(diǎn)數(shù)指示接口使用的終結(jié)點(diǎn)數(shù)。此值應(yīng)排除端點(diǎn)0,并用于指示要遵循的端點(diǎn)描述符的數(shù)量。

    • BinInterfaceClass,BinInterfaceSubclass B接口協(xié)議可用于指定支持的類(例如HID、通信、大容量存儲(chǔ)等),這允許許多設(shè)備使用類驅(qū)動(dòng)程序,從而避免為設(shè)備編寫特定的驅(qū)動(dòng)程序。

    • 接口允許接口的字符串描述。

終結(jié)點(diǎn)描述符
  • 端點(diǎn)描述符用于描述端點(diǎn)0以外的端點(diǎn)。端點(diǎn)0始終被假定為控制端點(diǎn),并且在請(qǐng)求任何描述符之前進(jìn)行配置。主機(jī)將使用這些描述符返回的信息來確定總線的帶寬需求。抵消場(chǎng)大小價(jià)值說明zero混合one數(shù)量描述符大小(字節(jié))(7字節(jié))oneb描述器one常數(shù)終結(jié)點(diǎn)描述符(0x05)two修改地址one終結(jié)點(diǎn)終點(diǎn)地址
    位0..3b端點(diǎn)編號(hào)。位4..6b保留。設(shè)為零Bits 7 Direction 0 = Out, 1 = In (Ignored for Control Endpoints)threeBM屬性one位圖位0..1傳輸類型

    • 00 = Control
      01 = Isochronous10 = Bulk11 = Interrupt

  • 位2..7被保留。如果是等時(shí)端點(diǎn),
    Bits 3..2 = Synchronisation Type (Iso Mode)

    • 00 = No Synchonisation
      01 = Asynchronous10 = Adaptive11 = Synchronous

  • Bits 5..4 = Usage Type (Iso Mode)

    • 00 = Data Endpoint
      01 = Feedback Endpoint10 = Explicit Feedback Data Endpoint11 = Reserved

  • four包長(zhǎng)度two數(shù)量此端點(diǎn)能夠發(fā)送或接收的最大數(shù)據(jù)包大小sixB間期one數(shù)量輪詢終結(jié)點(diǎn)數(shù)據(jù)傳輸?shù)拈g隔。幀計(jì)數(shù)中的值。對(duì)批量控制終結(jié)點(diǎn)忽略(&C)。對(duì)于中斷端點(diǎn),Isochronous必須等于1,并且字段的范圍可以是1到255。

    • 修改地址指示此描述符描述的端點(diǎn)。

    • BM屬性指定傳輸類型。這可以是控制 ,中斷 ,等時(shí)或批量傳輸. 如果指定了同步端點(diǎn),則可以選擇其他屬性,例如同步和使用類型。

    • 包長(zhǎng)度指示此終結(jié)點(diǎn)的最大負(fù)載大小。

    • B間期用于指定某些傳輸?shù)妮喸冮g隔。單位以幀表示,因此對(duì)于低速/全速設(shè)備,這等于1ms,對(duì)于高速設(shè)備等于125us。

字符串描述符
  • 字符串描述符提供人類可讀的信息,并且是可選的。如果不使用它們,則描述符的任何字符串索引字段都必須設(shè)置為零,表示沒有可用的字符串描述符。字符串被編碼在Unicode碼可以制作格式和產(chǎn)品來支持多種語言。字符串索引0應(yīng)返回受支持語言的列表??梢栽谥姓业経SB語言ID的列表通用串行總線語言標(biāo)識(shí)符(LANGIDs)版本1.0抵消場(chǎng)大小價(jià)值說明zero混合one數(shù)量描述符的大?。ㄗ止?jié))oneb描述器one常數(shù)字符串描述符(0x03)twoWLANGID[0]two數(shù)支持的語言代碼0
    (例如0x0409英語-美國(guó))four瓦朗吉德[1]two數(shù)支持的語言代碼1(例如0x0c09英語-澳大利亞)n瓦朗吉德[x]two數(shù)支持的語言代碼x(例如0x0407德語-標(biāo)準(zhǔn))
    上面的字符串描述符顯示了字符串描述符0的格式。主機(jī)應(yīng)讀取此描述符以確定可用的語言。如果wIndex的語言支持發(fā)送,則獲取描述符(字符串)請(qǐng)求所有后續(xù)字符串采用以下格式,抵消場(chǎng)大小價(jià)值說明zero混合one數(shù)量描述符的大?。ㄗ止?jié))oneb描述器one常數(shù)字符串描述符(0x03)twoB串nUnicode碼Unicode編碼字符串


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: USB

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉