Choď na obsah Choď na menu
 

USB špecifikácia - popis2

Štandardné deskriptory USB

Deskriptor je dátová štruktúra s definovaným formátom. Všetky štandardné deskriptory začínajú dvoma bajtami. Prvý bajt určuje celkovú dĺžku deskriptora v bajtoch vrátane prvých dvoch povinných bajtov. Druhý bajt identifikuje typ deskriptora.

Niektoré deskriptory obsahujú polia, ktoré špecifikujú index deskriptora STRING, ale je voliteľné, aby zariadenie podporovalo deskriptory STRING. Ak zariadenie nepodporuje deskriptory STRING, všetky polia, ktoré odkazujú na index deskriptora STRING, by sa mali vrátiť na nulu. Hodnota nula v ktoromkoľvek poli, ktorý má slúžiť na poskytnutie indexu popisu STRING, znamená, že žiaden takýto popisovač STRING nie je k dispozícii.

Ak druhý byte deskriptora identifikuje tento deskriptor ako jeden zo štandardných deskriptorov USB, ale prvý bajt tohto deskriptora určuje dĺžku menšiu ako dĺžky definované v špecifikáciách USB 2.0 (a prechodne tu), potom by deskriptor mal odmietnuť hostiteľom. Ak políčko dĺžky hlási, že deskriptor je dlhší, než sa očakávalo, potom by sa mali extra údaje ignorovať, ale stále sa považujú za súčasť deskriptora (to je dôležité, keď zariadenie vracia viac deskriptorov, ako je to v prípade, keď hostiteľ požaduje konfiguráciu deskriptor).

Ak deskriptory špecifické pre triedy alebo pre dodávateľov používajú rovnaký formát ako štandardné deskriptory (tj dva povinné bajty na začiatku deskriptora), potom sa v rámci výsledkov vyhľadávajú špecifické deskriptory pre triedu alebo dodávateľa, keď hostiteľ požiada o CONFIGURATION deskriptor. V opačnom prípade sa k deskriptorom špecifickým pre triedu alebo dodávateľa pristupuje odoslaním typu deskriptora špecifického pre triedu alebo dodávateľa v žiadosti GET_DESCRIPTOR.

Zvyšok tejto časti slúži na katalogizáciu štandardných deskriptorov USB zariadení a veľmi tesne odzrkadľuje oddiel 9.6 špecifikácií USB 2.0. Tieto definície deskriptorov dopĺňajú požiadavku GET_DESCRIPTOR .

ZARIADENIE

Každé zariadenie USB má presne jeden deskriptor zariadenia. Tento deskriptor poskytuje všeobecné informácie o zariadení, ako aj informácie, ktoré sa globálne týkajú zariadenia a všetkých jeho konfigurácií.

ofset Lúka veľkosť typ popis
0 bLength 1 číslo Veľkosť tohto deskriptora v bajtoch
1 bDescriptorType 1 konštantný DEVICE Typ deskriptora
2 bcdUSB 2 BCD Uvoľňovacie číslo špecifikácie USB v desatinnej kóde s binárnym kódom (tj. 2,10 je vyjadrené ako 210 hodín). Identifikuje vydanie špecifikácie USB so zariadením a jeho deskriptory sú kompatibilné.
4 bDeviceClass 1 Trieda Kód triedy (priradený rozhraním USB-IF)
  • Toto pole sa vynuluje, ak každé rozhranie v konfigurácii špecifikuje vlastné informácie triedy a rôzne rozhrania pracujú nezávisle.
  • Hodnota FFh v tomto poli označuje, že trieda zariadenia je špecifická pre dodávateľa.
5 bDeviceSubClass 1 subclass Kód podtriedy (priradený rozhraním USB-IF)
  • Kód podtriedy zariadenia je kvalifikovaný podľa kódu triedy tohto zariadenia.
  • Ak sa bDeviceClass vráti na nulu, potom toto pole musí byť tiež vynulované.
  • Keď bDeviceClass nie je nastavený na hodnotu FFh, potom všetky hodnoty pre toto pole sú vyhradené pre priradenie pomocou USB-IF.
6 bDeviceProtocol 1 Protokol Kód protokolu (priradený zariadením USB-IF)
  • Protokolový kód zariadenia je kvalifikovaný kódmi triedy a podtriedami daného zariadenia.
  • Hodnota 00h v tomto poli znamená, že zariadenie môže špecifikovať triedu špecifické protokoly na základe rozhrania, aj keď to nie je požiadavka.
  • Ak je toto pole nastavené na hodnotu FFh, zariadenie používa protokol špecifický pre dodávateľa.
