universal serial bus - electron.frba.utn.edu.arafurfaro/descargas/universal serial … · velocidad...

94
Universal Serial Bus

Upload: others

Post on 30-Apr-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Universal Serial Bus

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 26

Campo PID TOKEN

IN / OUT / SETUP:

START OF FRAME:

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 37

Transferencias de Volumen (Bulk):

Formatos de Transacciones I

Autor: Alejandro Furfaro 38

Transferencias de Volumen (Bulk):

Formatos de Transacciones II

Autor: Alejandro Furfaro 39

Transferencias de Control:

Formatos de Transacciones III

Autor: Alejandro Furfaro 40

Transferencias de Control:

Formatos de Transacciones IV

Autor: Alejandro Furfaro 41

Transferencias de Interrupción:

Formatos de Transacciones V

Autor: Alejandro Furfaro 42

Transferencias Isócronas:

Formatos de Transacciones VI

Autor: Alejandro Furfaro 43

Transacciones Consecutivas:

Formatos de Transacciones VII

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