USB enumeration - это серия запросов от хоста и ответов от девайса, которыми они обмениваются при подключении девайса к хосту.
Перед началом этой процедуры хост устанавливает на шине состояние reset (D+ и D- в ноль не менее 10 мс).
Хост шлёт запросы в control endpoint 0, т.е. у девайса обязательно должна быть сконфигурирована endpoint 0 типа control.
Все запросы от хоста одинакового размера - по восемь байт, которые попадают в rx-буфер ep0 (при этом в регистре EP0R устанавливается бит SETUP).
Девайс должен декодировать запрос и передать ответ через tx-буфер ep0, хост подтвердит получение пакетом нулевой длины (в rx-буфер ep0).
В терминологии USB эта последовательность называется stages: запрос - SETUP-stage, передача данных - DATA-stage, подтверждение пакетом нулевой длины - STATUS-stage.
При некоторых запросах не требуется передавать никаких данных (DATA-stage отсутствует), в этом случае девайс отвечает пакетом нулевой длины.

Вот табличка стандартных запросов (отсюда - http://www.usbmadesimple.co.uk/ums_4.htm)
http://s1.uploads.ru/WMo9z.png
Я выделил жёлтеньким минимальный набор запросов, на которые должен уметь отвечать девайс.
Если девайс игнорирует запрос, то он может сообщить об этом хосту, выставив состояние STALL в EP0R.

Ниже под спойлером - лог enumeration (обработанный реальный лог, который sobs снял анализатором)
SETUP - запросы, IN - пакеты от девайса к хосту, OUT - пакеты от хоста к девайсу (в USB направление передачи считается по отношению к хосту).

Свернутый текст

RESET

RESET

SETUP: bmRequestType='128' (0x80) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='256' (0x0100) Descriptor=DEVICE; wIndex='0' (0x0000); wLength=@ (0x0040);

IN: bLength='18' (0x12); bDescriptorType='1' (0x01) DEVICE; bcdUSB='512' (0x0200) 2.00; bDeviceClass='0' (0x00) Deferred to Interface Descriptors; bDeviceSubClass='0' (0x00); bDeviceProtocol='0' (0x00); bMaxPacketSize0=@ (0x40); idVendor='1155' (0x0483) Vendor=STMicroelectronics; idProduct='22289' (0x5711); bcdDevice='1' (0x0001) 0.01; iManufacturer='1' (0x01); iProduct='2' (0x02); iSerialNumber='3' (0x03); bNumConfigurations='1' (0x01);

OUT:

RESET

SETUP: bmRequestType='0' (0x00) Data direction=No data; bRequest='5' (0x05) SET_ADDRESS; wValue='1' (0x0001) Address='1' (0x01); wIndex='0' (0x0000); wLength='0' (0x0000);

IN:

SETUP: bmRequestType='128' (0x80) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='256' (0x0100) Descriptor=DEVICE; wIndex='0' (0x0000); wLength='18' (0x0012);

IN: bLength='18' (0x12); bDescriptorType='1' (0x01) DEVICE; bcdUSB='512' (0x0200) 2.00; bDeviceClass='0' (0x00) Deferred to Interface Descriptors; bDeviceSubClass='0' (0x00); bDeviceProtocol='0' (0x00); bMaxPacketSize0=@ (0x40); idVendor='1155' (0x0483) Vendor=STMicroelectronics; idProduct='22289' (0x5711); bcdDevice='1' (0x0001) 0.01; iManufacturer='1' (0x01); iProduct='2' (0x02) HID TEST; iSerialNumber='3' (0x03) RH-0001; bNumConfigurations='1' (0x01);

OUT:

SETUP: bmRequestType='128' (0x80) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='512' (0x0200) Descriptor=CONFIGURATION; wIndex='0' (0x0000); wLength='255' (0x00FF);

IN: bLength=\t (0x09); bDescriptorType='2' (0x02) CONFIGURATION; wTotalLength=" (0x0022); bNumInterfaces='1' (0x01); bConfigurationValue='1' (0x01); iConfiguration='0' (0x00); bmAttributes='224' (0xE0) Self powered; bMaxPower=2 (0x32) 100mA; bLength=\t (0x09); bDescriptorType='4' (0x04) INTERFACE; bInterfaceNumber='0' (0x00); bAlternateSetting='0' (0x00); bNumEndpoints='1' (0x01); bInterfaceClass='3' (0x03) HID (Human Interface Device); bInterfaceSubClass='0' (0x00) None; bInterfaceProtocol='0' (0x00) None; iInterface='0' (0x00); bLength=\t (0x09); bDescriptorType=! (0x21) HID; bcdHID='257' (0x0101) 1.01; bCountryCode='0' (0x00) Country=Not Supported; bNumDescriptors='1' (0x01); bDescriptorType=" (0x22) HID Report Descriptor; wDescriptorLength='28' (0x001C); bLength='7' (0x07); bDescriptorType='5' (0x05) ENDPOINT; bEndpointAddress='129' (0x81) Endpoint=1; bmAttributes='3' (0x03) Interrupt; wMaxPacketSize=@ (0x0040); bInterval=' ' (0x20);

OUT:

SETUP: bmRequestType='128' (0x80) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='771' (0x0303) Descriptor=STRING; wIndex='1033' (0x0409) Language=English (United States); wLength='255' (0x00FF);

IN: bLength='16' (0x10); bDescriptorType='3' (0x03) STRING; wchar=R (0x0052) char='R'; wchar=H (0x0048) char='H'; wchar=- (0x002D) char='-'; wchar=0 (0x0030) char='0'; wchar=0 (0x0030) char='0'; wchar=0 (0x0030) char='0'; wchar=1 (0x0031) char='1';

OUT:

SETUP: bmRequestType='128' (0x80) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='768' (0x0300) Descriptor=STRING; wIndex='0' (0x0000); wLength='255' (0x00FF);

IN: bLength='4' (0x04); bDescriptorType='3' (0x03) STRING; wLANGID='1033' (0x0409) Language=English (United States);

OUT:

SETUP: bmRequestType='128' (0x80) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='770' (0x0302) Descriptor=STRING; wIndex='1033' (0x0409) Language=English (United States); wLength='255' (0x00FF);

IN: bLength='20' (0x14); bDescriptorType='3' (0x03) STRING; wchar=H (0x0048) char='H'; wchar=I (0x0049) char='I'; wchar=D (0x0044) char='D'; wchar=' ' (0x0020) char=' '; wchar=T (0x0054) char='T'; wchar=E (0x0045) char='E'; wchar=S (0x0053) char='S'; wchar=T (0x0054) char='T'; wchar='0' (0x0000) char=';

OUT:

SETUP: bmRequestType='128' (0x80) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='1536' (0x0600) Descriptor=DEVICE_QUALIFIER; wIndex='0' (0x0000); wLength=\n (0x000A);

IN: bLength=\n (0x0A); bDescriptorType='6' (0x06) DEVICE_QUALIFIER; bcdUSB='512' (0x0200) 2.00; bDeviceClass='0' (0x00) Deferred to Interface Descriptors; bDeviceSubClass='0' (0x00); bDeviceProtocol='0' (0x00); bMaxPacketSize0=@ (0x40); bNumConfigurations='1' (0x01); bReserved='0' (0x00);

OUT:

SETUP: bmRequestType='128' (0x80) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='256' (0x0100) Descriptor=DEVICE; wIndex='0' (0x0000); wLength='18' (0x0012);

IN: bLength='18' (0x12); bDescriptorType='1' (0x01) DEVICE; bcdUSB='512' (0x0200) 2.00; bDeviceClass='0' (0x00) Deferred to Interface Descriptors; bDeviceSubClass='0' (0x00); bDeviceProtocol='0' (0x00); bMaxPacketSize0=@ (0x40); idVendor='1155' (0x0483) Vendor=STMicroelectronics; idProduct='22289' (0x5711); bcdDevice='1' (0x0001) 0.01; iManufacturer='1' (0x01); iProduct='2' (0x02) HID TEST; iSerialNumber='3' (0x03) RH-0001; bNumConfigurations='1' (0x01);

OUT:

SETUP: bmRequestType='128' (0x80) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='512' (0x0200) Descriptor=CONFIGURATION; wIndex='0' (0x0000); wLength=\t (0x0009); Byte \t (0x09); Byte '2' (0x02); Byte " (0x22); Byte '0' (0x00); Byte '1' (0x01); Byte '1' (0x01); Byte '0' (0x00); Byte '224' (0xE0); Byte 2 (0x32);

OUT:

SETUP: bmRequestType='128' (0x80) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='512' (0x0200) Descriptor=CONFIGURATION; wIndex='0' (0x0000); wLength=" (0x0022);

IN:

OUT:

SETUP: bmRequestType='0' (0x00) Data direction=No data; bRequest=\t (0x09) SET_CONFIGURATION; wValue='1' (0x0001); wIndex='0' (0x0000); wLength='0' (0x0000);

IN:

SETUP: bmRequestType=! (0x21) Data direction=No data; bRequest=\n (0x0A) SET_IDLE (HID class); wValue='0' (0x0000) Duration=Indefinite; wIndex='0' (0x0000) Interface='0' (0x00); wLength='0' (0x0000);

IN:

SETUP: bmRequestType='129' (0x81) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='8704' (0x2200) Descriptor=HID Report Descriptor; wIndex='0' (0x0000) Interface='0' (0x00); wLength=\ (0x005C);

IN: 0x05 0x01       Usage Page (Generic Desktop Controls); 0x09 0x00       Usage (Undefined); 0xA1 0x01       Collection (Application); 0x85 0x01           Report ID ('1' (0x01)); 0x09 0x00           Usage (Undefined); 0x15 0x00           Logical Minimum ('0' (0x00)); 0x26 0xFF 0x00      Logical Maximum ('255' (0x00FF)); 0x75 0x08           Report Size ('8' (0x08)); 0x95 0x03           Report Count ('3' (0x03)); 0xB1 0x82           Feature (Data; 0x85 0x01           Report ID ('1' (0x01)); 0x09 0x00           Usage (Undefined); 0x81 0x82           Input (Data; 0xC0            End Collection;

OUT:

IN:
...
IN:

SETUP: bmRequestType='128' (0x80) Data direction=Device to host; bRequest='6' (0x06) GET_DESCRIPTOR; wValue='512' (0x0200) Descriptor=CONFIGURATION; wIndex='0' (0x0000); wLength=\t (0x0009);

IN: bLength=\t (0x09); bDescriptorType='2' (0x02) CONFIGURATION; wTotalLength=" (0x0022); bNumInterfaces='1' (0x01); bConfigurationValue='1' (0x01); iConfiguration='0' (0x00); bmAttributes='224' (0xE0) Self powered; bMaxPower=2 (0x32) 100mA;

OUT: