Choď na obsah Choď na menu
 

USB špecifikácia - popis1

https://wiki.osdev.org/Universal_Serial_Bus

Požiadavky na zariadenie USB

Štandardné požiadavky, špecifické pre danú triedu a požiadavky špecifické pre dodávateľa sa vykonávajú cez zariadenie USB cez predvolené riadiace potrubie. Transformácia SETUP má vždy veľkosť dátového užitočného objemu 8 bajtov, ako je uvedené v sekcii Maximum Data Payload Size of Control Transfers . Formát údajov o nastaveniach je nasledujúci:

ofset Lúka veľkosť typ popis
0 bmRequestType 1 bitmap
7 6 5 4 3 2 1 0
7 Smer prenosu údajov * Hodnota tohto bitu sa ignoruje, keď wLength je nula
  • 0b = Host-to-device
  • 1b = Device-to-host
6 ... 5 Typ žiadosti
  • 00b = štandardné
  • 01b = Trieda
  • 10b = Predajca
  • 11b = Vyhradené
4 ... 0 príjemcu
  • 00000b = Zariadenie
  • 00001b = Rozhranie
  • 00010b = koncový bod
  • 00011b = Iné
  • 00100b až 11111b = Vyhradené
1 bRequest 1 hodnota Špecifická požiadavka
2 wValue 2 hodnota Pole veľkosti slova Word môže (alebo nemusí) slúžiť ako parameter žiadosti v závislosti od konkrétnej žiadosti.
4 Windex 2 Index alebo offset Pole veľkosti slova, ktoré môže (alebo nemusí) slúžiť ako parameter žiadosti v závislosti od konkrétnej žiadosti. Typicky toto pole obsahuje index alebo hodnotu posunu.
 

Keď bmRequestType určuje koncový bod ako príjemca, formát tohto poľa je nasledovný:

7 6 5 4 3 2 1 0
smer Vyhradené (vynulované) Číslo koncového bodu
15 14 13 12 11 10 9 8
Vyhradené (vynulované)

Signálny bit (bit 7 ) je nastavený na nulu, aby indikoval koncový bod OUT s určeným číslom koncového bodu alebo je nastavený na jeden, aby indikoval koncový bod IN so zadaným číslom koncového bodu. Hostiteľ by mal vždy nastaviť smerový bit na nulu (ale zariadenie by malo akceptovať hodnotu), keď je koncový bod súčasťou riadiaceho potrubia.

Keď bmRequestType určuje rozhranie ako príjemcu, formát tohto poľa je nasledovný:

7 6 5 4 3 2 1 0
Číslo rozhrania
15 14 13 12 11 10 9 8
Vyhradené (vynulované)
6 wLength 2 počítať Počet bajtov, ktoré sa majú preniesť, ak ide o štádium DATA.
 
  • Ak je toto pole nenulové a bmRequestType označuje prenos z prístroja na hostiteľa, zariadenie sa nikdy nesmie vrátiť viac ako šestnásť bajtov dát. Zariadenie sa však môže vrátiť menej.
  • Ak je toto pole nenulové a bmRequestType označuje prechod z hostiteľa do zariadenia, potom hostiteľ musí odoslať presne dva bajty dát. Ak hostiteľ pošle viac ako dva bajty, chovanie zariadenia nie je definované.

Keď zariadenie dostane žiadosť, ktorá je nedefinovaná, je nevhodná vzhľadom na aktuálne nastavenie alebo stav zariadenia alebo používa hodnoty, ktoré sú pre danú žiadosť nevhodné, existuje chyba požiadavky . Zariadenie spracováva chybu požiadavky vrátením STALL PID na ďalšiu fázu DATA alebo STATUS, najlepšie v ďalšej transakcii DATA stage.

Štandardné požiadavky

Štandardné kódy požiadavky USB
bRequest hodnota
GET_STATUS 0
CLEAR_FEATURE 1
rezervovaný 2
SET_FEATURE 3
rezervovaný 4
SET_ADDRESS 5
GET_DESCRIPTOR 6
SET_DESCRIPTOR 7
GET_CONFIGURATION 8
SET_CONFIGURATION 9
GET_INTERFACE 10
SET_INTERFACE 11
SYNC_FRAME 12