7 bMaxPacketSize0 1 číslo Maximálna veľkosť paketu pre koncový bod nula (8, 16, 32 alebo 64 sú jedinými platnými možnosťami)
8 idVendor 2 ID ID dodávateľa (pridelené rozhraním USB-IF)
10 idProduct 2 ID ID produktu (priradené zariadením USB-IF)
12 bcdDevice 2 BCD Číslo vydania zariadenia v desatinnom čísle s binárnym kódovaním
14 iManufacturer 1 index Index deskriptora STRING popisujúci výrobcu
15 iProduct 1 index Index deskriptora STRING popisujúci produkt
16 iSerialNumber 1 index Index deskriptora STRING popisujúci sériové číslo zariadenia
17 bNumConfigurations 1 číslo Počet možných konfigurácií

DEVICE_QUALIFIER

Zariadenie s vysokou rýchlosťou, ktoré má rôzne informácie o zariadení v závislosti od rýchlosti, v ktorej je zariadenie v prevádzke, musí mať toto zariadenie aj popisovač DEVICE_QUALIFIER. Tento deskriptor poskytuje informácie o zariadení, ktoré by sa zmenili, ak by zariadenie pracovalo s alternatívnou rýchlosťou (tj keď zariadenie pracuje vo vysokej rýchlosti, tento deskriptor poskytuje rozdiely, ak zariadenie pracovalo s plnou rýchlosťou a naopak ). Tento deskriptor vynecháva polia z deskriptora DEVICE, ktorý by primerane nezávisel od rýchlosti zariadenia (napr. Index deskriptora STRING popisujúci výrobok).

Ak zariadenie s plnou rýchlosťou s poľom bcdUSB najmenej 0200h vo svojom deskriptore DEVICE prijme požiadavku na deskriptor DEVICE_QUALIFIER, musí odpovedať s chybou požiadavky.

ofset Lúka veľkosť typ popis
0 bLength 1 číslo Veľkosť tohto deskriptora v bajtoch
1 bDescriptorType 1 konštantný DEVICE_QUALIFIER typ deskriptora
2 bcdUSB 2 BCD Špecifikácia USB číslo vydania v binárne kódovaných desiatkovej (tj 2,00 je vyjadrená ako 200h).Identifikuje vydanie špecifikácie USB so zariadením a jeho deskriptory sú kompatibilné.
 

Toto pole musí byť minimálne 0200h.

4 bDeviceClass 1 Trieda Kód triedy (priradený rozhraním USB-IF)
5 bDeviceSubClass 1 subclass Kód podtriedy (priradený rozhraním USB-IF)
6 bDeviceProtocol 1 Protokol Kód protokolu (priradený zariadením USB-IF)
7 bMaxPacketSize0 1 číslo Maximálna veľkosť paketu pre koncový bod nula (8, 16, 32 alebo 64 sú jedinými platnými možnosťami)
8 bNumConfigurations 1 číslo Počet možných konfigurácií
9 bReserved 1 - Vyhradené pre budúce použitie, musí byť nula.

ZOSTAVA

Všetky zariadenia USB majú aspoň jeden deskriptor CONFIGURATION. Hostiteľ môže požiadať o konkrétny deskriptor CONFIGURATION pomocou indexu deskriptora, ktorý je založený na nulách a má použité bNumConfigurations (ako sa vrátil v deskriptore DEVICE). To znamená, že platné hodnoty, ktoré sa majú použiť ako index deskriptorov pri požiadavke na deskriptor CONFIGURATION, sú akékoľvek celé číslo v rozsahu od 0 do bNumConfigurations -1, vrátane.

Každý deskriptor KONFIGURÁCIE má aspoň jeden deskfér INTERFACE a každý deskriptor INTERFACE môže mať až 15 deskriptorov ENDPOINT. Keď hostiteľ požaduje určitý deskriptor KONFIGURÁCIE, prístroj vráti popisovač CONFIGURATION, ktorý bude nasledovať bezprostredne prvým popiscom INTERFACE, bezprostredne nasledujúc všetky deskriptory ENDPOINT pre koncové body definované rozhraním (ktoré nemusia byť). Nasleduje okamžite nasledujúci deskriptor rozhrania, ak existuje, a potom jeho deskriptory ENDPOINT, ak je to vhodné. Tento vzor pokračuje dovtedy, kým sa neprevedú všetky informácie v rámci konkrétnej konfigurácie.

