USB USB Device Device Commando: Get descriptor (¿Quien sos?) SyncSync0000000100000001SOFSOF 0xA5 Frame#Frame#0x0DD0x0DDCRC5CRC50x150x15EOPEOP001001 SyncSync.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
USBUSB
DeviceDevice
CommandoCommando: Get descriptor: Get descriptor(¿Quien sos?)(¿Quien sos?)
Setup Packet (comienza transf. de control) Setup Packet (comienza transf. de control) Setup Packet (comienza transf. de control) Setup Packet (comienza transf. de control)
ADDRADDRADDRADDR
0x000x000x000x00
Address 0 (def. addr. Para cada nuevo disp. attachado)Address 0 (def. addr. Para cada nuevo disp. attachado)Address 0 (def. addr. Para cada nuevo disp. attachado)Address 0 (def. addr. Para cada nuevo disp. attachado)
SyncSync
0000000100000001
SOFSOF
0xA50xA5
Frame#Frame#
0x0DD0x0DD
CRC5CRC5
0x150x15
EOPEOP
001001
ENDPENDPENDPENDP
0x00x00x00x0
Endpoint 0 (usado para configuración)Endpoint 0 (usado para configuración)Endpoint 0 (usado para configuración)Endpoint 0 (usado para configuración)
CRC5CRC5CRC5CRC5
0x080x080x080x08EOPEOPEOPEOP
001001001001
Setup stage
USBUSB
DeviceDevice
SyncSync
0000000100000001
DATA0DATA0
0xC30xC3
DATADATA
80 06 00 01 00 00 40 0080 06 00 01 00 00 40 00
CRC16CRC16
0xBB290xBB29
EOPEOP
001001
SyncSync
0000000100000001
ACKACK
0x4B0x4B
EOPEOP
001001
El El Paquete Data Paquete Data define que clase de define que clase de transferencia setup se inicia.transferencia setup se inicia.
80 = dirección de transfer, comando std. 80 = dirección de transfer, comando std. 80 = dirección de transfer, comando std. 80 = dirección de transfer, comando std.
06 = get descriptor06 = get descriptor 06 = get descriptor06 = get descriptor
00 = índice del descriptor00 = índice del descriptor00 = índice del descriptor00 = índice del descriptor
40 00 = cantidad de bytes requeridos 40 00 = cantidad de bytes requeridos por el host (formato little endian; por el host (formato little endian; Lowbyte, Highbyte) Lowbyte, Highbyte)
40 00 = cantidad de bytes requeridos 40 00 = cantidad de bytes requeridos por el host (formato little endian; por el host (formato little endian; Lowbyte, Highbyte) Lowbyte, Highbyte)
Get device descriptor Get device descriptor
genera una interrupcióngenera una interrupción
Get device descriptor Get device descriptor
genera una interrupcióngenera una interrupción
Get device descriptor Get device descriptor
genera una interrupcióngenera una interrupción
Get device descriptor Get device descriptor
genera una interrupcióngenera una interrupción
00 00 = language ID00 00 = language ID00 00 = language ID00 00 = language ID
CRC16CRC16CRC16CRC16
0xBB290xBB290xBB290xBB29EOPEOPEOPEOP
001001001001
Setup stage
USBUSB
DeviceDevice
USBUSB
DeviceDevice
Cada transferencia de control debe ser Cada transferencia de control debe ser reconocida (reconocida (ACKACKnowledged)nowledged)
Cada transferencia de Datos será iniciada Cada transferencia de Datos será iniciada por el host (PC) con un por el host (PC) con un Paquete IN/OUTPaquete IN/OUT
Data In Packet (Host requiere datos del dispositivo) Data In Packet (Host requiere datos del dispositivo) Data In Packet (Host requiere datos del dispositivo) Data In Packet (Host requiere datos del dispositivo)
SyncSync
0000000100000001
DATA1DATA1
0xD20xD2
DATADATA
12 01 00 01 00 00 00 0812 01 00 01 00 00 00 08
CRC16CRC16
0xC8E70xC8E7
EOPEOP
001001
SyncSync
0000000100000001
ACKACK
0x4B0x4B
EOPEOP
001001
USBUSB
DeviceDevice
Paquetes de DatosPaquetes de Datos
SyncSync
0000000100000001
ININ
0x960x96
ADDRADDR
0x000x00
ENDPENDP
0x00x0
CRC5CRC5
0x80x8
EOPEOP
001001
DATADATADATADATA
12 = longitud del device descriptor12 = longitud del device descriptor 12 = longitud del device descriptor12 = longitud del device descriptor
01 = Tipo de device descriptor01 = Tipo de device descriptor 01 = Tipo de device descriptor01 = Tipo de device descriptor
Paquete de datos Paquete de datos vacío indica fin de la vacío indica fin de la
etapa de datosetapa de datos
Paquete de datos Paquete de datos vacío indica fin de la vacío indica fin de la
etapa de datosetapa de datos
Paquete Data Out (El Host aborta la etapa de datos) Paquete Data Out (El Host aborta la etapa de datos) Paquete Data Out (El Host aborta la etapa de datos) Paquete Data Out (El Host aborta la etapa de datos)
Data stage Status stage
Reset desde el Host (10ms)Reset desde el Host (10ms)
Reset iniciado por el hostReset iniciado por el hostReset iniciado por el hostReset iniciado por el host
RESETRESETRESETRESET
128160128160128160128160
USBUSB
DeviceDevice
SyncSyncSyncSync
00000001000000010000000100000001ACKACKACKACK
0x0x4B4B0x0x4B4BEOPEOPEOPEOP
001001001001
CommandoCommando: Set Address: Set Address (Desde a (Desde ahora te llamás hora te llamás Nº2Nº2))
IN requestIN request, detalles, detalles((get data about device descriptionget data about device description))
DATADATADATADATA
12 = longitud del device descriptor12 = longitud del device descriptor 12 = longitud del device descriptor12 = longitud del device descriptor
01 = Tipo device descriptor01 = Tipo device descriptor 01 = Tipo device descriptor01 = Tipo device descriptor
01 = byte alto dela especificación USB01 = byte alto dela especificación USB 01 = byte alto dela especificación USB01 = byte alto dela especificación USB
00 = byte bajo de la especificación USB00 = byte bajo de la especificación USB00 = byte bajo de la especificación USB00 = byte bajo de la especificación USB
2º IN request2º IN request, detalles, detallesSe transfieren los datos específicos a la PCSe transfieren los datos específicos a la PC
SyncSync
0000000100000001
ACKACK
0x4B0x4B
EOPEOP
001001
SyncSync
0000000100000001
ININ
0x960x96
ADDRADDR
0x020x02
ENDPENDP
0x00x0
CRC5CRC5
0x150x15
EOPEOP
001001
DATADATADATADATA
C5 = byte alto del product IDC5 = byte alto del product IDC5 = byte alto del product IDC5 = byte alto del product ID
41 = byte bajo del product ID41 = byte bajo del product ID41 = byte bajo del product ID41 = byte bajo del product ID
00 = índice para string descriptor del fabricante00 = índice para string descriptor del fabricante 00 = índice para string descriptor del fabricante00 = índice para string descriptor del fabricante
01 = byte bajo del devicenumber01 = byte bajo del devicenumber01 = byte bajo del devicenumber01 = byte bajo del devicenumber
00 = byte alto del devicenumber00 = byte alto del devicenumber00 = byte alto del devicenumber00 = byte alto del devicenumber
00 = índice al string descriptor del producto00 = índice al string descriptor del producto00 = índice al string descriptor del producto00 = índice al string descriptor del producto
siguientes 8 bytes del siguientes 8 bytes del device descriptordevice descriptor
siguientes 8 bytes del siguientes 8 bytes del device descriptordevice descriptor
CommandoCommando: Get Configuration Descriptor: Get Configuration Descriptor((¿Como funciona el dispositivo?)¿Como funciona el dispositivo?), detalles, detalles
00 00 = language ID00 00 = language ID 00 00 = language ID00 00 = language ID
00 = byte alto de los bytes a transferir00 = byte alto de los bytes a transferir00 = byte alto de los bytes a transferir00 = byte alto de los bytes a transferir
FF = byte bajo de los bytes a transferirFF = byte bajo de los bytes a transferirFF = byte bajo de los bytes a transferirFF = byte bajo de los bytes a transferir
USBUSB
DeviceDevice
In RequestIn Request: Respuesta a : Respuesta a ¿Como funciona el dispositivo?¿Como funciona el dispositivo?
In RequestIn Request: Respuesta a : Respuesta a ¿Como funciona el dispositivo?¿Como funciona el dispositivo?, detalles, detalles
SyncSync
0000000100000001
ININ
0x960x96
ADDRADDR
0x020x02
ENDPENDP
0x00x0
CRC5CRC5
0x150x15
EOPEOP
001001
DATADATADATADATA
19 00 = longitud de los configuration, interface y 19 00 = longitud de los configuration, interface y endpoint descriptorsendpoint descriptors
19 00 = longitud de los configuration, interface y 19 00 = longitud de los configuration, interface y endpoint descriptorsendpoint descriptors
09 = longitud del configuration descriptor09 = longitud del configuration descriptor09 = longitud del configuration descriptor09 = longitud del configuration descriptor
02 = Tipo del configuration descriptor02 = Tipo del configuration descriptor02 = Tipo del configuration descriptor02 = Tipo del configuration descriptor
00 = índice al configuration string descriptor00 = índice al configuration string descriptor 00 = índice al configuration string descriptor00 = índice al configuration string descriptor
01 = nro. de interfaces usadas en esta configuración01 = nro. de interfaces usadas en esta configuración01 = nro. de interfaces usadas en esta configuración01 = nro. de interfaces usadas en esta configuración
01 = valor para esta configuración con 01 = valor para esta configuración con SetConfigurationSetConfiguration
01 = valor para esta configuración con 01 = valor para esta configuración con SetConfigurationSetConfiguration
60 = atributos de la configuration60 = atributos de la configuration60 = atributos de la configuration60 = atributos de la configuration
1eros. 8 bytes del 1eros. 8 bytes del device descriptordevice descriptor
1eros. 8 bytes del 1eros. 8 bytes del device descriptordevice descriptor
2º2º InIn Request: Respuesta a Request: Respuesta a ¿Como funciona el dispositivo¿Como funciona el dispositivo??, detalles , detalles
SyncSync
0000000100000001
ACKACK
0x4B0x4B
EOPEOP
001001
SyncSync
0000000100000001
ININ
0x960x96
ADDRADDR
0x020x02
ENDPENDP
0x00x0
CRC5CRC5
0x150x15
EOPEOP
001001
DATADATADATADATA
04 = Tipo de interface descriptor04 = Tipo de interface descriptor04 = Tipo de interface descriptor04 = Tipo de interface descriptor
32 = Consumo max.de energía (en unidades de 2mA)32 = Consumo max.de energía (en unidades de 2mA)32 = Consumo max.de energía (en unidades de 2mA)32 = Consumo max.de energía (en unidades de 2mA)
09 = longitud del interface descriptor09 = longitud del interface descriptor09 = longitud del interface descriptor09 = longitud del interface descriptor