Štandardné požiadavky sú definované pre všetky zariadenia USB a všetky zariadenia USB musia odpovedať na tieto štandardné požiadavky aj v prípade, že zariadenie nebola priradená adresa, alebo zariadenie nebola nakonfigurovaná. Ak chcete vydať určitú požiadavku, softvér vytvorí DATA paket SETUP pomocou vhodného kódu požiadavky , platného bmRequestType, príslušných hodnôt parametrov (alebo nula, ak nie je použiteľných) pre wValue a wIndex a množstva dátových bajtov, ktoré sa majú prenášať pre wLength. Vpravo sú štandardné kódy požiadaviek na zariadenie USB a zvyšok tejto časti sa zaoberá každou požiadavkou.

SET_ADDRESS

Požiadavka SET_ADDRESS má nasledujúci formát paketu SETUP DATA:

SET_ADDRESS SETUP DATA Formát paketu
bmRequestType bRequest wValue Windex wLength
00000000b SET_ADDRESS 
5
Adresa zariadenia nula nula

Táto žiadosť nemá štádium DATA, iba fázu SETUP a STATUS.

wValue určuje adresu, ktorú chcete priradiť zariadeniu. Chovanie zariadenia nie je definované, keď wValue určuje adresu väčšiu ako 127.

Presné správanie zariadenia po žiadostiach SET_ADDRESS závisí od aktuálneho stavu zariadenia:

  • Keď je zariadenie v predvolenom stave, nenulová hodnota wValue spôsobí, že zariadenie prechádza do stavu adresy. Keď je zariadenie v predvolenom stave, wValue nula nemá žiadny vplyv.
  • Ak je zariadenie v stave adresy, nenulová hodnota wValue udrží zariadenie v stave Adresa, ale zariadenie reaguje na novo nastavenú adresu. Keď je zariadenie v stave adresy, hodnota wValue nula prechádza zariadenie do predvoleného stavu.
  • Keď je zariadenie v konfigurovanom stave, chovanie zariadenia nie je definované pre požiadavku SET_ADDRESS.

Toto je jediná požiadavka, ktorá je dokončená po úspešnom dokončení štádia STATUS. Po uplynutí intervalu obnovenia / obnovenia obnovy (10 milisekúnd) sa očakáva, že zariadenie dokáže dokončiť stav STATUS tejto žiadosti do 50 milisekúnd. Po dokončení štádia STATUS sa na zariadenie povoľuje interval obnovy 2 milisekúnd predtým, ako musí byť schopný prijať ďalšie pakety SETUP pre ďalšie požiadavky.

GET_DESCRIPTOR

Štandardné typy deskriptorov USB
Typ deskriptora hodnota
ZARIADENIE 1
ZOSTAVA 2
STRING 3
ROZHRANIE 4
Endpoint 5
DEVICE_QUALIFIER 6
OTHER_SPEED_CONFIGURATION 7
INTERFACE_POWER 8

Požiadavka GET_DESCRIPTOR má nasledujúci formát paketu SETUP DATA:

GET_DESCRIPTOR SETUP DATA Formát paketu
bmRequestType bRequest wValue Windex wLength
10000000b GET_DESCRIPTOR
6
Typ deskriptora Index deskriptorov Zero alebo 
jazyk ID

Dĺžkadeskriptora

Bajt s vysokým poradím wValue určuje typ deskriptora (pozri tabuľku typov štandardných deskriptorov USB, vpravo). Bajt s nízkym poriadkom wValue sa používa iba na výber konkrétneho deskriptora STRING alebo CONFIGURATION a mal by sa inak vrátiť na nulu.

Pole wIndex sa používa iba pre deskriptory STRING na určenie požadovaného jazyka a malo by byť nulové pre ostatné typy deskriptorov.

Rôzne typy deskriptorov majú rôzne dĺžky, o ktorých sa čoskoro bude diskutovať. Ak je hodnota wLength menšia ako veľkosť vráteného deskriptora, potom zariadenie vráti iba prvé biele bajty údajov deskriptora. Ak je wLength väčšia ako veľkosť vráteného deskriptora, vráti sa úplný deskriptor, za ním nasleduje krátky paket (paket kratší ako maximálna veľkosť dátového užitočného objemu vrátane dĺžky 0 bajtov).

