USB USB Device Device Commando: Get descriptor (¿Quien sos?) SyncSync SOFSOF 0xA5 Frame#Frame#0x0DD0x0DDCRC5CRC50x150x15EOPEOP SyncSync SETUPSETUP 0xB4 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x080x08 EOPEOP SyncSync DATA0DATA0 0xC3 DATADATA CRC16CRC16 0xBB290xBB29 EOPEOP SyncSync ACKACK 0x4B EOPEOP Setup stage
Sync SOF 0xA5 Frame# 0x0DD CRC5 0x15 EOP 001 Sync SETUP 0xB4 ADDR 0x00 ENDP 0x0 CRC5 0x08 EOP 001 Sync DATA0 0xC3 DATA CRC16 0xBB29 EOP 001 Sync ACK 0x4B EOP 001 Start Of Frame...se genera cada 1 mseg SyncSync Packet start indica “llegando paquete” al transceiver SOFSOF 0xA5 Start of Frame (uno por milisegundo) Frame#Frame#0x0DD0x0DD Nro. de Frame ( ) cíclico CRC5CRC50x150x15 5 bit Checksum sobre Frame# EOPEOP End of Packet (D+ and D- bajas) Setup stage USB USB Device Device
Sync SETUP 0xB4 ADDR 0x00 ENDP 0x0 CRC5 0x08 EOP 001 Sync DATA0 0xC3 DATA CRC16 0xBB29 EOP 001 Sync ACK 0x4B EOP 001 Se decodifican los Paquetes Setup completos y se generan las interrupciones SyncSync SETUPSETUP 0xB4 Setup Packet (comienza transf. de control) ADDRADDR0x000x00 Address 0 (def. addr. Para cada nuevo disp. attachado) Sync SOF 0xA5 Frame# 0x0DD CRC5 0x15 EOP 001 ENDPENDP0x00x0 Endpoint 0 (usado para configuración) CRC5CRC50x080x08EOPEOP Setup stage USB USB Device Device
Sync DATA0 0xC3 DATA CRC16 0xBB29 EOP 001 Sync ACK 0x4B EOP 001 El Paquete Data define que clase de transferencia setup se inicia. Sync SETUP 0xB4 ADDR 0x00 ENDP 0x0 CRC5 0x08 EOP 001 SyncSync DATA0DATA0 0xC3 DATADATA DATADATA = device descriptor 01 = device descriptor 80 = dirección de transfer, comando std. 80 = dirección de transfer, comando std. 06 = get descriptor 06 = get descriptor 00 = índice del descriptor = cantidad de bytes requeridos por el host (formato little endian; Lowbyte, Highbyte) = cantidad de bytes requeridos por el host (formato little endian; Lowbyte, Highbyte) Get device descriptor genera una interrupción Get device descriptor genera una interrupción = language ID CRC16CRC160xBB290xBB29EOPEOP Setup stage USB USB Device Device
USB USB Device Device Cada transferencia de control debe ser reconocida (ACKnowledged) SyncSync ACKACK 0x4B Acknowledge Packet EOPEOP SyncSync SOFSOF0xA50xA5Frame#Frame#0x0DD0x0DDCRC5CRC50x150x15EOPEOP SyncSync SETUPSETUP 0xB4 ADDRADDR0x000x00ENDPENDP0x00x0CRC5CRC50x080x08EOPEOP SyncSync DATA0DATA0 0xC3 DATADATA CRC16CRC160xBB290xBB29EOPEOP Setup stage
USB USB Device Device Cada transferencia de control debe ser reconocida (ACKnowledged) (add-on) SyncSync ACKACK 0x4B Acknowledge Packet SyncSync SOFSOF 0xA5 Frame#Frame#0x0DD0x0DDCRC5CRC50x150x15EOPEOP SyncSync SETUPSETUP 0xB4 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x080x08 EOPEOP SyncSync DATA0DATA0 0xC30xC3 DATADATA CRC16CRC16 0xBB290xBB29 EOPEOP EOPEOP Setup stage
SyncSync ACKACK 0x4B EOPEOP Cada transferencia de Datos será iniciada por el host (PC) con un Paquete IN/OUT SyncSync ININ 0x960x96 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x80x8 EOPEOP SyncSync SOFSOF 0xA5 Frame#Frame#0x0DE0x0DECRC5CRC50x170x17EOPEOP Data stage USB USB Device Device SyncSync DATA1DATA1 0xD2 DATADATA CRC16CRC16 0xC8E70xC8E7 EOPEOP Data In Packet (Host requiere datos del dispositivo)
Sync DATA1 0xD2 DATA CRC16 0xC8E7 EOP 001 Sync ACK 0x4B EOP 001 USB USB Device Device Paquetes de Datos Sync IN 0x96 ADDR 0x00 ENDP 0x0 CRC5 0x8 EOP 001 DATADATA 12 = longitud del device descriptor 12 = longitud del device descriptor 01 = Tipo de device descriptor 01 = Tipo de device descriptorSyncSync DATA1DATA1 0xD2 DATADATA CRC16CRC160xC8E70xC8E7EOPEOP = Device Protocol 00 = Device Protocol 00 = Device Class 00 = Device Sub Class 00 = Device Sub Class 08 = Tamaño Max. de paquete del endpoint 0 08 = Tamaño Max. de paquete del endpoint 0 1eros. 8 bytes del device descriptor 01 = byte alto de especificación USB 01 = byte alto de especificación USB 00 = byte bajo de especificación USB V } Data stage
USB USB Device Device Fin de la Etapa de Datos SyncSync SOFSOF 0xA5 Frame#Frame#0x0E00x0E0CRC5CRC50x0E0x0EEOPEOP SyncSync OUTOUT 0x87 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x080x08 EOPEOP SyncSync DATA1DATA1 0xD2 DATADATACRC16CRC16 0x00000x0000 EOPEOP SyncSync ACKACK 0x4B EOPEOP Paquete de datos vacío indica fin de la etapa de datos Paquete Data Out (El Host aborta la etapa de datos) Data stage Status stage
Reset desde el Host (10ms) Reset iniciado por el host RESETRESET USB USB Device Device
SyncSync ACKACK 0x4B EOPEOP Commando: Set Address (Desde ahora te llamás Nº2) SyncSync SETUPSETUP 0xB4 ADDRADDR0x000x00ENDPENDP0x00x0CRC5CRC50x080x08EOPEOP SyncSync DATA0DATA0 0xC3 DATADATA CRC16CRC16 0xD7680xD768 EOPEOP DATADATA 02 = device address nr = dirección host- dispositivo, std. command, receptor el dispositivo 05 = set address 05 = set address = default SyncSync SOFSOF 0xA5 Frame#Frame#0x1430x143CRC5CRC50x040x04EOPEOP USB USB Device Device
USB USB Device Device Fin de la etapa de Datos SyncSync SOFSOF0xA50xA5Frame#Frame#0x1440x144CRC5CRC50x080x08EOPEOP SyncSync ININ 0x960x96 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x080x08 EOPEOP SyncSync ACKACK 0x4B EOPEOP SyncSync DATA1DATA1 0xD2 DATADATACRC16CRC16 0x00000x0000 EOPEOP Paquete de datos vacío desde el dispositivo. Data stage Status stage
Get Descriptor del Dispositivo Nº 2 (¿Que sos?) SyncSync SOFSOF 0xA5 Frame#Frame#0x1510x151CRC5CRC50x1E0x1EEOPEOP SyncSync SETUPSETUP 0xB4 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP Setup stage USB USB Device Device SyncSync DATA0DATA0 0xC3 DATADATA CRC16CRC16 0x072F0x072F EOPEOP SyncSync ACKACK 0x4B0x4B EOPEOP El dispositivo es accedido como Nº2 El dispositivo es accedido como Nº2
Sync DATA0 0xC3 DATA CRC16 0x072F EOP 001 Sync ACK 0x4B EOP 001 Sync SETUP 0xB4 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 Sync SOF 0xA5 Frame# 0x151 CRC5 0x1E EOP 001 Get Descriptor del Dispositivo Nº 2 (¿Que sos?), detalles DATADATA 01 = device descriptor 01 = device descriptor 80 = dirección de transferencia, std. command 80 = dirección de transferencia, std. command 06 = get descriptor 06 = get descriptor 00 = índice del descriptor = bytes a = bytes a transferir = language ID SyncSync DATA0DATA00xC30xC3DATADATA CRC16CRC160x072F0x072FEOPEOP Setup stage USB USB Device Device
IN request (obtiene datos del dispositivo) SyncSync ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP SyncSync SOFSOF 0xA5 Frame#Frame#0x1520x152CRC5CRC50x1C0x1CEOPEOP Data stage USB USB Device Device SyncSync ACKACK 0x4B EOPEOP SyncSync DATA1DATA1 0xD2 DATADATA CRC16CRC16 0xC8E70xC8E7 EOPEOP
Sync ACK 0x4B EOP 001 Sync IN 0x96 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 Sync DATA1 0xD2 DATA CRC16 0xC8E7 EOP 001 USB USB Device Device IN request, detalles (get data about device description) DATADATA 12 = longitud del device descriptor 12 = longitud del device descriptor 01 = Tipo device descriptor 01 = Tipo device descriptor 01 = byte alto dela especificación USB 01 = byte alto dela especificación USB 00 = byte bajo de la especificación USB 00 = Device Protocol 00 = Device Protocol 00 = Device Class 00 = Device Sub Class 00 = Device Sub Class 08 = Tamaño Max. De paquete del endpoint 0 08 = Tamaño Max. De paquete del endpoint 0 1eros. 8 bytes del device descriptor SyncSync DATA1DATA10xD20xD2DATADATA CRC16CRC160xC8E70xC8E7EOPEOP Data stage
2 º IN request (obtiene datos del dispositivo) SyncSync ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP SyncSync SOFSOF0xA50xA5Frame#Frame#0x1530x153CRC5CRC50x030x03EOPEOP Data stage USB USB Device Device SyncSync ACKACK 0x4B EOPEOP SyncSync DATA0DATA0 0xC30xC3 DATADATA 8B C CRC16CRC16 0x86DB0x86DB EOPEOP
Sync DATA0 0xC3 DATA CRC16 0x86DB EOP 001 USB USB Device Device 2º IN request, detalles Se transfieren los datos específicos a la PC Sync ACK 0x4B EOP 001 Sync IN 0x96 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 DATADATA C5 = byte alto del product ID 41 = byte bajo del product ID 00 = índice para string descriptor del fabricante 00 = índice para string descriptor del fabricante 01 = byte bajo del devicenumber 00 = byte alto del devicenumber 00 = índice al string descriptor del producto siguientes 8 bytes del device descriptor SyncSync DATA0DATA0 0xC3 DATADATA 8B C CRC16CRC160x86DB0x86DBEOPEOP B = byte bajo del vendor ID 05 = byte alto del vendor ID
Sync SOF 0xA5 Frame# 0x154 CRC5 0x1D EOP 001 Sync IN 0x96 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 Sync DATA1 0xD2 DATA CRC16 0xFCF1 EOP 001 Sync ACK 0x4B EOP 001 USB USB Device Device 3º IN request Se transfiere el resto SyncSync SOFSOF 0xA5 Frame#Frame#0x1540x154CRC5CRC50x1D0x1DEOPEOP SyncSync ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP SyncSync DATA1DATA1 0xD20xD2 DATADATA CRC16CRC16 0xFCF10xFCF1 EOPEOP DATADATA 00 = índice al string descriptor del número de serie 01 = número de configuraciones Data stage
USB USB Device Device Commando: OUT transfer (paquete de datos vacío) finaliza la etapa de datos SyncSync SOFSOF 0xA5 Frame#Frame#0x1550x155CRC5CRC50x020x02EOPEOP SyncSync OUTOUT 0x87 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP SyncSync DATA1DATA1 0xD2 DATADATACRC16CRC16 0x00000x0000 EOPEOP SyncSync ACKACK 0x4B EOPEOP Data stage Status stage
Command: Get Configuration Descriptor (¿Como funciona el dispositivo?) SyncSync SOFSOF 0xA5 Frame#Frame#0x1570x157CRC5CRC50x1F0x1FEOPEOP SyncSync SETUPSETUP 0xB4 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP Setup stage USB USB Device Device SyncSync DATA0DATA0 0xC3 DATADATA FF 00 CRC16CRC16 0x97250x9725 EOPEOP SyncSync ACKACK 0x4B0x4B EOPEOP
Sync DATA0 0xC3 DATA CRC16 0x9725 EOP 001 Sync ACK 0x4B EOP 001 Sync SETUP 0xB4 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 Sync SOF 0xA5 Frame# 0x157 CRC5 0x1F EOP 001 Commando: Get Configuration Descriptor (¿Como funciona el dispositivo?), detalles DATADATA 02 = configuration descriptor 02 = configuration descriptor 80 = dirección de transferencia, std. command 80 = dirección de transferencia, std. command 06 = get descriptor 06 = get descriptor 00 = índice del descriptor SyncSync DATA0DATA00xC30xC3DATADATA FF 00 CRC16CRC160x97250x9725EOPEOP = language ID = language ID 00 = byte alto de los bytes a transferir FF = byte bajo de los bytes a transferir USB USB Device Device
In Request: Respuesta a ¿Como funciona el dispositivo? SyncSync ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP SyncSync SOFSOF 0xA5 Frame#Frame#0x1580x158CRC5CRC50x0F0x0FEOPEOP Data stage USB USB Device Device SyncSync ACKACK 0x4B0x4B EOPEOP SyncSync DATA1DATA1 0xD20xD2 DATADATA CRC16CRC16 0x50200x5020 EOPEOP
Sync DATA1 0xD2 DATA CRC16 0x5020 EOP 001 Sync ACK 0x4B EOP 001 USB USB Device Device In Request: Respuesta a ¿Como funciona el dispositivo?, detalles Sync IN 0x96 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 DATADATA = longitud de los configuration, interface y endpoint descriptors 09 = longitud del configuration descriptor 02 = Tipo del configuration descriptor 00 = índice al configuration string descriptor 00 = índice al configuration string descriptor 01 = nro. de interfaces usadas en esta configuración 01 = valor para esta configuración con SetConfiguration 60 = atributos de la configuration 1eros. 8 bytes del device descriptor SyncSync DATA1DATA1 0xD2 DATADATA CRC16CRC160x50200x5020EOPEOP001001
2º In Request: Respuesta a ¿Como funciona el dispositivo? SyncSync ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP SyncSync SOFSOF0xA50xA5Frame#Frame#0x1590x159CRC5CRC50x100x10EOPEOP Data stage USB USB Device Device SyncSync ACKACK 0x4B0x4B EOPEOP SyncSync DATA0DATA0 0xC3 DATADATA CRC16CRC16 0x273E0x273E EOPEOP
Sync DATA0 0xC3 DATA CRC16 0x273E EOP 001 USB USB Device Device 2º In Request: Respuesta a ¿Como funciona el dispositivo?, detalles Sync ACK 0x4B EOP 001 Sync IN 0x96 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 DATADATA 04 = Tipo de interface descriptor 32 = Consumo max.de energía (en unidades de 2mA) 09 = longitud del interface descriptor 01 = endpoints utilizados enesta interfaz 00 = número de interfaces 00 = seteos alternativos 00 = interface class Siguientes 8 bytes del device descriptor 00 = interface sub class SyncSync DATA0DATA00xC30xC3DATADATA CRC16CRC160x273E0x273EEOPEOP001001
USB USB Device Device 3º In Request: Respuesta a ¿Como funciona el dispositivo?, detalles SyncSync SOFSOF 0xA5 Frame#Frame#0x15B0x15BCRC5CRC50x0D0x0DEOPEOP SyncSync ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP SyncSync ACKACK 0x4B0x4B EOPEOP SyncSync DATA0DATA0 0xC3 DATADATA 0000 CRC16CRC16 0x00000x0000 EOPEOP = intervalo de polling para interrupt endpoints
USB USB Device Device Commando: transferencia OUT finaliza la etapa de datos SyncSync SOFSOF0xA50xA5Frame#Frame#0x15C0x15CCRC5CRC50x150x15EOPEOP SyncSync OUTOUT 0x87 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP SyncSync DATA1DATA1 0xD2 DATADATACRC16CRC16 0x00000x0000 EOPEOP SyncSync ACKACK 0x4B EOPEOP Data stage Status stage