universal serial bus - electron.frba.utn.edu.arafurfaro/descargas/universal serial … · velocidad...
TRANSCRIPT
Autor: Alejandro Furfaro 2
Genealogía y alcanceGenealogía2 Enero de 1996, versión 1.0.
Velocidad 1,5 Mbps. Intel, Compaq, NEC, y Microsoft
2 Septiembre de 1998, versión 1.1.Velocidades de 1,5 Mbps (Low Speed) ó 12Mbps (Full Speed)Mejora en la asignación de ancho de banda a los dispositivos, a través de la incorporación de nuevos tipos de transferencias.
2 Septiembre del 2000 versión 2.0Velocidades de 1,5 Mbps (Low Speed), 12Mbps (Full Speed), o 480 Mbps (High Speed)
2 Anunciada para el primer semestre de 2008. Versión 3.0Velocidades de 1,5 Mbps (Low Speed), 12 Mbps (Full Speed), 480 Mbps (High Speed), y 4.8 Gbps (SuperSpeed)
Alcance:2 Nuestro estudio se centrará en la versión 1.1, tratando de
introducir conceptos de 2.0.
Autor: Alejandro Furfaro 3
Principales metas propuestasExpansión de periféricos sencilla2Detección automática de un nuevo dispositivo 2 Conexión y desconexión sin reiniciar el equipo2 Soporte plug & play.
Velocidades de transferencia de hasta 480 Mbits/seg. a bajo costo.Soporte a aplicaciones multimedia real time.Integración con dispositivos electrónicos (VCR, por ejemplo), aumentando de esta manera las capacidades de la PC.Interfaz de software standard independiente del dispositivo que se desee conectar.
Autor: Alejandro Furfaro 4
HOSTHub root
Hub1 Func
Hub2 FuncFunc
Hub3 Hub4 FuncFunc
Func
Func
Func Hub5
USB 1.1
USB 2.0
HOST Tier 1
Tier 2
Tier 3
Tier 4
Tier 5
Tier 6
Tier 7Hub6 Hub7
El Universal Serial Bus está organizado como una estructura jerárquica, controlada por un dispositivo denominado host controller que reside en la PC.
El Universal Serial Bus está organizado como una estructura jerárquica, controlada por un dispositivo denominado host controller que reside en la PC.
Se dispone además de un dispositivo denominado Hub, en el centro de cada estrella, lográndose de esta forma un anidamiento multinivel que permite la expansión del bus, conectándole diversos dispositivos.
Se dispone además de un dispositivo denominado Hub, en el centro de cada estrella, lográndose de esta forma un anidamiento multinivel que permite la expansión del bus, conectándole diversos dispositivos.
Arquitectura I
Autor: Alejandro Furfaro 5
El Hub root es el elemento del sistema que compone el vértice de la pirámide jerárquica. Por lo tanto solo hay un Hub Root en el sistema. También se lo conoce como Host Controller, y se compone de hardware firmwarey software, todo instalado en la PC.
El Hub root es el elemento del sistema que compone el vértice de la pirámide jerárquica. Por lo tanto solo hay un Hub Root en el sistema. También se lo conoce como Host Controller, y se compone de hardware firmwarey software, todo instalado en la PC.
Existen dos standards para implementar Host Controllers: Open Host Controller Interface (OHCI) desarrollado por Compaq, y Universal Host Controller Interface (UHCI) de Intel.
Existen dos standards para implementar Host Controllers: Open Host Controller Interface (OHCI) desarrollado por Compaq, y Universal Host Controller Interface (UHCI) de Intel.
Arquitectura IIHOST
Hub root
Hub1 Func
Hub2 Func
Func
Hub3 Hub4Func
Func
Func
Func
Func Hub5
HOST Tier 1
Tier 2
Tier 3
Tier 4
Tier 5
Tier 6
Tier 7Hub6 Hub7
Autor: Alejandro Furfaro 6
El Hub es un dispositivo USB especial, que extiende la cantidad de ports para conectar dispositivos, convirtiendo un punto de conexión simple, en múltiples puntos de conexión. Por punto de conexión entendemos port.
FuncionesSon dispositivos conectados al bus capaces de recibir y transmitir información desde / hacia el Host Controller. Se denomina función debido a que no necesariamente la correspondencia función dispositivo es uno a uno. Ejemplos de funciones en un Bus USB: Teclado, Mouse, lapizóptico, una impresora, un modem (analógico, o ISDN) etc.
Dispositivos USB I
Autor: Alejandro Furfaro 7
Es posible tener varias funcionesimplementadas dentro de un dispositivo conectado por un único cable a un portUSB. Estos son conocidos como dispositivos compuestos, y se presentan al Host Controller como un Hubcon mas de un dispositivo no removible.
Dispositivos USB II
Autor: Alejandro Furfaro 8
Consideraciones adicionalesAlimentación:
2 Desde este punto de vista, los dispositivos USB trabajan en dos modos: self powered o Bus powered.
Velocidad:
2 La especificación 1.1 soporta dos tipos de dispositivos: Dispositivos USB low speed, (1.5 Mbits/seg.) ,y dispositivos USB full speed, (12Mbits/seg).
2 La especificación 2.0 introduce los dispositivos High Speed con velocidades de 480 Mbps
2 En breve 3.0 introducirá los dispositivos Super Speed con velocidades de 4,8 Gbps.
Además, garantiza la coexistencia de todos los tipos de dispositivos en el bus de manera de mantener el sincronismo.
Autor: Alejandro Furfaro 9
Flujo de datos: Modelo de Implementación
FunctionFunction LayerLayer: provee la interfaz entre el usuario y el dispositivo.USB USB DeviceDevice LayerLayer: visión que tiene el software del sistema para realizar las operaciones previstas con el dispositivo USB.USB BUS USB BUS InterfaceInterfaceLayer: capa del modelo que resuelve la comunicación física, a través de señalización de hardware y transmisión de paquetes de información, entre el Host y el Dispositivo Físico.
Autor: Alejandro Furfaro 10
Modelo del Dispositvo USBA nivel de la USB Bus Interface, tenemos fuertes cambios de un dispositivo al otro ya que se ocupa de la interacción con el Host Controllerremoto, a nivel de señalización y transmisión física.
En el USB Logical Device, la interfaz con el Host por lo general es independiente del dispositivo. Trabaja a nivel lógico con un juego de funciones de interacción básicas comunes a los diferentes dispositivos USB. En el contenido (argumentos) de dichas funciones están las diferencias en el tratamiento para los diferentes dispositivos
La Función es la capa que realiza la función esperada por el Client SWinstalado en el Host.
Autor: Alejandro Furfaro 11
Existe un flujo de comunicación dedicado entre cada aplicación y la correspondiente Función en el dispositivo.
Una Función de un dispositivo puede tener diferentes flujos de comunicaciones con diferentes aplicaciones que la requieran .
Flujo de Información en USB I
Autor: Alejandro Furfaro 12
Flujo de Información en USB II
Endpoint2 Terminación de un flujo de comunicación en el dispositivo
USB.
Host Controller Driver: 2 Interfacea al USB Host Controller con el USB System
Software.
2 Garantiza que el USB System Software, pueda interactuar con toda la variedad de implementaciones de Hardware que se pueda encontrar.
USB Driver (USBD): 2 Interfacea al USB System Software con la aplicación
cliente (Client SW) permitiéndoles a éstas el manejo del dispositivo USB
Autor: Alejandro Furfaro 13
Un dispositivo USB se presenta al sistema como una colección de Endpoints. Estos Endpoints a su vez se agrupan formando Interfaces, que son “vistas”de las diferentes Funciones del dispositivo.
La comunicación entre los extremos se realiza entre un buffer del lado Host y un Endpoint del lado Dispositivo USB. El Canal es un pipe.
Flujo de Información en USB III
Autor: Alejandro Furfaro 14
Endpoints IEs la porción identificable de un dispositivo USB que representael extremo en un flujo de comunicación entre el Host y dicho dispositivo.
Tiene un Número definido durante el diseño del dispositivo que lo identifica unívocamente.
Transfiere información en una sola dirección.
Cada dispositivo USB tiene una cantidad de Endpointsindependientes entre sí, y una dirección unívoca que lo identifica en el sistema, que obtiene desde el Host en el momento de su conexión al bus.
Así es que, definidos la dirección del dispositivo USB, el Número de Endpoint, y la Dirección del Flujo de Datos, se determina el Endpoint del dispositivo con el que se quiere establecer comunicación.
Autor: Alejandro Furfaro 15
Endpoints II
Características de un Endpoint que deben ser
conocidas por el Software Cliente a fin de
interactuar con él de manera correcta:
2 Número de identificación
2 Frecuencia o tiempo de demora en el acceso al bus.
2 Ancho de Banda requerido.
2 Comportamiento en el manejo de errores.
2 Tamaño máximo del paquete de datos que puede
transaccionar.
2 Tipo de transferencia que soporta
2 Dirección de transferencia de datos
Autor: Alejandro Furfaro 16
El Endpoint 0
Todos los dispositivos USB deben tener implementado un
método de control default que utilice un par de Endpoints (uno
de entrada y otro de salida), para que en el momento de su
conexión al bus los pueda inicializar el USB System Software
en el Host.
Este método se conoce como Default control Pipe, y el par de
Endpoints que lo compone levan el Número cero.
El Default Control Pipe soporta las transferencias de Control.
El Endpoint cero está siempre accesible ni bien el dispositivo
se conecta al bus, o se conecta a la fuente de alimentación, o
es reseteado.
Autor: Alejandro Furfaro 17
Pipes I
Son entidades abstractas que relacionan un Endpoint del dispositivo
USB con el software del host. Son el canal de comunicación virtual
mediante el cual se pueden transferir datos entre un buffer de
memoria en el host y el Endpoint del dispositivo USB.
Pueden tener uno de dos modos mutuamente excluyentes:
2 Stream: Transmiten datos sin una estructura USB definida y en modo
First-In First-Out. Siempre son unidireccionales.
2 Message: Transmiten datos con alguna estructura USB definida. Se envía
un requerimiento al dispositivo USB desde el host, el que es seguido por
una transferencia de datos en la dirección adecuada. Finalmente se pasa a
una fase de Estado. Este tipo de pipes permite comunicaciones
bidireccionales.
Autor: Alejandro Furfaro 18
Pipes IIPara cursar una transferencia un pipe requiere que se defina:
2 Demanda del bus USB y ancho de banda requerido.
2 Tipo de transferencia
2 Características del Endpoint asociado en el dispositivo: dirección de
transferencia, tamaño máximo del paquete de datos a transmitir,etc.
El Cliente de Software que corre en el host envía requerimientos al
pipe a través de I/O Request Paquets (IRPs). El formato de estos
depende del Sistema Operativo. El Cliente de Software se entera de la
finalización de un IRP, cuando recibe un aviso de finalización exitosa,
o con error.
Si no existen IRPs pendientes el pipe está en estado idle. Esto
significa que su Endpoint asociado en el extremo del dispositivo USB
no ve en el bus transacciones dirigidas a él.
Autor: Alejandro Furfaro 19
La señal se aplica en forma diferencial entre D+ y D-, de modo tal que se establece una comunicación Half Duplex. Es decir, se transmite en un único sentido en cada momento.
La señal se aplica en forma diferencial entre D+ y D-, de modo tal que se establece una comunicación Half Duplex. Es decir, se transmite en un único sentido en cada momento.
VBUS , por su parte transporta 5Vcc con respecto de la líneaGND que tiene la referencia eléctrica de tierra del sistema.
VBUS , por su parte transporta 5Vcc con respecto de la líneaGND que tiene la referencia eléctrica de tierra del sistema.
ConexionesCada conexión es punto a punto y se lleva a cabo mediante un cable separado. Dicho cable está compuesto de cuatro hilos. Se pueden conectar hasta 127 nodos o dispositivos diferentes al bus.
Autor: Alejandro Furfaro 20
mediante el no cambio de nivel y los ‘0’ mediante cambios de nivel. Llevado a términos de estados, en NRZI pasa del estado J al K cada vez que aparece un ‘0’ en el stream de bits a transmitir.
Problema: Las strings largas de ’1s’ no generan cambios de nivel y pueden causar la pérdida de sincronismo entre los dos dispositivos.Para evitarlo se utiliza una técnica denominada “bit Stuffing” (Relleno de bits), que consiste en insertar un ‘0’ cada seis ‘1’ consecutivos.
USB emplea codificación de datos NRZI. Consiste en representar los ‘1’
Características Eléctricas VII
Autor: Alejandro Furfaro 21
STA
RT O
F FR
AM
EDi
spos
itivo
1 E
ndpo
int 2
Disp
ositi
vo 1
End
poin
t 3
Disp
ositi
vo 2
End
poin
t 1
Disp
ositi
vo 6
End
poin
t 2
Sin
utili
zar
STA
RT O
F FR
AM
EDi
spos
itivo
1 E
ndpo
int 3
Disp
ositi
vo 4
End
poin
t 1
Disp
ositi
vo 3
End
poin
t 2
Sin
utili
zar
Disp
ositi
vo 2
End
poin
t 3
Disp
ositi
vo 2
End
poin
t 2
Frame de 1mseg. Frame de 1mseg.
Organización de las Transferencias
El Host Controller es el encargado de velar por que todas las transacciones se lleven a cabo en el menor tiempo posible. Para ello divide el tráfico en frames de 1 mseg. Luego arma cada frame con las transacciones correspondientes a las diferentes transferencias que se le solicitan desde las aplicaciones que seestán ejecutando en el Host.
Autor: Alejandro Furfaro 22
Cada Transferencia comprende una o mas transacciones
Cada Transacción contiene como mínimo un paquete Token. Puede contener adicionalmente paquetes de datos y Handshake
Cada paquete contiene un PID y puede tener además información adicional y un CRC
Transferencia 1 Transferencia 2 Transferencia 3
Transacción 1 Transacción 2 Transacción 3
Token Datos Handshake
PID Info. Adicional CRC
Transacciones
Autor: Alejandro Furfaro 23
Paquetes I
Los paquetes se dividen en diversos campos. Algunos son opcionales y otros obligatorios.2 Campo SYNC:
Todos los paquetes comienzan con un campo SYNC. Genera la máxima frecuencia de transición entre estados de las líneas diferenciales que componen el Bus. Aparece como un tren de transiciones “JKJKJKJK” en su codificación NRZI siguiente a un estado “Idle”. Sus últimos dos bits se toman como el fin del campo SYNC y por inferencia se asume que a continuación viene el campo Token.
2 Los paquetes Token Data y Handshake se representarán en formato no codificado.
Autor: Alejandro Furfaro 24
Cuatro bits que identifican el tipo de paquete + cuatro bits de chequeo de errores de Tx.Identifica el tipo de paquete se está cursando por el bus.
PID Info. Adicional CRC
Paquetes. Campo PID (Packet Identifier)
Autor: Alejandro Furfaro 25
PID Type PID Name PID[3:0]* Descripción OUT 0001B Transacción host-to-function. Lleva dirección +
número de endpoint IN 1001B Transacción function-to-host. Lleva dirección +
número de endpoint SOF 0101B Marca de Start-of-Frame y número de frame
Token
SETUP 1101B Transacción host-to-function para SETUP en un Control Pipe. Lleva Dirección + número de endpoint
DATA0 0011B Paquete de datos para PID para Data DATA1 1011B Paquete de datos para PID impar ACK 0010B El receptor acepta un paquete de datos libre de
error NAK 1010B El dispositivo Rx no puede aceptar datos o el
dispositivo Tx no puede enviar datos
Handshake
STALL 1110B El Endpoint se halteó o no está soportado el requerimiento a un control pipe.
Special PRE 1100B Preámbulo enviado por el Host. Habilita tráfico downstream en el bus para dispositivos low-speed.
Paquetes. Campo PID (Packet Identifier)
Valores posibles de PID.Corresponden a los 4 bits menos significativos.
Autor: Alejandro Furfaro 27
Campo PID DATA
El PID toma alternativamente los códigos de DATA0 y DATA1El resto es el campo de datos propiamente dicho y el CRC
Autor: Alejandro Furfaro 28
Campo PID HandshakeSolo PID. No va Información adicional ni Handshake
ACK: el paquete fue recibido sin error. Se puede enviar el siguiente.
NACK: El paquete fue recibido sin error, pero por condición del extremo receptor se debe retransmitir el paquete (Ej: Buffer Full).
STALL: Existe una condición de error en la Función y el Endpoint está en estado HALT. El Host no debe retransmitir el Paquete.
Si el paquete tiene CRC Incorrecto o error de bit stuffing no se retorna respuesta
Autor: Alejandro Furfaro 29
Para códigos de PID IN, OUT, o SETUP, es necesario especificar la
dirección del port seleccionado así como su número de Endpoint.
Tenemos 128 direcciones de port (Addr0-6), y 16 Endpoints (Endp0-3),
para transacciones IN y otros 16 para transacciones OUT.
Si el PID es SOF Información adicional contiene un número de frame
de 11 bits, que se genera secuencialmente.
En los paquetes cuyo PID es DATA0 y DATA1, se puede tener hasta
1023 bytes de datos.
PID Info. Adicional
CRC
Paquetes.Campo Información Adicional
Autor: Alejandro Furfaro 30
PID Info. Adicional CRC
Paquetes. CRC
El PID autochequea su integridad al transmitir los bits en formato
nativo y en complemento a 1.
Los Chequeos de Redundancia Cíclica (CRC) controlan todos el campo
de información adicional en los paquetes Token, o de datos en los
paquetes de Datos de modo de asegurar su integridad.
Se utiliza para los campos Token un algoritmo llamado CRC5 (ya que
el campo resultante es de 5 bits), que utiliza el siguiente polinomio:
G (X) = X5 + X2 + 1
Para los campos de Datos se utiliza un algoritmo CRC16 (campo
resultante de 16 bits), que utiliza el siguiente polinomio:
G (X) = X16 + X15 + X2 + 1
Autor: Alejandro Furfaro 31
Tipos de Transferencias
Cada tipo de transferencia determina características importantes del flujo de información involucrado. Entre otras contamos las siguientes:2 Formato de datos impuesto por el USB. 2Dirección del flujo de comunicaciones. 2 Restricciones en el tamaño del paquete de datos
a transmitir.2 Restricciones en el acceso al bus.2 Restricciones en el tiempo de recuperación de
datos. Secuencias de datos requeridas.2Manejo de errores.
Autor: Alejandro Furfaro 32
Transferencias de Control
Son comunicaciones por irrupción, no
periódicas, iniciadas por el host, que se utilizan
en operaciones de comando o status.
Autor: Alejandro Furfaro 33
Transferencias Isócronas
Se trata de un tipo de comunicación periódica y continua entre el host y un dispositivo USB, utilizadas típicamente en aplicaciones en donde el tiempo de recuperación de datos es un factor relevante.
No quiere decir que sea crítico el tiempo de respuesta en cuanto a la velocidad de recuperación de los datos sino más bien, en cuanto a la periodicidad de acceso a éstos.
Autor: Alejandro Furfaro 34
Son comunicaciones de baja frecuencia, para
tamaños de paquete de datos muy pequeños,
y tiempo de recuperación de datos limitado.
Transferencias Interrupción
Autor: Alejandro Furfaro 35
Son comunicaciones de grandes paquetes de
datos por irrupción, no periódicas, utilizadas
para transmitir datos que pueden utilizar
cualquier ancho de banda disponible y que
también pueden ser demorados hasta que el
ancho de banda requerido se encuentre
disponible.
Transferencias Bulk
Autor: Alejandro Furfaro 36
Tipos de Transferencias
Tipo de Transferencia Control Bulk Interrupción Isócrona
Uso típico Configuración Impresora, scanner Mouse, Teclado Audio
Obligatoria Si No
Soportada por dispositivos Low SpeedCorrección de errores
Tipo de pipe Message Stream
Garantiza Velocidad de envío
Garantiza mínimo tiempo de acceso a la información
Tamaño de datos por Endpoint (Full Speed)
8, 16, 32, ó 64 bytes 1 a 64 bytes hasta 1023
bytes
Tamaño de datos por Endpoint (Low Speed) 8 bytes No aplica
Ancho de banda reservado por frame 10% Ninguno 90 % (ambas combinadas)
No No
Si No Si No
Si Si Si No
Stream Stream
No No Si Si
No No Si Si
8, 16, 32, ó 64 bytes
8 bytes No aplica
Autor: Alejandro Furfaro 44
Uso del Ancho de Banda I
DataPayload Max Bandwidth (bytes/second)
Frame Bandwidth
per Transfer
Max Transfers
Bytes Remaining
Bytes/FrameUseful Data
1 32000 3% 32 23 322 62000 3% 31 43 624 120000 3% 30 30 1208 224000 4% 28 16 224
16 384000 4% 24 36 38432 608000 5% 19 37 60864 832000 7% 13 83 832
Max. 1500000 1500
DataPayload Max Bandwidth (bytes/second)
Frame Bandwidth
per Transfer
Max Transfers
Bytes Remaining
Bytes/FrameUseful Data
1 3000 25% 3 46 32 6000 25% 3 43 64 12000 26% 3 37 128 24000 28% 3 25 24
Max. 187500 187
Limites en las Transferencias de Control Full-speed
(PRE+ 9 SYNC bytes, 9 PID bytes, 6 Endpoint + CRC bytes, 6CRC bytes, 8 Setup data bytes, and a 7-byte interpacketdelay (EOP, etc.))
Protocol Overhead (46 bytes)
(9 SYNC bytes, 9 PID bytes, 6 Endpoint + CRC bytes, 6CRC bytes, 8 Setup data bytes, and a 7-byte interpacketdelay (EOP, etc.))
Protocol Overhead (45 bytes)
Limites en las Transferencias de Control Low-speed
Autor: Alejandro Furfaro 45
Uso del Ancho de Banda II
DataPayloadMax
Bandwidth (bytes/second)
Frame Bandwidth
per Transfer
Max Transfers
Bytes Remaining
Bytes/FrameUseful Data
1 150000 1% 150 0 1502 272000 1% 136 4 2724 460000 1% 115 30 4608 704000 1% 88 5 704
16 960000 2% 60 40 96032 1152000 3% 36 24 115264 1280000 5% 20 40 1280
128 1280000 9% 10 130 1280256 1280000 18% 5 175 1280512 1024000 35% 2 458 1024
1023 1023000 69% 1 468 1023Max. 1500000 1500
Limites en las Transferencias IsócronasProtocol Overhead
(9 bytes)(2 SYNC bytes, 2 PID bytes, 2 Endpoint + CRC bytes, 2 CRC bytes, and a 1-byte interpacketdelay
Autor: Alejandro Furfaro 46
Uso del Ancho de Banda III
DataPayloadMax
Bandwidth (bytes/second)
Frame Bandwidth
per Transfer
Max Transfers
Bytes Remaining
Bytes/FrameUseful Data
1 107000 1% 107 2 1072 200000 1% 100 0 2004 352000 1% 88 4 3528 568000 1% 71 9 568
16 816000 2% 51 21 81632 1056000 3% 33 15 105664 1216000 5% 19 37 1216
Max. 1500000 1500
DataPayloadMax
Bandwidth (bytes/second)
Frame Bandwidth
per Transfer
Max Transfers
Bytes Remaining
Bytes/FrameUseful Data
1 13000 7% 13 5 132 24000 8% 12 7 244 44000 9% 11 0 448 64000 11% 8 19 64
Max. 187500 187
Protocol Overhead (13 bytes)
(3 SYNC bytes, 3 PID bytes, 2 Endpoint + CRC bytes, 2 CRC bytes, and a 3-byte interpacket delay)
Limites en las Transferencias de Interrupción Full-speed
Limites en las Transferencias de Interrupción Low-speedProtocol Overhead
(13 bytes)(3 SYNC bytes, 3 PID bytes, 2 Endpoint + CRC bytes, 2 CRC bytes, and a 3-byte interpacket delay)
Autor: Alejandro Furfaro 47
Uso del Ancho de Banda IV
DataPayloadMax
Bandwidth (bytes/second)
Frame Bandwidth
per Transfer
Max Transfers
Bytes Remaining
Bytes/FrameUseful Data
1 107000 1% 107 2 1072 200000 1% 100 0 2004 352000 1% 88 4 3528 568000 1% 71 9 568
16 816000 2% 51 21 81632 1056000 3% 33 15 105664 1216000 5% 19 37 1216
Max. 1500000 1500
Protocol Overhead (13 bytes)
(3 SYNC bytes, 3 PID bytes, 2 Endpoint + CRC bytes, 2 CRC bytes, and a 3-byte interpacket delay)
Limites en las Transferencias Bulk
Autor: Alejandro Furfaro 48
Enumeración
Antes de comenzar a trabajar con un
dispositivo el Host debe averiguar sus
características (Tipos de transferencias,
cantidad de endpoints, etc.).
Una vez obtenida esta información le asigna
al dispositivo un número de port lógico en el
Bus.
Este proceso se denomina Enumeración.
Autor: Alejandro Furfaro 49
Pasos en la Enumeración I
El usuario conecta el dispositivo a un port de un Hub(Hub root o cualquier hub externo).2 El dispositivo toma su estado inicial: AttachedAttached.
2 Si el Hub está operativo y no está siendo reseteado, alimenta al dispositivo
automáticamente, si éste es Bus Powered.
2 El dispositivo pasa al estado PoweredPowered.
2 Si el dispositivo es Self Powered al attacharse directamente entra al estado
PoweredPowered.
El Hub detecta al dispositivo.2 Monitorea el estado eléctrico del port, y si detecta que la impedancia de
entrada cae de 15 KΩ a 1,5 KΩ, registra el evento para informar al host
cuando éste se lo solicite.
2 El dispositivo sigue en estado PoweredPowered
2 El hub no transmite nada al bus.
Autor: Alejandro Furfaro 50
Pasos en la Enumeración IIEl Host controller encuesta a los hubs para saber si tienen eventos que reportar.2 Cada Hub utiliza un pipe configurado para transferencias de interrupción
para reportar eventos al Host controller.
2 Por medio de este pipe el host controller encuesta a los Hubs (uno a la
vez) para saber si alguno tuvo un evento desde la última consulta, y en tal
caso en cual de sus ports se produjo el evento.
2 El Host envía al Hub por el pipe de interrupción una transferencia de
Control que todos los hubs deben entender: Get_Port_Status.
2 El Hub responde este comando de acuerdo a lo establecido en la
especificación.
2 El Host Controller accede a la información completa acera del evento.
Autor: Alejandro Furfaro 51
Pasos en la Enumeración IIIEl Hub resetea al dispositivo.2 Leída la información del port attachado, el Host envía al Hub el
comando Set_Port_Feature, utilizando la opción que le permite
solicitar al hub el reset del port.
2 El Hub envía las líneas D+ y D- del port a la condición de Reset
durante 10 mseg (atención: el reset durará los próximos 10
frames).
El Hub detecta la velocidad del dispositvo.2 Examina las tensiones en ambos terminales D+ y D- en el estado
Idle. Según cual tiene mayor tensión, el dispositivo es High Speed
o Low Speed.
2Según su diseño el Hub puede efectuar esta comprobación antes
del Reset o inmediatamente después del mismo.
Autor: Alejandro Furfaro 52
Pasos en la Enumeración IV
El Host establece una vía de señal entre el dispositivo y el bus. 2 Envía al Hub el comando Get_Port_Status para verificar que el
dispositivo finalizó el reset.
2 Esta operación se repite frame tras frame hasta que el Hub
conteste que el dispositivo ha sido reseteado. (Recordar que el
reset dura 10 frames)
2Cuando esto ocurre, el dispositivo está en estado DefaultDefault:
Los registros del controlador están en su estado default,
El controlador está listo para trabajar por el Endpoint 0,
Puede tomar no mas de 100 ma. del bus,
Contestará transacciones dirigidas a la dirección de port 0.
Autor: Alejandro Furfaro 53
Pasos en la Enumeración V
El Host averigua el tamaño máximo de paquete
soportado por el default control pipe.2 Envía el requerimiento Get_Descriptor al Endpoint 0 de la
Dirección 0. Especificando en este comando que se refiere al
descriptor de dispositivo y que se requieren 8 bytes de respuesta
por parte del dispositivo.
2 El Host enumera solo un dispositivo a la vez, así que no hay forma
que otro dispositivo responda.
2 El tamaño máximo del paquete está en el byte 8 del Descriptor de
Dispositivo. Por eso el Host solo lee sus ocho primeros bytes.
Autor: Alejandro Furfaro 54
Pasos en la Enumeración VI
El Host asigna una dirección.
2Envía el requerimiento Set_Address, con la dirección que
le asigna al dispositivo.
2El dispositivo lo lee, devuelve ACK, y almacena su
dirección.
2Ahora está en el estado AddressedAddressed.
2La dirección asignada es válida hasta que el dispositivo se
desconecte, apague, o resetee.
Autor: Alejandro Furfaro 55
Pasos en la Enumeración VIIEl Host lee las características del dispositivo.
2 Envía el requerimiento Get_Descriptor, al Endpoint 0 del dispositivo, usando la Dirección de port que termina de asignar, especificando “Descriptor de dispositivo”.
2 El dispositivo devuelve su Device Descriptor. Estructura que contiene la cantidad de configuraciones, interfaces, y endpointscuyos detalles se encuentran en los respectivos descriptores almacenados en el dispositivo.
2 Por cada configuración informada, el host controller envía un Get_Descriptor al dispositivo, al mismo Port y Endpointutilizados en el caso anterior, especificando “Descriptor de Configuración”.
2 El dispositivo responde el requerimiento, enviando al hostcontroller el Descriptor de la Configuración requerida, y los Descriptores de Interfaz que dependen de esta configuración, de Endpoint que dependen de cada interfaz, y de String si los hubiera
Autor: Alejandro Furfaro 56
Pasos en la Enumeración VIII
El Host carga un Device Driver.2 En base a la información de Vendor ID, Product ID, Release
number, e información de clase leídos del Device Descriptor por el
driver de Bus USB, el Sistema Operativo carga el Device Driver
mas apropiado para el dispositivo.
2 En el caso de entornos Windows, se usa además la información de
los archivos de Sistema .INF.
El Device Driver del dispositivo selecciona una configuración.2Comando Set_Configuration.
2 El dispositivo está ahora en el estado ConfiguredConfigured.
2 El dispositivo está listo para ser utilizado.
Autor: Alejandro Furfaro 57
Descriptor de DispositivoOffset Campo Tamaño Valor Descripción
0 bLength 1 Number Tamaño del Descriptor en Bytes 1 bDescriptorType 1 Constant Tipo de Descriptor DEVICE2 bcdUSB 2 BCD Número de versión de la Especificación USB en Binario Codificado Decimal (ej., 1.10 es 110H).
Este campo identifica el release de la Especificación USB con la cual son compatibles el dispositivo y sus descriptores.
4 bDeviceClass 1 Class Class code (asignado por el USB). Si este campo vale 00H, cada interfaz dentro de una configuración especificará su propia información de clase y todas trabajarán independientemente Si este campo tiene un valor entre 1 y FEH, significa que el dispositivo soporta diferentes especificaciones de clase sobre diferentes interfaces y éstas pueden no operar independientemente. Este valor identifica la definición de clase usada por las interfaces agregadas. (Por ejemplo, un CD-ROM con interfaces de audio y datos digitales que requieren control de transporte para ejectar el CD o comenzar a hacerlos girar).Si este campo vale FFH, la clase del dispositivo es vendor-specific
5 bDeviceSubClass 1 Subclass Subclass code (asignado por el USB). Este código se evalúa de acuerdo al valor del campo bDeviceClass. Si el campo bDeviceClass es cero, este campo también debe ser cero. Si el campo bDeviceClass no vale FFH, todos los valores se reservan para ser asignados por el USB.
6 bDeviceProtocol 1 Protocol Protocol code (asignado por el USB). Estos códigos se evalúan de acuerdo con el valor de los campos bDeviceClass ybDeviceSubClass. Si un dispositivo soporta protocolos de clase específicos sobre la base de dispositivo y no de interfaz, este código identifica el protocolo que utiliza el dispositivo tal como se lo define en la especificación de clase de ese dispositivo. Si este campo vale cero, el dispositivo no utiliza protocolos específicos de clase. Sin embargo puede utilizar protocolos específicos de clase sobre la base de interfaces. Si este campo vale FFH, el dispositivo usa un protocolo vendor-specific basado en el dispositivo.
7 bMaxPacketSize0 1 Number Tamaño máximo de paquete para endpoint 0 (valores válidos solo 8, 16, 32, o 64) 8 idVendor 2 ID Vendor ID (asignados por el USB)
10 idProduct 2 ID Product ID (asignados por el fabricante)12 bcdDevice 2 BCD Número de versión del Dispositivo en Binario Codificado Decimal14 iManufacturer 1 Index Indice de descriptor de string que describe al fabricante15 iProduct 1 Index Indice de descriptor de string que describe al producto 16 iSerialNumber 1 Index Indice al descriptor de string que describe el número de serie del dispositivo 17 bNumConfigurations 1 Number Número de configurationes posibles
Autor: Alejandro Furfaro 58
Descriptor de Dispositivo/*SINGLE HID INTERFACE*/
const byte DEV_DESC[]={DEV_LENGTH,/*length of this desc. */DEVICE, /*DEVICE descriptor */0x00,0x01, /*spec rev level (BCD) */0x00, /*device class */0x00, /*device subclass */0x00, /*device protocol */0x08, /*max packet size */0x00,0x04, /*National's vendor ID */0x5B,0xC3, /*National's product ID */0x41,0x01, /*National's revision ID */MFG_STR_OFS,/*index of manuf. string */PID_STR_OFS,/*index of prod. string */0, /*index of ser. # string */0x01 /*number of configs. */};
Autor: Alejandro Furfaro 59
Descriptor de ConfiguraciónOffset Campo Tamaño Valor Descripción
0 bLength 1 Number Tamaño del Descriptor en Bytes 1 bDescriptorType 1 Constant Tipo de Descriptor CONFIGURATION2 wTotalLength 2 Number Longitud total de los datos retornados para esta configuración. Incluye la longitud combinada de
todos los descriptores de configuración, interfaz, endpoint, y específicos de clase o fabricante retornados para esta configuración.
4 bNumInterfaces 1 Number Númeo de interfaces soportadas por esta configuración5 bConfigurationValue 1 Number Valor a utilizar como argumento en el requerimiento SetConfiguration() para
seleccionar esta configuración6 iConfiguration 1 Index Indice al descriptor de string que describe esta configuración7 bmAttributes 1 Bitmap Características de la configuración :
D7: Reservado (debe estar en 1) D6: Self-powered D5: Remote Wakeup D4...0: Reservados (deben estar en 0)D7 está reservado y debe estar en 1 por razones históricas. Para indicar la cantidad de mA requeridos, una configuración de dispositivo que utiliza alimentación del Bus y una fuente local, reporta un valor distinto de cero en MaxPower y setea D6. La fuente de alimentación actual en tiempo de ejecución se determina mediante el requerimiento GetStatus (DEVICE). Si una configuración de dispositivo soporta remote wakeup, D5 se pone en 1.
8 MaxPower 1 mA Máximo consumo de alimentación desde el Bus para esta configuración específica, del dispositivo USB cuando se encuentra completamente operacional. Se expresa en unidades de 2mA (p.ej., 50 = 100mA).Nota: La configuración de un dispositivo indica si esa configuración es bus- powered o selfpowered. El estado del dispositivo reporta si éste está actualmente self-powered. Si un dispositivo se desconecta de su fuente de alimentación externa, actualiza su estado de dispositivo para indicar que ya no está self-powered. Un dispositivo no puede incrementar su toma de alimentación del bus, cuando pierde su alimentación externa, mas allá de la cantidad reportada por esta configuración.Si un dispositivo puede continuar operando cuando se desconecta de su fuente de alimentación externa, continuará haciéndolo, caso contrario cesa su operación. El USB System Software puede determinar la causa de la falla chequeando el estado y detectando la pérdida de alimentación del di iti
Autor: Alejandro Furfaro 60
Interface DescriptorOffset Campo Tamaño Valor Descripción
0 bLength 1 Number Tamaño del Descriptor en Bytes 1 bDescriptorType 1 Constant Tipo de Descriptor INTERFACE2 bInterfaceNumber 1 Number Número de interfaz. Valor base cero que identifica el ídice en un array de interfaces
concurrentes soportadas por esta configuración3 bAlternateSetting 1 Number Valor utilizado para seleccionar ajustes alternativos para la interfaz
identificadas en el campo previo.4 bNumEndpoints 1 Number Número de endpoints utilizado por esta interfaz (excluyendo el endpoint
cero). Si este valor es cero, esta interfaz solo utiliza el Default Control Pipe.
5 bInterfaceClass 1 Class Código de clase (asignado por el USB).El valor cero se reserva para futura estandarización.Si este campo se pone en FFh, la clase de esta interfaz es "vendor-specific".El resto de los valores está reservado para su asignación por el USB.
6 bInterfaceSubClass 1 SubClass El Código de Subclase (asignado por el USB). Estos códigos son clasificados por el valor de campo bInterfaceClass.Si el campo bInterfaceClass es 0, este campo también debe estar en 0.Si el campo bInterfaceClassno es FFh, todos los valores se reservan para su asignación por el USB.
7 bInterfaceProtocol 1 Protocol Código de Protocolo (asignado por el USB). Estos códigos se clasifican de acuerdo con el valore de los campos bInterfaceClass y bInterfaceSubClass. Si una interfaz soporta requerimientos "class-specific", este código identifica los protocolos que usa el dispositivo de acuerdo con lo definido en la especificación de clase a la que pertenece el dispositivo. Si este campo se pone en 0, el dispositivo no utiliza un protocolo "class-specific" en esta interfaz. Si este campo se pone en FFh, el dispositivo utiliza un protocolo "vendor-specific" para esta interfaz.
8 iInterface 1 Index Indice al descriptor de string que describe esta interfaz.
Autor: Alejandro Furfaro 61
Descriptor de EndpointOffset Campo Tamaño Valor Descripción
0 bLength 1 Number Tamaño del Descriptor en Bytes 1 bDescriptorType 1 Constant Tipo de Descriptor ENDPOINT2 bEndpointAddress 1 Endpoint Dirección del endpoint en el dispositivo USB. Se codifica como sigue:
Bit 3...0: Número de endpoint Bit 6...4: Reservados, se ponen en 0 Bit 7: Dirección de las transferencias( se ignora para endpoints de control ) 0 = OUT endpoint 1 = IN endpoint
3 bmAttributes 1 Bitmap Este campo describe los atributos del endpoint cuando lo configuró utilizando el valor bConfigurationValue. Bit 10: Tipo de transferencia: 00 = Control 01 = Isochronous 10 = Bulk 11 = InterruptEl resto de los bits están reservados.
4 wMaxPacketSize 2 Number Es el máximo tamaño de paquete que este endpoint es capaz de enviar o recibir cuando se selecciona esta configuración. Para endpoints isócronos, este valor se utiliza para reservar tiempo de bus en el schedule, requerido para los payloads de datos de cada frame. El pipe puede sobre la marcha, utilizar menos ancho de banda que el reservado. Si es necesario, el dispositivo reporta el ancho de banda actual en uso por medio de sus propios mecanismos normales no definidos por USB. Para endpoints de interrupción, bulk, y control, se pueden enviar payloads de datos mas pequeños, pero esto terminará la transferencia y podrá o no requirirse intervención para recomenzarla.
6 bInterval 1 Number Intervalo para polling al endpoint en espera de transferencias de datos. Expresado en milisegundos. Este campo se ignora para endpoints bulk y control. Para endpoints isócronos este campo debe estar en 1. Para endpoints de interrupción, este campo puede valer desde 1 a 255.
Autor: Alejandro Furfaro 62
const byte CFG_DESC[] = {CFG_LENGTH, /*length of this desc. */CONFIGURATION, /*CONFIGURATION descriptor*/0x22,0x00, /*total length returned */0x01, /*number of interfaces */0x01, /*number of this config */CFG_STR_OFS, /*index of config. string */ATTRIBUTES, /*attr.: bus powered */50, /*max power (100 mA) */
INT_LENGTH, /*length of this desc. */INTERFACE, /*INTERFACE descriptor */0x00, /*interface number */0x00, /*alternate setting */0x01, /*# of (non 0) endpoints */HIDCLASS, /*interface class */NOSUBCLASS, /*interface subclass */0x00, /*interface protocol */INT_STR_OFS, /*index of intf. string */
HID_LENGTH, /*length of this desc. */HID, /*HID descriptor */0x00,0x01, /*HID spec rev level (BCD)*/0x00, /*target country */1, /*# HID class desc follow.*/HIDREPORT, /*report descr. type */RPT_DESC_SIZE,0x00, /*report descr. length */
END_LENGTH, /*length of this desc. */ENDPOINT, /*ENDPOINT descriptor */0x85, /*address (IN) */0x03, /*attributes (INTERRUPT) */0x40,0x00, /*max packet size (64) */0xFF}; /*interval (ms) */
Descriptores de Configuración, Interfaz y Endpoint. Ejemplos
Autor: Alejandro Furfaro 63
Descriptor de String
Offset Campo Tamaño Valor Descripción0 bLength 1 N+2 Tamaño del Descriptor en Bytes 1 bDescriptorType 1 Constant Tipo de Descriptor STRING2 wLANGID[0] 2 Constant Código de LANGID Cero
….. …… …… ……. ……….N wLANGID[x] 2 Código de LANGID x
Autor: Alejandro Furfaro 64
Descriptores de String. Ejemplos
const byte STR_DATA[] = {4,3,9,4 /*LANGID array (English) *//*[004] MFG_STR --> "National Semiconductor Corporation" -------------*/
, 70,3, 78,0, 97,0,116,0,105,0,111,0,110,0, 97,0,108,0, 32,0, 83,0,101,0,109,0,105,0, 99,0,111,0,110,0,100,0,117,0, 99,0,116,0,111,0,114,0, 32,0, 67,0,111,0,114,0,112,0,111,0,114,0, 97,0,116,0,105,0,111,0,110,0
/*[074] PID_STR --> "USBN9603 HID Evaluation" ------------------------*/, 48,3, 85,0, 83,0, 66,0, 78,0, 57,0, 54,0, 48,0, 51,0, 32,0, 72,0, 73,0, 68,0, 32,0, 69,0,118,0, 97,0,108,0,117,0, 97,0,116,0,105,0,111,0,110,0
/*[122] NBR_STR --> "Jim Lyle" ---------------------------------------*/, 18,3, 74,0,105,0,109,0, 32,0, 76,0,121,0,108,0,101,0
/*[140] CFG_STR --> "Standard Configuration" -------------------------*/, 46,3, 83,0,116,0, 97,0,110,0,100,0, 97,0,114,0,100,0, 32,0, 67,0,111,0,110,0,102,0,105,0,103,0,117,0,114,0, 97,0,116,0,105,0,111,0,110,0
/*[186] INT_STR --> "HID JOYSTICK Interface" -------------------------*/, 46,3, 72,0, 73,0, 68,0, 32,0, 74,0, 79,0, 89,0, 83,0, 84,0, 73,0, 67,0, 75,0, 32,0, 73,0,110,0,116,0,101,0,114,0,102,0, 97,0, 99,0,101,0}; /*end of STR_DATA */
#define MFG_STR_OFS 4#define PID_STR_OFS 74#define NBR_STR_OFS 122#define CFG_STR_OFS 140#define INT_STR_OFS 186
Autor: Alejandro Furfaro 65
Offset Campo Tamaño Valor Descripción
Characteristics of request:D7: Data transfer direction
0 = Host-to-device1 = Device-to-host
D6...5: Type0 = Standard1 = Class2 = Vendor3 = Reserved
D4...0: Recipient0 = Device1 = Interface2 = Endpoint3 = Other4...31 = Reserved
1 bRequest 1 Value Specific request (Ver hoja "Standard Device Requests")2 wValue 2 Value Word-sized field that varies according to request4 wIndex 2 Index or Offset Word-sized field that varies according to request;
typically used to pass an index or offset6 wLength 2 Count Number of bytes to transfer if there is a Data stage
0 bmRequestType 1 Bitmap
Datos para un requerimiento SETUP
Especifica la cantidad de bytes qué se transmitirán en en la segunda fase de datos. La dirección de la transacción la especifica el bit D7 de bmRequest
D7 D6 D5 D4 D3 D2 D1 D0DirecciónD15 D14 D13 D12 D11 D10 D9 D8
D7 D6 D5 D4 D3 D2 D1 D0
D15 D14 D13 D12 D11 D10 D9 D8
Formato de wIndex cuando se especifica una Interfaz
Formato de wIndex cuando se especifica un Endpoint
Reservada (Reset a cero)
Nº de Interfaz
Reservada (Reset a cero) Número de Endpoint
Reservada (Reset a cero)
D7 D6 D5 D4 D3 D2 D1 D0DirecciónD15 D14 D13 D12 D11 D10 D9 D8
D7 D6 D5 D4 D3 D2 D1 D0
D15 D14 D13 D12 D11 D10 D9 D8
Formato de wIndex cuando se especifica una Interfaz
Formato de wIndex cuando se especifica un Endpoint
Reservada (Reset a cero)
Nº de Interfaz
Reservada (Reset a cero) Número de Endpoint
Reservada (Reset a cero)
Especifica al requerimiento específico que se va a enviar(ver siguiente slide)
Especifica las características del requerimiento específico que se va a enviar
Autor: Alejandro Furfaro 66
Requerimientos StandardbmRequestType bRequest wValue wIndex wLengthData00000000B00000001B00000010B
CLEAR_FEATURE Feature Selector
Zero Interface Endpoint
Zero None
10000000B GET_CONFIGURATION Zero Zero One Configuration Value
10000000B GET_DESCRIPTOR Descriptor Type and Descriptor
Index
Zero or Language
ID
Descriptor
Length
Descriptor
10000001B GET_INTERFACE Zero Interface One Alternate Interface
10000000B10000001B10000010B
GET_STATUS Zero ZeroInterfaceEndpoint
Two Device, Interface, or Endpoint Status
00000000B SET_ADDRESS Device Address Zero Zero None00000000B SET_CONFIGURATION Configuration
ValueZero Zero None
00000000B SET_DESCRIPTOR Descriptor Type and Descriptor
Index
Zero or Language
ID
Descriptor
Length
Descriptor
00000000B00000001B00000010B
SET_FEATURE Feature Selector
Zero Interface Endpoint
Zero None
00000001B SET_INTERFACE Alternate Setting
Interface Zero None
10000010B SYNCH_FRAME Zero Endpoint Two Frame Number
Autor: Alejandro Furfaro 67
Códigos para Requerimientos y Tipos Standard
bRequest ValorGET_STATUS 0CLEAR_FEATURE 1Reservado para uso Futuro 2SET_FEATURE 3Reservado para uso Futuro 4SET_ADDRESS 5GET_DESCRIPTOR 6SET_DESCRIPTOR 7GET_CONFIGURATION 8SET_CONFIGURATION 9GET_INTERFACE 10SET_INTERFACE 11SYNCH_FRAME 12
Tipo de Descriptor Receptor ValorDEVICE_REMOTE_WAKEUP Device 1ENDPOINT_HALT Endpoint 0
Tipo de Descriptor ValorDEVICE 1CONFIGURATION 2STRING 3INTERFACE 4ENDPOINT 5
Autor: Alejandro Furfaro 68
USBUSB
DeviceDevice
Comando Get descriptor
¿Quien sos?
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50x0xA5A5Frame#Frame#Frame#
0x0DD0x0DD0x0DDCRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001SETUPSETUPSETUP
0xB40x0xB4B4ADDRADDRADDR
0x000x000x00ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x080x080x08EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30x0xC3C3DATADATADATA
80 06 00 01 00 00 40 0080 06 00 01 00 00 40 0080 06 00 01 00 00 40 00CRC16CRC16CRC16
0xBB290xBB290xBB29EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x0x4B4BEOPEOPEOP
001001001
Setup stage
SiemensSiemens
Autor: Alejandro Furfaro 69
SyncSync0000000100000001
SOFSOF0xA50xA5
Frame#Frame#0x0DD0x0DD
CRC5CRC50x150x15
EOPEOP001001
SyncSync0000000100000001
SETUPSETUP0xB40xB4
ADDRADDR0x000x00
ENDPENDP0x00x0
CRC5CRC50x080x08
EOPEOP001001
SyncSync0000000100000001
DATA0DATA00xC30xC3
DATADATA80 06 00 01 00 00 40 0080 06 00 01 00 00 40 00
CRC16CRC160xBB290xBB29
EOPEOP001001
SyncSync0000000100000001
ACKACK0x4B0x4B
EOPEOP001001
Start Of Frame
...se genera cada 1 mseg.
SyncSyncSync
000000010000000100000001
Packet start indica “llegando paquete” al transceiverPacket start Packet start indica “llegando paqueteindica “llegando paquete” al transceiver” al transceiver
SOFSOFSOF
0xA50x0xA5A5
Start of Frame (uno por milisegundo)Start of Frame (Start of Frame (uno por milisegundo)uno por milisegundo)
Frame#Frame#Frame#
0x0DD0x0DD0x0DD
Número de Frame (0 - 2047) cíclicoNúmeroNúmero de Frame (0 de Frame (0 -- 2047) 2047) cíclicocíclico
CRC5CRC5CRC5
0x150x150x15
5 bit Checksum sobre Frame#5 bit Checksum 5 bit Checksum sobresobre Frame#Frame#
EOPEOPEOP
001001001
End of Packet (D+ and D- bajas)End of Packet (D+ and DEnd of Packet (D+ and D-- bajasbajas))
Setup stage
USBUSB
DeviceDevice
SiemensSiemens
Autor: Alejandro Furfaro 70
SyncSync0000000100000001
SETUPSETUP0xB40xB4
ADDRADDR0x000x00
ENDPENDP0x00x0
CRC5CRC50x080x08
EOPEOP001001
SyncSync0000000100000001
DATA0DATA00xC30xC3
DATADATA80 06 00 01 00 00 40 0080 06 00 01 00 00 40 00
CRC16CRC160xBB290xBB29
EOPEOP001001
SyncSync0000000100000001
ACKACK0x4B0x4B
EOPEOP001001
Se decodifican los Paquetes Setup completos y se generan las interrupciones
Paquetes Setup
SyncSyncSync
000000010000000100000001SETUPSETUPSETUP
0xB40x0xB4B4
Setup Packet (comienza transf. de control) Setup Packet (Setup Packet (comienza comienza transf.transf. de control) de control)
ADDRADDRADDR
0x000x000x00
Addr 0 (define direc. para cada nuevo disp. attachado)Addr 0 (define Addr 0 (define direcdirec.. para cada nuevo para cada nuevo dispdisp. . attachadoattachado))
SyncSync0000000100000001
SOFSOF0xA50xA5
Frame#Frame#0x0DD0x0DD
CRC5CRC50x150x15
EOPEOP001001
ENDPENDPENDP
0x00x00x0
Endpoint 0 (usado para configuración)Endpoint 0 (Endpoint 0 (usado para configuraciónusado para configuración))
CRC5CRC5CRC5
0x080x080x08EOPEOPEOP
001001001
Setup stage
USBUSB
DeviceDevice
SiemensSiemens
Autor: Alejandro Furfaro 71
SyncSync0000000100000001
DATA0DATA00xC30xC3
DATADATA80 06 00 01 00 80 06 00 01 00 0000 40 0040 00
CRC16CRC160xBB290xBB29
EOPEOP001001
SyncSync0000000100000001
ACKACK0x4B0x4B
EOPEOP001001
El Paquete Data define que clase de transferencia setup se inicia
Paquete Data
SyncSync0000000100000001
SETUPSETUP0xB40xB4
ADDRADDR0x000x00
ENDPENDP0x00x0
CRC5CRC50x080x08
EOPEOP001001
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30x0xC3C3
DATADATADATA
DATADATADATA
80 06 00 01 00 00 40 0080 06 00 01 00 80 06 00 01 00 0000 40 0040 00
01 = device descriptor01 = device descriptor
80 = dirección de transferencia, comando 80 = dirección de transferencia, comando stdstd. . 06 = get descriptor06 = get descriptor
00 = 00 = índiceíndice del descriptordel descriptor
40 00 = 40 00 = cantidad de bytes requeridos cantidad de bytes requeridos por el por el hosthost (formato (formato littlelittle endianendian;;LowbyteLowbyte, , HighbyteHighbyte))
Get device descriptor Get device descriptor genera genera una interrupciónuna interrupción
Get device descriptor Get device descriptor genera genera una interrupciónuna interrupción
00 00 0000 = language ID= language ID
CRC16CRC16CRC16
0xBB290xBB290xBB29EOPEOPEOP
001001001
Setup stage
USBUSB
DeviceDevice
SiemensSiemens
Autor: Alejandro Furfaro 72
USBUSB
DeviceDevice
ACKnowledgedCada transferencia de control debe ser reconocida (ACKnowledged)
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x0x4B4B
Acknowledge PacketAcknowledge PacketAcknowledge Packet
EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50xA50xA5Frame#Frame#Frame#
0x0DD0x0DD0x0DDCRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001SETUPSETUPSETUP
0xB40x0xB4B4ADDRADDRADDR
0x000x000x00ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x080x080x08EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30x0xC3C3DATADATADATA
80 06 00 01 00 00 40 0080 06 00 01 00 80 06 00 01 00 0000 40 0040 00CRC16CRC16CRC16
0xBB290xBB290xBB29EOPEOPEOP
001001001
Setup stage
SiemensSiemens
Autor: Alejandro Furfaro 73
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x0x4B4BEOPEOPEOP
001001001
Cada transferencia de Datos será iniciada por el host (PC) con un Paquete IN/OUT
Paquete IN/OUT
SyncSyncSync
000000010000000100000001INININ
0x960x960x96ADDRADDRADDR
0x000x000x00ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x80x80x8EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50x0xA5A5Frame#Frame#Frame#
0x0DE0x0DE0x0DECRC5CRC5CRC5
0x170x170x17EOPEOPEOP
001001001
Data stage
USBUSB
DeviceDevice
SyncSyncSync
000000010000000100000001DATA1DATA1DATA1
0xD20x0xD2D2DATADATADATA
12 01 00 01 00 00 00 0812 01 00 01 00 12 01 00 01 00 0000 0000 0808CRC16CRC16CRC16
0xC8E70xC8E70xC8E7EOPEOPEOP
001001001
Data In Packet (Host requiere datos del dispositivo) Data In Packet (Host Data In Packet (Host requiere datos del dispositivorequiere datos del dispositivo) )
SiemensSiemens
Autor: Alejandro Furfaro 74
SyncSync0000000100000001
DATA1DATA10xD20xD2
DATADATA12 01 00 01 00 00 00 0812 01 00 01 00 00 00 08
CRC16CRC160xC8E70xC8E7
EOPEOP001001
SyncSync0000000100000001
ACKACK0x4B0x4B
EOPEOP001001
USBUSB
DeviceDevice
Paquetes de Datos
SyncSync0000000100000001
ININ0x960x96
ADDRADDR0x000x00
ENDPENDP0x00x0
CRC5CRC50x80x8
EOPEOP001001
DATADATADATA
12 = 12 = longitudlongitud del device descriptordel device descriptor01 = 01 = TipoTipo de device descriptorde device descriptor
SyncSyncSync
000000010000000100000001DATA1DATA1DATA1
0xD20x0xD2D2DATADATADATA
12 01 00 01 00 00 00 0812 01 00 01 00 00 00 0812 01 00 01 00 00 00 08CRC16CRC16CRC16
0xC8E70xC8E70xC8E7EOPEOPEOP
001001001
00 = Device Protocol00 = Device Protocol00 = Device Class00 = Device Class
00 = Device Sub Class00 = Device Sub Class08 = 08 = TamañoTamaño Max. de Max. de paquetepaquete del del
endpoint 0endpoint 0
1eros. 8 bytes del 1eros. 8 bytes del device descriptordevice descriptor01 = byte alto de 01 = byte alto de especificación USBespecificación USB
00 = byte 00 = byte bajo de especificaciónbajo de especificación USBUSBV 01.00V 01.00}
Data stage
SiemensSiemens
Autor: Alejandro Furfaro 75
USBUSB
DeviceDevice
Fin de la Etapa de Datos
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50x0xA5A5Frame#Frame#Frame#
0x0E00x0E00x0E0CRC5CRC5CRC5
0x0E0x0E0x0EEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001OUTOUTOUT
0x870x0x8787ADDRADDRADDR
0x000x000x00ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x080x080x08EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA1DATA1DATA1
0xD20x0xD2D2DATADATADATA CRC16CRC16CRC16
0x00000x00000x0000EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x0x4B4BEOPEOPEOP
001001001
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) Data stage → Status stage
SiemensSiemens
Autor: Alejandro Furfaro 76
Reset desde el Host (10ms)
Reset iniciado por el hostReset Reset iniciado por eliniciado por el hosthost
RESETRESETRESET
128160128160128160
USBUSB
DeviceDevice
SiemensSiemens
Autor: Alejandro Furfaro 77
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x0x4B4BEOPEOPEOP
001001001
Comando: Set AddressDesde ahora te llamás Nº2
SyncSyncSync
000000010000000100000001SETUPSETUPSETUP
0xB40x0xB4B4ADDRADDRADDR
0x000x000x00ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x080x080x08EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30x0xC3C3DATADATADATA
00 05 02 00 00 00 00 0000 05 02 00 00 00 00 0000 05 02 00 00 00 00 00CRC16CRC16CRC16
0xD7680xD7680xD768EOPEOPEOP
001001001
DATADATADATA
02 = device address nr. 202 = device address nr. 2
00 = 00 = direccióndirección hosthost-- dispositivodispositivo, std. command,, std. command,receptor el receptor el dispositivodispositivo
05 = set address05 = set address
00 00 00 00 00 = default00 00 00 00 00 = default
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50x0xA5A5Frame#Frame#Frame#
0x1430x1430x143CRC5CRC5CRC5
0x040x040x04EOPEOPEOP
001001001USBUSB
DeviceDevice
SiemensSiemens
Autor: Alejandro Furfaro 78
USBUSB
DeviceDevice
Fin de la etapa de Datos
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50xA50xA5Frame#Frame#Frame#
0x1440x1440x144CRC5CRC5CRC5
0x080x080x08EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001INININ
0x960x960x96ADDRADDRADDR
0x000x000x00ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x080x080x08EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x0x4B4BEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA1DATA1DATA1
0xD20x0xD2D2DATADATADATA CRC16CRC16CRC16
0x00000x00000x0000EOPEOPEOP
001001001
Paquete de datos Paquete de datos vacío desde el vacío desde el
dispositivo.dispositivo.
Data stage → Status stage
SiemensSiemens
Autor: Alejandro Furfaro 79
Get Descriptor al DispositivoNº 2
¿Que sos?
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50x0xA5A5Frame#Frame#Frame#
0x1510x1510x151CRC5CRC5CRC5
0x1E0x1E0x1EEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001SETUPSETUPSETUP
0xB40x0xB4B4ADDRADDRADDR
0x020x020x02ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
Setup stage
USBUSB
DeviceDevice
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30x0xC3C3DATADATADATA
80 06 00 01 00 00 12 0080 06 00 01 00 00 12 0080 06 00 01 00 00 12 00CRC16CRC16CRC16
0x072F0x072F0x072FEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x4B0x4BEOPEOPEOP
001001001El dispositivo es El dispositivo es
accedido como accedido como Nº2Nº2
SiemensSiemens
Autor: Alejandro Furfaro 80
SyncSync0000000100000001
DATA0DATA00xC30xC3
DATADATA80 06 00 01 00 00 12 0080 06 00 01 00 00 12 00
CRC16CRC160x072F0x072F
EOPEOP001001
SyncSync0000000100000001
ACKACK0x4B0x4B
EOPEOP001001
SyncSync0000000100000001
SETUPSETUP0xB40xB4
ADDRADDR0x020x02
ENDPENDP0x00x0
CRC5CRC50x150x15
EOPEOP001001
SyncSync0000000100000001
SOFSOF0xA50xA5
Frame#Frame#0x1510x151
CRC5CRC50x1E0x1E
EOPEOP001001
Get Descriptor del DispositivoNº 2 II
¿Que sos?, detalles
DATADATADATA
01 = device descriptor01 = device descriptor
80 = 80 = dirección de transferenciadirección de transferencia, std. command , std. command 06 = get descriptor06 = get descriptor
00 = 00 = índiceíndice del descriptordel descriptor
12 00 = bytes a 12 00 = bytes a transferir00 00 = language ID00 00 = language ID
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30xC30xC3DATADATADATA
80 06 00 01 00 00 12 0080 06 00 01 00 00 12 0080 06 00 01 00 00 12 00CRC16CRC16CRC16
0x072F0x072F0x072FEOPEOPEOP
001001001
Setup stage
USBUSB
DeviceDevice
SiemensSiemens
Autor: Alejandro Furfaro 81
IN request
Obtiene datos del dispositivo
SyncSyncSync
000000010000000100000001INININ
0x960x960x96ADDRADDRADDR
0x020x020x02ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50x0xA5A5Frame#Frame#Frame#
0x1520x1520x152CRC5CRC5CRC5
0x1C0x1C0x1CEOPEOPEOP
001001001
Data stage
USBUSB
DeviceDevice
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x0x4B4BEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA1DATA1DATA1
0xD20x0xD2D2DATADATADATA
12 01 00 01 00 00 00 0812 01 00 01 00 00 00 0812 01 00 01 00 00 00 08CRC16CRC16CRC16
0xC8E70xC8E70xC8E7EOPEOPEOP
001001001
SiemensSiemens
Autor: Alejandro Furfaro 82
SyncSync0000000100000001
ACKACK0x4B0x4B
EOPEOP001001
SyncSync0000000100000001
ININ0x960x96
ADDRADDR0x020x02
ENDPENDP0x00x0
CRC5CRC50x150x15
EOPEOP001001
SyncSync0000000100000001
DATA1DATA10xD20xD2
DATADATA12 01 00 01 00 00 00 0812 01 00 01 00 00 00 08
CRC16CRC160xC8E70xC8E7
EOPEOP001001
USBUSB
DeviceDevice
IN request IIDetalles (obtiene datos de descripción del dispositivo)
DATADATADATA
12 = 12 = longitud dellongitud del device descriptordevice descriptor01 = 01 = TipoTipo device descriptordevice descriptor
01 = byte alto 01 = byte alto deladela especificación USBespecificación USB00 = byte 00 = byte bajo de la especificaciónbajo de la especificación USBUSB
00 = Device Protocol00 = Device Protocol
00 = Device Class00 = Device Class00 = Device Sub Class00 = Device Sub Class
08 = 08 = Tamaño Max. De paquete del Tamaño Max. De paquete del endpointendpoint 00
1eros. 8 bytes del 1eros. 8 bytes del device descriptordevice descriptor
SyncSyncSync
000000010000000100000001DATA1DATA1DATA1
0xD20xD20xD2DATADATADATA
12 01 00 01 00 00 00 0812 01 00 01 00 00 00 0812 01 00 01 00 00 00 08CRC16CRC16CRC16
0xC8E70xC8E70xC8E7EOPEOPEOP
001001001
Data stage
SiemensSiemens
Autor: Alejandro Furfaro 83
2º IN request
Obtiene datos del dispositivo
SyncSyncSync
000000010000000100000001INININ
0x960x960x96ADDRADDRADDR
0x020x020x02ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50xA50xA5Frame#Frame#Frame#
0x1530x1530x153CRC5CRC5CRC5
0x030x030x03EOPEOPEOP
001001001
Data stage
USBUSB
DeviceDevice
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x0x4B4BEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30xC30xC3DATADATADATA
8B 05 41 C5 01 00 00 008B 05 41 C5 01 00 00 008B 05 41 C5 01 00 00 00CRC16CRC16CRC16
0x86DB0x86DB0x86DBEOPEOPEOP
001001001
SiemensSiemens
Autor: Alejandro Furfaro 84
SyncSync0000000100000001
DATA0DATA00xC30xC3
DATADATA8B 05 41 C5 01 00 00 008B 05 41 C5 01 00 00 00
CRC16CRC160x86DB0x86DB
EOPEOP001001
USBUSB
DeviceDevice
Detalles. Se transfieren los datos específicos a la PC
2º IN request II
SyncSync0000000100000001
ACKACK0x4B0x4B
EOPEOP001001
SyncSync0000000100000001
ININ0x960x96
ADDRADDR0x020x02
ENDPENDP0x00x0
CRC5CRC50x150x15
EOPEOP001001
DATADATADATA
C5 = byte alto del product IDC5 = byte alto del product ID
41 = byte 41 = byte bajobajo del product IDdel product ID
00 = 00 = índice paraíndice para string descriptor del string descriptor del fabricantefabricante
01 = byte 01 = byte bajo del bajo del devicenumberdevicenumber00 = byte alto del device number00 = byte alto del device number
00 = 00 = índiceíndice al string descriptor del al string descriptor del productoproducto
siguientessiguientes 8 bytes del 8 bytes del device descriptordevice descriptor
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30x0xC3C3DATADATADATA
8B 05 41 C5 01 00 00 008B 05 41 C5 01 00 00 008B 05 41 C5 01 00 00 00CRC16CRC16CRC16
0x86DB0x86DB0x86DBEOPEOPEOP
001001001
8B = byte 8B = byte bajobajo del vendor IDdel vendor ID05 = byte alto del vendor ID05 = byte alto del vendor ID
SiemensSiemens
Autor: Alejandro Furfaro 85
SyncSync0000000100000001
SOFSOF0xA50xA5
Frame#Frame#0x1540x154
CRC5CRC50x1D0x1D
EOPEOP001001
SyncSync0000000100000001
ININ0x960x96
ADDRADDR0x020x02
ENDPENDP0x00x0
CRC5CRC50x150x15
EOPEOP001001
SyncSync0000000100000001
DATA1DATA10xD20xD2
DATADATA00 0100 01
CRC16CRC160xFCF10xFCF1
EOPEOP001001
SyncSync0000000100000001
ACKACK0x4B0x4B
EOPEOP001001
USBUSB
DeviceDevice
3º IN request
Se transfiere el resto
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50x0xA5A5Frame#Frame#Frame#
0x1540x1540x154CRC5CRC5CRC5
0x1D0x1D0x1DEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001INININ
0x960x960x96ADDRADDRADDR
0x020x020x02ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA1DATA1DATA1
0xD20xD20xD2DATADATADATA
00 0100 0100 01CRC16CRC16CRC16
0xFCF10xFCF10xFCF1EOPEOPEOP
001001001
DATADATADATA
00 = 00 = índiceíndice al string descriptor del al string descriptor del número de serie número de serie 01 = 01 = número de configuracionesnúmero de configuraciones
Data stage
SiemensSiemens
Autor: Alejandro Furfaro 86
USBUSB
DeviceDevice
Comando: OUT transferPaquete de datos vacíoFinaliza la etapa de datos
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50x0xA5A5Frame#Frame#Frame#
0x1550x1550x155CRC5CRC5CRC5
0x020x020x02EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001OUTOUTOUT
0x870x0x8787ADDRADDRADDR
0x020x020x02ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA1DATA1DATA1
0xD20x0xD2D2DATADATADATA CRC16CRC16CRC16
0x00000x00000x0000EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x0x4B4BEOPEOPEOP
001001001
Data stage → Status stage
SiemensSiemens
Autor: Alejandro Furfaro 87
Comando: Get Configuration Descriptor
¿Como funciona el dispositivo?
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50x0xA5A5Frame#Frame#Frame#
0x1570x1570x157CRC5CRC5CRC5
0x1F0x1F0x1FEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001SETUPSETUPSETUP
0xB40x0xB4B4ADDRADDRADDR
0x020x020x02ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
Setup stage
USBUSB
DeviceDevice
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30x0xC3C3DATADATADATA
80 06 00 02 00 00 FF 0080 06 00 02 00 80 06 00 02 00 0000 FF 00FF 00CRC16CRC16CRC16
0x97250x97250x9725EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x4B0x4BEOPEOPEOP
001001001
SiemensSiemens
Autor: Alejandro Furfaro 88
SyncSync0000000100000001
DATA0DATA00xC30xC3
DATADATA80 06 00 02 00 80 06 00 02 00 0000 FF 00FF 00
CRC16CRC160x97250x9725
EOPEOP001001
SyncSync0000000100000001
ACKACK0x4B0x4B
EOPEOP001001
SyncSync0000000100000001
SETUPSETUP0xB40xB4
ADDRADDR0x020x02
ENDPENDP0x00x0
CRC5CRC50x150x15
EOPEOP001001
SyncSync0000000100000001
SOFSOF0xA50xA5
Frame#Frame#0x1570x157
CRC5CRC50x1F0x1F
EOPEOP001001
Comando: Get Configuration Descriptor
¿Como funciona el dispositivo?, detalles
DATADATADATA
02 = configuration descriptor02 = configuration descriptor
80 = 80 = dirección de transferenciadirección de transferencia, std. command , std. command 06 = get descriptor06 = get descriptor
00 = 00 = índiceíndice del descriptordel descriptor
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30xC30xC3DATADATADATA
80 06 00 02 00 00 FF 0080 06 00 02 00 80 06 00 02 00 0000 FF 00FF 00CRC16CRC16CRC16
0x97250x97250x9725EOPEOPEOP
001001001
00 00 0000 = language ID= language ID
00 = byte 00 = byte alto de los bytes a transferiralto de los bytes a transferirFF = byte FF = byte bajo de los bytes a transferirbajo de los bytes a transferir
USBUSB
DeviceDevice
SiemensSiemens
Autor: Alejandro Furfaro 89
In Request: Respuesta
Respuesta a ¿Como funciona el dispositivo?
SyncSyncSync
000000010000000100000001INININ
0x960x960x96ADDRADDRADDR
0x020x020x02ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50x0xA5A5Frame#Frame#Frame#
0x1580x1580x158CRC5CRC5CRC5
0x0F0x0F0x0FEOPEOPEOP
001001001
Data stage
USBUSB
DeviceDevice
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x4B0x4BEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA1DATA1DATA1
0xD20xD20xD2DATADATADATA
09 02 19 00 01 01 00 6009 02 19 00 01 09 02 19 00 01 0101 00 6000 60CRC16CRC16CRC16
0x50200x50200x5020EOPEOPEOP
001001001
SiemensSiemens
Autor: Alejandro Furfaro 90
SyncSync0000000100000001
DATA1DATA10xD20xD2
DATADATA09 02 19 00 01 09 02 19 00 01 0101 00 6000 60
CRC16CRC160x50200x5020
EOPEOP001001
SyncSync0000000100000001
ACKACK0x4B0x4B
EOPEOP001001
USBUSB
DeviceDevice
Respuesta a ¿Como funciona el dispositivo?, detalles
In Request: Respuesta II
SyncSync0000000100000001
ININ0x960x96
ADDRADDR0x020x02
ENDPENDP0x00x0
CRC5CRC50x150x15
EOPEOP001001
DATADATADATA
19 00 = 19 00 = longitud de los longitud de los configurationconfiguration, interface y , interface y endpoint descriptorsendpoint descriptors
09 = 09 = longitudlongitud del configuration descriptordel configuration descriptor
02 = 02 = TipoTipo del configuration descriptordel configuration descriptor
00 = 00 = índiceíndice al configuration string descriptoral configuration string descriptor
01 = 01 = nronro. de interfaces usadas en esta configuración. de interfaces usadas en esta configuración
01 = valor 01 = valor para esta configuración con para esta configuración con SetConfigurationSetConfiguration
60 = 60 = atributosatributos de la configurationde la configuration
1eros. 8 bytes del 1eros. 8 bytes del device descriptordevice descriptor
SyncSyncSync
000000010000000100000001DATA1DATA1DATA1
0xD20x0xD2D2DATADATADATA
09 02 19 00 01 01 00 6009 02 19 00 01 09 02 19 00 01 0101 00 6000 60CRC16CRC16CRC16
0x50200x50200x5020EOPEOPEOP
001001001
SiemensSiemens
Autor: Alejandro Furfaro 91
2º In Request:
Respuesta a ¿Como funciona el dispositivo?
SyncSyncSync
000000010000000100000001INININ
0x960x960x96ADDRADDRADDR
0x020x020x02ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50xA50xA5Frame#Frame#Frame#
0x1590x1590x159CRC5CRC5CRC5
0x100x100x10EOPEOPEOP
001001001
Data stage
USBUSB
DeviceDevice
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x4B0x4BEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30x0xC3C3DATADATADATA
32 09 04 00 00 01 00 0032 09 04 00 32 09 04 00 0000 01 00 01 00 0000CRC16CRC16CRC16
0x273E0x273E0x273EEOPEOPEOP
001001001
SiemensSiemens
Autor: Alejandro Furfaro 92
SyncSync0000000100000001
DATA0DATA00xC30xC3
DATADATA32 09 04 00 32 09 04 00 0000 01 00 01 00 0000
CRC16CRC160x273E0x273E
EOPEOP001001
USBUSB
DeviceDevice
Respuesta a ¿Como funciona el dispositivo?, detalles
2º In Request II
SyncSync0000000100000001
ACKACK0x4B0x4B
EOPEOP001001
SyncSync0000000100000001
ININ0x960x96
ADDRADDR0x020x02
ENDPENDP0x00x0
CRC5CRC50x150x15
EOPEOP001001
DATADATADATA
04 = 04 = TipoTipo de interface descriptorde interface descriptor
32 = 32 = ConsumoConsumo max.demax.de energía (en unidades deenergía (en unidades de 2mA)2mA)
09 = 09 = longitudlongitud del interface descriptordel interface descriptor
01 = endpoints 01 = endpoints utilizados utilizados enestaenesta interfazinterfaz
00 = 00 = númeronúmero de interfacesde interfaces
00 = 00 = ajustes alternativosajustes alternativos
00 = interface class00 = interface class
SiguientesSiguientes 8 bytes del 8 bytes del device descriptordevice descriptor
00 = interface sub class00 = interface sub class
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30xC30xC3DATADATADATA
32 09 04 00 00 01 00 0032 09 04 00 32 09 04 00 0000 01 00 01 00 0000CRC16CRC16CRC16
0x273E0x273E0x273EEOPEOPEOP
001001001
SiemensSiemens
Autor: Alejandro Furfaro 93
USBUSB
DeviceDevice
3º In RequestRespuesta a ¿Como funciona el dispositivo?, detalles
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50x0xA5A5Frame#Frame#Frame#
0x15B0x15B0x15BCRC5CRC5CRC5
0x0D0x0D0x0DEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001INININ
0x960x960x96ADDRADDRADDR
0x020x020x02ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x4B0x4BEOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA0DATA0DATA0
0xC30x0xC3C3DATADATADATA
000000CRC16CRC16CRC16
0x00000x00000x0000EOPEOPEOP
001001001
00 = 00 = intervalointervalo de de polling polling parapara interrupt interrupt
endpointsendpoints
SiemensSiemens
Autor: Alejandro Furfaro 94
USBUSB
DeviceDevice
Comando: transferencia OUT
Finaliza la etapa de datos
SyncSyncSync
000000010000000100000001SOFSOFSOF
0xA50xA50xA5Frame#Frame#Frame#
0x15C0x15C0x15CCRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001OUTOUTOUT
0x870x0x8787ADDRADDRADDR
0x020x020x02ENDPENDPENDP
0x00x00x0CRC5CRC5CRC5
0x150x150x15EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001DATA1DATA1DATA1
0xD20x0xD2D2DATADATADATA CRC16CRC16CRC16
0x00000x00000x0000EOPEOPEOP
001001001
SyncSyncSync
000000010000000100000001ACKACKACK
0x4B0x0x4B4BEOPEOPEOP
001001001
Data stage → Status stage
Siemens