Všetky zariadenia USB musia podporovať požiadavky na deskriptory DEVICE, CONFIGURATION a STRING. Všetky vysokorýchlostné zariadenia musia podporovať základné operácie pri plnej rýchlosti; takéto zariadenia tiež podporujú DEVICE_QUALIFIER a OTHER_SPEED_CONFIGURATION deskriptory, ktoré vrátia tie isté dáta, ktoré zariadenie vráti pre požiadavky DEVICE a CONFIGURATION, ak zariadenie pracovalo rýchlosťou, s ktorou momentálne nepracuje.

Požiadavka na deskriptor KONFIGURÁCIE tiež vráti všetky deskriptory INTERFACE pre zadaný index deskriptora konfigurácie (tj bajt s nízkym poradím wValue ), ako aj všetky deskriptory ENDPOINT priradené ku všetkým vráteným deskriptormi INTERFACE, všetko v jedna žiadosť.

GET_DESCRIPTOR je platná požiadavka na zariadenie v predvolenom stave, na adrese alebo nakonfigurovanom stave.

SET_DESCRIPTOR

Požiadavka SET_DESCRIPTOR je voliteľná; ak je podporovaná, môže byť použitá na aktualizáciu deskriptorov alebo pridávanie nových.

Požiadavka SET_DESCRIPTOR má nasledujúci formát paketu SETUP DATA:

SET_DESCRIPTOR SETUP DATA Formát paketu
bmRequestType bRequest wValue Windex wLength
00000000b SET_DESCRIPTOR 
7
Typ deskriptora Index deskriptorov Zero alebo 
jazyk ID

Dĺžka deskriptora

Bajt s vysokým poradím wValue špecifikuje typ deskriptora. Bajt s nízkym poriadkom wValue sa používa iba na výber konkrétneho deskriptora STRING alebo CONFIGURATION a mal by sa inak vrátiť na nulu.

Pole wIndex sa používa iba pre deskriptory STRING na určenie požadovaného jazyka a malo by byť nulové pre ostatné typy deskriptorov.

Pole wLength určuje, koľko bajtov bude prenesených z hostiteľa do zariadenia.

Táto žiadosť podporuje iba typy DEVICE, CONFIGURATIOn a STRING.

Ak táto žiadosť nie je podporovaná, zariadenie reaguje na chybu Reuqest.

Ak je táto požiadavka podporovaná, je platná len vtedy, keď je zariadenie v adrese alebo nakonfigurovanom stave. správanie prístroja je nedefinované, ak je táto požiadavka vykonaná, keď je zariadenie v predvolenom stave.

GET_CONFIGURATION

Požiadavka GET_CONFIGURATION má nasledujúci formát paketu SETUP DATA:

GET_CONFIGURATION SETUP DATA Formát paketu
bmRequestType bRequest wValue Windex wLength
10000000b GET_CONFIGURATION 
8
nula nula jeden

Zariadenie pošle jednobajtový DATA paket počas fázy DATA prenosu ovládania. Tento bajt je hodnota aktuálnej konfigurácie zariadenia. Hodnota nula znamená, že zariadenie ešte nebolo nakonfigurované (je to v stave adresy). Správanie zariadenia nie je definované, ak je táto požiadavka vydaná, keď je zariadenie v predvolenom stave.

SET_CONFIGURATION

Požiadavka SET_CONFIGURATION má nasledujúci formát paketu SETUP DATA:

SET_CONFIGURATION SETUP DATA Formát paketu
bmRequestType bRequest wValue Windex wLength
00000000b SET_CONFIGURATION 
9
rezervovaný Konfiguračná hodnota nula nula

Bajt nízkeho poradia wValue určuje požadovanú hodnotu konfigurácie. Bajt s nízkym poradím wValue musí byť buď nula, alebo musí zodpovedať poľa hodnoty konfigurácie deskriptora konfigurácie vráteného zariadením. Zadaním nulovej konfigurácie nastavíte zariadenie do stavu adresy.

Ak je zariadenie v predvolenom stave alebo ak bajt s vysokým poradím wValue nie je nulový, wIndex nie je nula, alebo wLength nie je nula, potom správanie po vydaní tejto požiadavky nie je definované.

Ak zadaná hodnota konfigurácie nie je ani nula ani platná hodnota konfigurácie určená pomocou deskriptora konfigurácie zariadenia, zariadenie reaguje na chybu požiadavky.

GET_INTERFACE

Požiadavka GET_INTERFACE má nasledujúci formát paketu SETUP DATA:

GET_INTERFACE SETUP DATA Formát paketu
bmRequestType bRequest wValue Windex wLength
10000001b GET_INTERFACE 
10
nula Rozhranie jeden

Hostiteľ používa túto žiadosť na určenie, ktoré alternatívne nastavenie (ako je opísané v časti Funkcie, konfigurácie, rozhrania a koncové body ) sa používa pre konkrétne rozhranie aktuálnej konfigurácie. Zariadenie reaguje s dátovým paketom s dlhým jedným bajtom v dátovej fáze, pričom prenesený bajt je alternatívna hodnota nastavenia rozhrania špecifikovaného v tejto žiadosti.

Ak wValue nie je nula, wLength nie je jedna, wIndex určuje neplatné rozhranie alebo zariadenie je v stave adresy, potom zariadenie reaguje na chybu požiadavky.

Chovanie zariadenia v predvolenom stave po prijatí tejto žiadosti nie je definované.

Táto požiadavka platí pre zariadenie v konfigurovanom stave.

SET_INTERFACE

Požiadavka SET_INTERFACE má nasledujúci formát paketu SETUP DATA:

SET_INTERFACE SETUP DATA Formát paketov
bmRequestType bRequest wValue Windex wLength
00000001b SET_INTERFACE 
11
Alternatívne nastavenie Rozhranie nula

Hostiteľ používa túto požiadavku na výber alternatívneho nastavenia (ako je popísané v časti Funkcie, konfigurácie, rozhrania a koncové body ), ktoré sa majú používať pre konkrétne rozhranie aktuálnej konfigurácie. Ak zadané rozhranie podporuje iba predvolené nastavenie, zariadenie môže v priebehu štádia STATUS žiadosti vrátiť spúšťanie STALL.

Ak rozhranie alebo alternatívne nastavenie neexistuje alebo ak je zariadenie v stave adresy, zariadenie reaguje na chybu požiadavky. Chovanie zariadenia nie je definované, ak wLength nie je nula, alebo zariadenie je v predvolenom stave.

Toto je platná žiadosť, keď je zariadenie v konfigurovanom stave.

CLEAR_FEATURE

Štandardné funkcie funkcie USB
Voľba funkcií príjemcu hodnota
DEVICE_REMOTE_WAKEUP Zariadenie 1
ENDPOINT_HALT Endpoint 0
TESTOVACÍ MÓD Zariadenie 2

Požiadavka CLEAR_FEATURE má nasledujúci formát paketu SETUP DATA:

CLEAR_FEATURE SETUP DATA Formát paketov
bmRequestType bRequest wValue Windex wLength
00000000b 
00000001b 
00000010b
CLEAR_FEATURE 
1
Voľba funkcií Nula alebo 
rozhranie alebo 
koncový bod
nula

Hostiteľ používa túto požiadavku na zrušenie alebo zakázanie konkrétnej funkcie.

wValue musí obsahovať volič funkcií (pozri tabuľku Štandardných voličov funkcií USB, napravo), ktorý zodpovedá príjemcovi, ako je uvedené v bmRequestType .

Vydávanie tejto žiadosti pri odvolávaní sa na funkciu, ktorú nie je možné odstrániť alebo neexistuje, alebo odkaz na rozhranie alebo koncový bod, ktorý neexistuje, spôsobí, že zariadenie reaguje na chybu požiadavky.

Ak je zariadenie v predvolenom stave alebo wLength nie je nula, chovanie zariadenia nie je definované.

Táto žiadosť je platná, keď je zariadenie v konfigurovanom stave. Keď je zariadenie v stave adresy, tento žiadosť je platný iba pri odkazovaní na koncový bod nula, inak zariadenie reaguje na chybu požiadavky.

Funkcia TEST_MODE nie je možné vyriešiť touto požiadavkou.

SET_FEATURE

