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)
|
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 | 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
|
||||||||||||||||
8 | bMaxPower | 1 | mA | Maximálna spotreba tohto zariadenia zo zbernice, keď je plne funkčná a používa túto konfiguráciu.
|
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)
|
6 | bInterfaceSubClass | 1 | subclass | Kód podtriedy (priradený rozhraním USB-IF)
|
7 | bInterfaceProtocol | 1 | Protokol | Kód protokolu (priradený zariadením USB-IF)
|
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:
|
||||||||||||||||
3 | bmAttributes | 1 | bitmap | Toto pole opisuje atribúty koncového bodu nasledovne:
|
||||||||||||||||
4 | wMaxPacketSize | 2 | číslo | Maximálna veľkosť paketu, ktorú tento koncový bod môže odosielať alebo prijímať.
|
||||||||||||||||
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:
|
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 |