Keď má zariadenie deskriptory špecifické pre dodávateľa alebo triedu, ktoré zodpovedajú štandardnému formátu deskriptora USB (tj prvý bajt deskriptora určuje dĺžku deskriptora a druhý bajt identifikuje typ deskriptora), tieto deskriptory sú tiež vrátil prekladané medzi deskriptormi CONFIGURATION, INTERFACE a ENDPOINT, keď hostiteľ požaduje určitý deskriptor CONFIGURATION. Preto systémový softvér nemôže prevziať nepretržité štandardné deskriptory, ako to vyplýva z predchádzajúceho odseku; softvér systému by mal skontrolovať typ deskriptora a preskočiť tento deskriptor, ak nie je štandardný deskriptor. Softvér by mal tiež skontrolovať, či štandardné deskriptory vykazujú aspoň očakávanú dĺžku.

Všimnite si, že index deskriptorov CONFIGURATION nie je rovnaký ako hodnota bConfigurationValue v deskriptore CONFIGURATION. bConfigurationValueje hodnota, ktorú hostiteľ prechádza ako parameter s požiadavkou SET_CONFIGURATION na výber konkrétnej konfigurácie, zatiaľ čo to nie je možné vykonať pomocou indexu deskriptora CONFIGURATION.

ofset Lúka veľkosť typ popis
0 bLength 1 číslo Veľkosť tohto deskriptora v bajtoch
1 bDescriptorType 1 konštantný KONFIGURÁCIA Typ deskriptora
2 wTotalLength 2 číslo Celková kombinovaná dĺžka v bajtoch všetkých deskriptorov vrátená so žiadosťou o tento deskriptor CONFIGURATION (vrátane konfigurácie, INTERFACE, ENDPOINT, deskriptorov špecifických pre triedy a dodávateľov).
4 bNumInterfaces 1 číslo Počet rozhraní podporovaných touto konfiguráciou
5 bConfigurationValue 1 číslo Hodnota, ktorá sa použije ako argument v požiadavke SET_CONFIGURATION, spôsobí, že zariadenie prevezme konfiguráciu opísanú týmto deskriptorom.
6 IConfiguration 1 index Index deskriptora STRING popisujúci túto konfiguráciu.
7 bmAttributes 1 bitmap Konfiguračné charakteristiky
7 6 5 4 3 2 1 0
7 Vyhradené, musí byť z historických dôvodov nastavené na jeden
6 Self-Powered
  • 0 = Zariadenie beží na napájacom zdroji zbernice
  • 1 = Zariadenie poskytuje lokálny zdroj napájania, ak je bMaxPowernenulový, zariadenie môže tiež využívať napájanie zbernice.
5 Vzdialené prebudenie
  • 0 = Remote Wakeup nie je podporovaná
  • 1 = Podpora vzdialeného budenia
4 ... 0 Vyhradené, vynulovať
8 bMaxPower 1 mA Maximálna spotreba tohto zariadenia zo zbernice, keď je plne funkčná a používa túto konfiguráciu.
  • Vyjadrené v jednotkách 2mA (tj hodnota 50 v tejto oblasti znamená 100mA).
  • Zariadenie hlási s poľom bmAttributes, či je konfigurácia zbernica alebo napájanie z vlastnej siete, ale stav zariadenia (získaný pomocou požiadavky GET_STATUS) hlási, či je zariadenie v súčasnosti samoúčinné.
  • Ak je zariadenie odpojené od externého zdroja napájania, nesmie odberať viac energie zo zbernice, ako je uvedené v tomto poli.
  • Niektoré zariadenia môžu byť schopné pracovať iba na napájaní zo zbernice. Zariadenie, ktoré nedokáže a stratilo svoj externý zdroj napájania, zlyhá operácie, ktoré už nepodporuje. Je na softvéri na hostiteľovi, aby určil, kedy to je prípad, čo môže byť vykonané s požiadavkou GET_STATUS.

 

OTHER_SPEED_CONFIGURATION

Tento deskriptor opisuje konfiguráciu vysokorýchlostného zariadenia, ak pracoval pri jeho alternatívnej rýchlosti. Hostiteľ by nemal požadovať tento deskriptor, pokiaľ už zo zariadenia nedosiahne popisovač DEVICE_QUALIFIER. Štruktúra OTHER_SPEED_CONFIGURATION je identická s štruktúrou popisu CONFIGURATION uvedeného vyššie. Jediný rozdiel je v tom, že pole bDescriptorType odzrkadľuje, že deskriptor je deskriptorom OTHER_SPEED_CONFIGURATION a nie deskriptorom CONFIGURATION.

ROZHRANIE