Štandardné USB testovacie zariadenia
hodnota popis
00h rezervovaný
01h Test_J
02h Test_K
03h Test_SE0_NAK
04h Test_Packet
05h Test_Force_Enable
06h-3Fh Vyhradené pre štandardné testovacie selektory
3Fh-BFH rezervovaný
C0h-FFh Vyhradené pre skúšobné režimy špecifické pre dodávateľa

Požiadavka SET_FEATURE má nasledujúci formát paketu SETUP DATA:

SET_FEATURE SETUP DATA Formát paketov
bmRequestType bRequest wValue Windex wLength
00000000b 
00000001b 
00000010b
SET_FEATURE 
3
Voľba funkcií Testovací volič Nula alebo 
rozhranie alebo 
koncový bod
nula

Hostiteľ používa túto žiadosť na nastavenie alebo povolenie konkrétnej funkcie.

wValue musí obsahovať volič funkcií, ktorý zodpovedá príjemcovi, ako je uvedené v bmRequestType .

Keď wValue vyberie funkciu TEST_MODE, bmRequestType a bajt s nízkym poradím wIndexu musia byť obe nastavené na nulu. Bajt s vysokým poradím wIndexu musí byť platným voličom testov (pozri tabuľku Štandardných USB Test Selector, vpravo) alebo zariadenie reaguje s chybou Request. Prístroj musí nastaviť svoj port smerujúci proti smeru prúdu do testovacieho režimu nie dlhšie ako 3 milisekúnd po dokončení štádia STATUS tejto žiadosti. Ak chcete ukončiť skúšobný režim, napájanie zariadenia sa musí cyklicky vykonávať. Zariadenie musí podporovať funkciu TEST_MODE v predvolených stavoch, adresách a nakonfigurovaných vysokorýchlostných stavoch zariadení.

Ak táto žiadosť odkazuje na funkciu, ktorá neexistuje alebo sa nedá nastaviť, zariadenia reagujú v priebehu štádia STAV pomocou stĺpca STALL.

Ak je zadaný koncový bod alebo rozhranie, ktoré neexistuje, alebo ak je zariadenie v stave adresy a je zadaný iný koncový bod ako nula koncového bodu, zariadenie reaguje na chybu požiadavky.

Okrem požiadaviek, ktoré vyberajú funkciu TEST_MODE, vydanie tejto žiadosti zariadeniu v predvolenom stave má za následok nedefinované správanie. Nenulová hodnota pre wLength tiež vedie k nedefinovanému správaniu.

Táto žiadosť je platná, keď je zariadenie v konfigurovanom stave alebo keď je zariadenie v stave adresy a odkazuje sa len na nulu koncového bodu.

GET_STATUS

Požiadavka GET_STATUS má nasledujúci formát paketu SETUP DATA:

GET_STATUS NASTAVENIE DÁTA Formát paketu
bmRequestType bRequest wValue Windex wLength
10000000b 
10000001b 
10000010b
GET_STATUS 
0
nula Nula alebo 
rozhranie alebo 
koncový bod
Dva

Hostiteľ používa túto žiadosť na to, aby zistil stav príjemcu, ako je to uvedené v poli bmRequestType a v prípade príjemcu rozhrania alebo koncového bodupole wIndex .

Ak wValue nie je nula, wLength nie je dva, alebo wIndex je nenulový, keď bmRequestType určuje príjemcu zariadenia alebo je zariadenie v predvolenom stave, potom správanie zariadenia nie je definované.

Ak tento žiadosť odkazuje na koncový bod alebo rozhranie, ktoré neexistuje (vrátane akéhokoľvek koncového bodu iného ako koncový bod nula, keď je zariadenie v stave adresy), zariadenie reaguje na chybu požiadavky.

Ako odpoveď na túto žiadosť zariadenie vydáva prenos údajov o veľkosti 2 bajty v štádiu DATA hostiteľovi. Tieto dva bajty predstavujú požadovaný stav a význam závisí od typu príjemcu.

Príjemca zariadenia

Keď bol príjemcom zariadenie, dva bajty opisujú stav takto:

7 6 5 4 3 2 1 0
Vyhradené (vynulované) Vzdialené 
prebudenie
Vlastné 
napájanie
15 14 13 12 11 10 9 8
Vyhradené (vynulované)

