Enumeracja urządzenia USB

Proces enumeracji urządzenia USB jest zawsze przeprowadzany podczas podłączenia tego urządzenia do portu USB w komputerze. Podczas enumeracji host USB wysyła do urządzenia różne zapytania, zapytania zdefiniowane są poprzez standard USB. Każde urządzenie USB musi zdolne do właściwej reakcji na zapytanie otrzymane od hosta USB. Podczas procesu enumeracji host USB wysyła do urządzenia USB standardowe żądania (Standard Device Requests), żądania te zdefiniowane są w standardzie USB. Każde żądanie wysyłane jest za pomocą transferów kontrolnych i składa się z ośmiu bajtów, każdy bajt oraz bit znajdujący się żądaniu zdefiniowany jest w standardzie USB.

Przebieg transakcji podczas enumeracji urządzenia USB

• transfer 1 → SETUP TOKEN, GET_DESCRIPTOR, DEVICE
0x80, 0x06, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00,
• transfer 4 → SETUP TOKEN, SET_ADDRESS
0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
• transfer 6 → SETUP TOKEN, GET_DESCRIPTOR, CONFIGURATION
0x80, 0x06, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00,
• transfer 9 → SETUP TOKEN, GET_DESCRIPTOR, CONFIGURATION
0x80, 0x06, 0x00, 0x02, 0x00, 0x00, 0xFF, 0x00,
• transfer 13 → SETUP TOKEN, GET_DESCRIPTOR, STRING, INDEX 3
0x80, 0x06, 0x03, 0x03, 0x09, 0x04, 0xFF, 0x00,
• transfer 16 → SETUP TOKEN, GET_DESCRIPTOR, STRING, INDEX 0
0x80, 0x06, 0x00, 0x03, 0x00, 0x00, 0xFF, 0x00,
• transfer 19 → SETUP TOKEN, GET_DESCRIPTOR, STRING, INDEX 2
0x80, 0x06, 0x02, 0x03, 0x09, 0x04, 0xFF, 0x00,
• transfer 22 → SETUP TOKEN, GET_DESCRIPTOR, CONFIGURATION
0x80, 0x06, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00,
• transfer 25 → SETUP TOKEN, GET_DESCRIPTOR, DEVICE
0x80, 0x06, 0x00, 0x02, 0x00, 0x00, 0x09, 0x00,
• transfer 28 → SETUP TOKEN, GET_DESCRIPTOR, CONFIGURATION
0x80, 0x06, 0x00, 0x02, 0x00, 0x00, 0x58, 0x00,
• transfer 32 → SETUP TOKEN, SET_CONFIGURATION, CONFIGURATION 1
0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
• transfer 34 → SETUP TOKEN, GET_INTERFACE
0x21, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
• transfer 36 → SETUP TOKEN, GET_DESCRIPTOR, HID_DESCRIPTOR
0x81, 0x06, 0x00, 0x22, 0x00, 0x00, 0x6F, 0x00,
• transfer 39 → SETUP TOKEN, GET_DESCRIPTOR, STRING, INDEX 2
0x80, 0x06, 0x02, 0x03, 0x09, 0x04, 0xFE, 0x01,
• transfer 42 → SETUP TOKEN, GET_DESCRIPTOR, STRING, INDEX 3
0x80, 0x06, 0x03, 0x03, 0x09, 0x04, 0xFE, 0x01,
• transfer 45 → SETUP TOKEN, GET_DESCRIPTOR, STRING, INDEX 0
0x80, 0x06, 0x00, 0x03, 0x09, 0x04, 0xFE, 0x01,
• transfer 48 → SETUP TOKEN, GET_DESCRIPTOR, STRING, INDEX 1
0x80, 0x06, 0x01, 0x03, 0x09, 0x04, 0xFF, 0x00,
• transfer 51 → SETUP TOKEN, GET_DESCRIPTOR, STRING, INDEX 2
0x80, 0x06, 0x02, 0x03, 0x09, 0x04, 0xFF, 0x00,
• transfer 54 → SETUP TOKEN, GET_DESCRIPTOR, STRING, INDEX 3
0x80, 0x06, 0x03, 0x03, 0x09, 0x04, 0xFF, 0x00,