Popisovače rozhrania INTERFACE sa vrátia iba po deskriptoru CONFIGURATION, keď hostiteľ požaduje určitý deskriptor CONFIGURATION; nie je možné priamo požiadať o konkrétny deskriptor rozhrania. Rozhranie môže poskytovať alternatívne nastavenia v rámci konfigurácie, ktoré umožňujú meniť koncové body a / alebo ich charakteristiky. Predvolené rozhranie má pole bAlternateSetting vo svojom deskriptore INTERFACE vynulované.

ofset Lúka veľkosť typ popis
0 bLength 1 číslo Veľkosť tohto deskriptora v bajtoch
1 bDescriptorType 1 konštantný Typ deskriptora INTERFACE
2 bInterfaceNumber 1 číslo Číslo tohto rozhrania. Hodnota založená na nulách, ktorá identifikuje index tohto rozhrania v poli rozhrania podporovanom v rámci konfigurácie.
3 bAlternateSetting 1 číslo Hodnota použitá na výber alternatívnych nastavení popísaných týmto deskriptorom INTERFACE pre rozhranie s bInterfaceNumber v predchádzajúcom poli. Táto hodnota je nula, ak tento deskriptor opisuje predvolené nastavenia pre konkrétne rozhranie.
4 bNumEndpoints 1 číslo Počet koncových bodov použitých týmto rozhraním, nezahŕňa nulový koncový bod.
5 bInterfaceClass 1 Trieda Kód triedy (priradený rozhraním USB-IF)
  • Hodnota nula je vyhradená pre budúcu normalizáciu.
  • Ak je táto hodnota FFh, trieda rozhrania je špecifická pre dodávateľa.
  • Všetky ostatné hodnoty sú vyhradené pre priradenie pomocou USB-IF.
6 bInterfaceSubClass 1 subclass Kód podtriedy (priradený rozhraním USB-IF)
  • Kód podtriedy v tomto poli je určený hodnotou poľa bInterfaceClass .
  • Ak sa hodnota bInterfaceClass nastaví na nulu, potom toto pole musí byť tiež vynulované.
  • Ak nie je parameter bInterfaceClass nastavený na hodnotu FFh, potom všetky hodnoty tohto poľa sú vyhradené pre priradenie pomocou USB-IF.
7 bInterfaceProtocol 1 Protokol Kód protokolu (priradený zariadením USB-IF)
  • Kód protokolu v tomto poli je určený hodnotami polí bInterfaceClass a bInterfaceSubClass .
  • Ak rozhranie podporuje požiadavky špecifické pre jednotlivé triedy, toto pole identifikuje protokoly, ktoré používa zariadenie podľa definície špecifikácie triedy zariadenia.
  • Ak sa toto pole vynuluje, zariadenie v tomto rozhraní nepoužíva protokol špecifický pre danú triedu.
  • Ak je toto pole nastavené na hodnotu FFh, zariadenia používajú v tomto rozhraní protokol špecifický pre dodávateľa.
8 iInterface 1 index Index deskriptora STRING popisujúci toto rozhranie

 

Endpoint

Každý koncový bod použitý pre konkrétne rozhranie má deskriptor, ktorý nasleduje za deskriptorom konkrétneho rozhrania, keď hostiteľ požaduje určitý deskriptor KONFIGURÁCIE; hostiteľ nemôže výslovne požadovať konkrétny deskriptor ENDPOINT. A deskriptor ENDPOINT nikdy neurčuje koncový bod nula.

ofset Lúka veľkosť typ popis
0 bLength 1 číslo Veľkosť tohto deskriptora v bajtoch
1 bDescriptorType 1 konštantný Typ deskriptora ENDPOINT
2 bEndpointAddress 1 Endpoint Adresa koncového bodu na zariadení USB popísanom týmto deskriptorom. Toto pole má nasledujúci formát:
7 6 5 4 3 2 1 0
7 Smer (ignorované pre kontrolné koncové body)
  • 0 = OUT koncový bod
  • 1 = koncový bod IN
6 ... 4 Vyhradené, vynulovať
3 ... 0 Číslo koncového bodu
3 bmAttributes 1 bitmap Toto pole opisuje atribúty koncového bodu nasledovne:
7 6 5 4 3 2 1 0
7 ... 6 Vyhradené, vynulovať
5 ... 4 Typ použitia (iba izotermické koncové body, vyhradené a nulové pre ostatné koncové body)
  • 00 = koncový bod údajov
  • 01 = koncový bod spätnej väzby
  • 10 = koncový bod implicitných údajov o spätnej väzbe
  • 11 = Vyhradené