Pole Self Power je nastavené na hodnotu 1, čo indikuje, že zariadenie je aktuálne napájané externým zdrojom napájania alebo 0 znamená, že zariadenie práve pracuje s napájaním napájaným zbernicou.

Pole vzdialenej prebudenia je nastavené na 0, keď je zariadenie resetované, a indikuje, či je zariadenie v súčasnosti povolené na vykonávanie vzdialenej signalizácie budenia (pozrite si časť Schopnosť vzdialeného budenia ). Hostiteľ môže upraviť hodnotu poľa Diaľkové prebudenie vydaním požiadavky CLEAR_FEATURE alebo SET_FEATURE pomocou voliča funkcií DEVICE_REMOTE_WAKEUP.

Príjemca rozhrania

Keď bol príjemcom rozhranie, dva bajty opisujú stav takto:

7 6 5 4 3 2 1 0
Vyhradené (vynulované)
15 14 13 12 11 10 9 8
Vyhradené (vynulované)
Príjemca koncového bodu

Keď bol príjemcom koncový bod, dva bajty popisujú stav takto:

7 6 5 4 3 2 1 0
Vyhradené (vynulované) zastaviť
15 14 13 12 11 10 9 8
Vyhradené (vynulované)

Všetky typy prerušenia a hromadného koncového bodu musia implementovať funkciu zastavenia, inak je to voliteľné. Pole Halt odzrkadľuje stav zastavovacieho prvku koncového bodu. Hodnota 0 v poli Halt znamená, že koncový bod nie je zastavený a hodnota 1 v poli Halt znamená, že koncový bod je zastavený.

Hostiteľ môže nastaviť funkciu zastavenia koncového bodu požiadavkou SET_FEATURE pomocou voliča funkcií ENDPOINT_HALT alebo hostiteľ môže vymazať funkciu zastavenia koncového bodu pomocou požiadavky CLEAR_FEATURE pomocou voliča funkcií ENDPOINT_HALT. Keď sa týmto spôsobom použije požiadavka CLEAR_FEATURE a koncový bod používa prepínací dátový bit, prepínací dátový bit sa vynuluje.

Predvolené ovládacie potrubie sa nevyžaduje ani odporúča vykonať funkciu zastavenia, ale niektoré zariadenia sa môžu rozhodnúť použiť funkciu zastavenia na predvolenom ovládacom potrubí, aby odrážali funkčné chybové podmienky. Ak je funkcia zastavenia nastavená na predvolené riadiace potrubie, zariadenie reaguje pomocou handshake STALL počas štádia DATA alebo STATUS všetkých prenosov s výnimkou štandardných požiadaviek GET_STATUS, CLEAR_FEATURE a SET_FEATURE. Zariadenie sa navyše nevyžaduje zastaviť žiadosti špecifické pre dodávateľa alebo triedu, keď je nastavená funkcia zastavenia.

SYNCH_FRAME

Požiadavka SYNCH_FRAME má nasledujúci formát paketu SETUP DATA:

SYNCH_FRAME SETUP DATA Formát paketu
bmRequestType bRequest wValue Windex wLength
10000010b SYNCH_FRAME 
12
nula Endpoint Dva

Táto požiadavka sa používa iba pre izochrónne koncové body, ktoré používajú implicitnú synchronizáciu vzorov. To znamená, že niektoré izochrónne koncové body vyžadujú prenesenie jednotlivých snímok na zmenu veľkosti podľa konkrétneho vzoru (napríklad na dosiahnutie bitovej rýchlosti špecifickej pre aplikáciu). Toto volanie spôsobí, že zariadenie vysiela hostiteľovi hodnotu 2 bajtov, čo je číslo rámca, na ktorom vzor začal.

Vysoko rýchlostné izochrónne koncové body, ktoré podporujú túto požiadavku, sa musia synchronizovať s nulovým mikrofónom, rovnako ako časové pojmy klasických snímok (1 milisekunda na rozdiel od intervalu 125 mikrosekúnd).

Ak wValue nie je nula, wLength nie je dve, alebo zariadenie je v predvolenom stave, správanie zariadenia je nedefinované.

Ak zadaný koncový bod túto požiadavku nepodporuje alebo ak je zariadenie v stave adresy, zariadenie reaguje na chybu požiadavky.

Táto žiadosť je platná, keď je zariadenie v konfigurovanom stave.