3 ... 2 Typ synchronizácie (Isochronné koncové body, rezervované a nulové pre ostatné typy koncových bodov)
  • 00 = Žiadna synchronizácia
  • 01 = Asynchrónne
  • 10 = Adaptívny
  • 11 = Synchrónne
1 ... 0 Typ prenosu
  • 00 = kontrola
  • 01 = izochrónne
  • 10 = Hromadné
  • 11 = Prerušenie
4 wMaxPacketSize 2 číslo Maximálna veľkosť paketu, ktorú tento koncový bod môže odosielať alebo prijímať.
  • Pre izochrónne koncové body sa táto hodnota použije na rezerváciu času zbernice; potrubie však nemusí vždy používať všetok rezervovaný čas zbernice.
  • Bity 10 ... 0 určujú maximálnu veľkosť paketu v bajtoch.
  • Pre vysokorýchlostné izochrónne a prerušené koncové body bity 12 ... 11 špecifikujú počet ďalších príležitostí transakcií na mikroframe (pozri Vysokorýchlostné koncové body s vysokou šírkou pásma ). Formát je nasledujúci:
    • 00 = žiadna (1 transakcia na mikroframe)
    • 01 = 1 ďalší (2 transakcie na mikroframe)
    • 10 = 2 ďalšie (3 transakcie na mikroframe)
    • 11 = Vyhradené
  • Bity 15 ... 13 sú vyhradené a musia byť vynulované.
6 bInterval 1 číslo Interval pre prieskum prístroja počas prenosu dát vyjadrený v jednotkách mikrofónov pre vysokorýchlostné zariadenia a rámce pre zariadenia s nízkou a vysokou rýchlosťou. Presný význam hodnoty v tejto oblasti závisí od typu koncového bodu a pracovnej rýchlosti zariadenia:
  • Plné a vysokorýchlostné izochrónne koncové body a koncové body vysokej rýchlosti prerušenia:
    • Toto pole musí byť v rozmedzí od 1 do 16.
    • Toto pole sa používa na výpočet obdobia ako 2 bInterval - 1 . To znamená, že hodnota 4 sa vypočíta na 2 4 - 1 = 2 3 = 8.
  • Koncové body prerušenia celej a nízkej rýchlosti:
    • Toto pole musí byť v rozmedzí od 1 do 255.
  • Koncové body vysokorýchlostnej veľkosti a kontroly OUT:
    • Toto pole musí byť v rozmedzí od 0 do 255.
    • Toto pole špecifikuje maximálnu rýchlosť NAK koncového bodu.
    • Hodnota nula označuje, že koncový bod nikdy nie je NAK
    • Ostatné hodnoty označujú nanajvýš 1 NAK za každý bintervalný počet mikrofónov .
    • Pozrite si PING transakčný protokol

STRING

Zariadenia môžu voliteľne podporovať deskriptory STRING. Ak zariadenie nepodporuje deskriptory STRING, každé pole, ktoré odkazuje na index deskriptora STRING, musí byť vynulované. Deskriptory STRING používajú kódy kódovania unicode a môžu podporovať viacero jazykov. Hostiteľ požaduje deskriptor STRING s požiadavkou GET_DECRIPTOR a musí prejsť 16-bitovou LANGID (podľa definície USB-IF) požadovaného jazyka do poľa wIndex . Zoznam aktuálne prijímaných LANGID sa nachádza tu .

Index reťazca 0 pre všetky jazyky vracia popisovač STRING, ktorý obsahuje pole všetkých dvojbajtových LANGID kódov, ktoré zariadenie podporuje.

Či už žiadame reťazec alebo pole LANGID, údaje nie sú ukončené NULL. Namiesto toho hostiteľ určuje dĺžku údajov odčítaním 2 z poľa bLengthdeskriptora.

Keď hostiteľ požiada indexový reťazec 0, vráti sa nasledujúci deskriptor:

ofset Lúka veľkosť typ popis
0 bLength 1 číslo Veľkosť tohto deskriptora v bajtoch
1 bDescriptorType 1 konštantný Typ deskriptora STRING
2 wLangID [0] 2 číslo LANGID kód nula
... ... ... ... ...
N wLangID [x] 2 číslo Kód LANGID x

Keď hostiteľ požaduje platný index reťazca iný než indexový reťazec 0 pre podporovanú LANGID, vráti sa nasledujúci deskriptor:

ofset Lúka veľkosť typ popis
0 bLength 1 číslo Veľkosť tohto deskriptora v bajtoch
1 bDescriptorType 1 konštantný Typ deskriptora STRING
2 bString N číslo Reťazec Unicode