Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porgonzalo Chalo Modificado hace 7 años
1
Universal Serial Bus
2
Autor: Alejandro Furfaro2 Genealogía y alcance Genealogía Enero de 1996, versión 1.0. Velocidad 1,5 Mbps. Intel, Compaq, NEC, y Microsoft Septiembre de 1998, versión 1.1. Velocidades de 1,5 (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. Septiembre del 2000 versión 2.0 Velocidades de 1,5 (Low Speed), 12(Full Speed), o 480 Mbps (High Speed) Alcance: Nuestro estudio se centrará en la versión 1.1, tratando de introducir conceptos de 2.0.
3
Autor: Alejandro Furfaro3 Principales metas propuestas Expansión de periféricos sencilla Detección automática de un nuevo dispositivo Conexión y desconexión sin reiniciar el equipo 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.
4
Autor: Alejandro Furfaro4 HOST Hub root Hub1 Func Hub2 Func Hub3Hub4 Func Hub5 USB 1.1 USB 2.0 HOST Tier 1 Tier 2 Tier 3 Tier 4 Tier 5 Tier 6 Tier 7 Hub6Hub7 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. Arquitectura I
5
Autor: Alejandro Furfaro5 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 firmware y 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 firmware y 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. Arquitectura II HOST Hub root Hub1 Func Hub2 Func Hub3Hub4 Func Hub5 HOST Tier 1 Tier 2 Tier 3 Tier 4 Tier 5 Tier 6 Tier 7 Hub6Hub7
6
Autor: Alejandro Furfaro6 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. Funciones Son 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
7
Autor: Alejandro Furfaro7 Es posible tener varias funciones implementadas dentro de un dispositivo conectado por un único cable a un port USB. Estos son conocidos como dispositivos compuestos, y se presentan al Host Controller como un Hub con mas de un dispositivo no removible. Dispositivos USB II
8
Autor: Alejandro Furfaro8 Consideraciones adicionales Alimentación:Desde este punto de vista, los dispositivos USB trabajan en dos modos: self powered Bus powered. Velocidad:La especificación 1.1 soporta dos tipos de dispositivos: Dispositivos USB low speed, (1.5 Mbits/seg.) Dispositivos USB full speed, (12Mbits/seg). Además, garantiza la coexistencia de ambos tipos de dispositivo en el bus de manera que no existan desincronizaciones con los mismos.
9
Autor: Alejandro Furfaro9 Flujo de datos: Modelo de Implementación Function Layer Function Layer, es quien provee la interfaz entre el usuario y el dispositivo. USB Device Layer USB Device Layer es la visión que tiene el software del sistema para realizar las operaciones previstas con el dispositivo USB. USB BUS Interface USB BUS Interface Layer es la 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.
10
Autor: Alejandro Furfaro10 Modelo del USB Host
11
Autor: Alejandro Furfaro11 Modelo del Dispositvo USB A 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 Controller remoto, a nivel de señalización y transmisión física. En el USB Logical Device, la interfaz con el Host es básicamente la misma independientemente del dispositivo. Se trabaja a nivel lógico. Se dispone de un juego de funciones de interacción básicas, que son comunes a los diferentes dispositivos USB a conectar al bus. Analizando el contenido de dichas funciones se pueden recién advertir las posibles diferencias en el tratamiento a los diferentes dispositivos La Función es la capa que realiza la función esperada por el Client SW instalado en el Host.
12
Autor: Alejandro Furfaro12 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ínea GND que tiene la referencia eléctrica de tierra del sistema. VBUS, por su parte transporta 5Vcc con respecto de la línea GND que tiene la referencia eléctrica de tierra del sistema. Conexiones Cada 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.
13
Autor: Alejandro Furfaro13 Tensiones de entrada y salida Estado Bajo Estado Bajo: La tensión de salida se ubica dentro de la banda de tensiones válidas de entrada: V VILmax Estado Alto Estado Alto: La tensión de se ubica dentro de la banda de tensiones válidas de salida VIHmin V VIHmax 0,3 0,8 2,0 2,8 2,7 3,6 V VIHZmax VOHmax VOHmin VIHZmin VIHmin VILmax VOLmax VOLmin0
14
Autor: Alejandro Furfaro14 Características Eléctricas I Entrada de un port de Hub, y de un Dispositivo USB Full-speed Entrada de un port de Hub, y de un Dispositivo USB Low-speed Significa que un port desconectado “ve” 15 K. En el momento de conectar un dispositivo uno de los conductores del Bus queda a 1,5 K con respecto a una fuente de entre 3V y 3,6V. La resistencia de Thevenin (que no incluye los 15 K), no debe ser menor de 900 . Estas condiciones eléctricas establecen la forma en que se detectan las conexiones y desconexiones de dispositivos al bus.
15
Autor: Alejandro Furfaro15 Señalización al desconectar un dispositivo Señalización al conectar un dispositivo Full Speed Características Eléctricas II
16
Autor: Alejandro Furfaro16 Señalización al resetear un dispositivo Señalización al conectar un dispositivo Low Speed Características Eléctricas III
17
Autor: Alejandro Furfaro17 Características Eléctricas IV
18
Autor: Alejandro Furfaro18 Características Eléctricas V
19
Autor: Alejandro Furfaro19 Señalización de Comienzo y Fin de Paquete Características Eléctricas VI
20
Autor: Alejandro Furfaro20 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
21
Autor: Alejandro Furfaro21 Se dispone de un flujo de comunicación dedicado entre cada aplicación y la correspondiente Función en el dispositivo. Así, una Función de un dispositivo puede tener diferentes flujos de comunicaciones con diferentes aplicaciones que la requieran. En el dispositivo USB, el flujo de comunicación termina en un Endpoint. Host Controller Driver : Interfacea al USB Host Controller con el USB System Software. Garantiza que el USB System Software, pueda interactuar con toda la variedad de implementaciones de Hardware que se pueda encontrar. USB Driver (USBD) : Interfacea al USB System Software con la aplicación cliente ( Client SW ) permitiéndoles a éstas el manejo del dispositivo USB Flujo de Información en USB I
22
Autor: Alejandro Furfaro22 Un dispositivo USB se presenta al sistema como una colección de Endpoints. Estos Endpoints a su vez se agrupan formando Interfaces. Las Interfaces 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 II
23
Autor: Alejandro Furfaro23 Endpoints I Es la porción identificable de un dispositivo USB que representa el 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 Endpoints independientes 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.
24
Autor: Alejandro Furfaro24 Endpoints II Características de un Endpoint que deben ser conocidas por el Software Cliente a fin de interactuar con él de manera correcta: Número de identificación Dirección de transferencia de datos Tipo de transferencia que soporta. Frecuencia o tiempo de demora en el acceso al bus. Ancho de Banda requerido. Comportamiento en el manejo de errores. Tamaño máximo del paquete de datos que puede transaccionar.
25
Autor: Alejandro Furfaro25 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.
26
Autor: Alejandro Furfaro26 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: Stream: Transmiten datos sin una estructura USB definida y en modo First-In First-Out. Siempre son unidireccionales. 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.
27
Autor: Alejandro Furfaro27 Pipes II Para cursar una transferencia un pipe requiere que se defina: Demanda del bus USB y ancho de banda requerido. Tipo de transferencia 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.
28
Autor: Alejandro Furfaro28 START OF FRAME Dispositivo 1 Endpoint 3 Dispositivo 2 Endpoint 1 Dispositivo 6 Endpoint 2 Sin utilizar START OF FRAME Dispositivo 1 Endpoint 3 Dispositivo 4 Endpoint 1Dispositivo 3 Endpoint 2 Sin utilizar Dispositivo 2 Endpoint 2 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 se están ejecutando en el Host.
29
Autor: Alejandro Furfaro29 Cada Transferencia comprende una o mas transacciones Cada Transacción contiene un paquete Token, y 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 1Transferencia 2Transferencia 3 Transacción 1Transacción 2Transacción 3 TokenDatosHandshake PIDInfo. AdicionalCRC Transacciones
30
Autor: Alejandro Furfaro30 Paquetes I Los paquetes se dividen en diversos campos. Algunos son opcionales y otros obligatorios. 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. Los paquetes Token Data y Handshake se representarán en formato no codificado. Sin embargo, no debe perderse de vista que se trata de paquetes que se transmiten por el bus con codificación NRZI, y Bit Stuffing.
31
Autor: Alejandro Furfaro31 Campo PID (Packet Identifier): Se compone de cuatro bits que identifican el tipo de paquete en cuestión, seguido de cuatro bits de chequeo de errores de Tx. Tiene por función identificar que tipo de paquete se está cursando por el bus. En el siguiente cuadro se muestran los diferentes valores que puede tomar para cada tipo de paquete que viaja por el Bus. Los valores corresponden a los 4 LSBs. PID Info. AdicionalCRC Paquetes II
32
Autor: Alejandro Furfaro32 Paquetes III
33
Autor: Alejandro Furfaro33 Paquetes IV Formato de los Paquetes TOKEN IN / OUT / SETUP: START OF FRAME:
34
Autor: Alejandro Furfaro34 ACK : Indica que el paquete fue recibido sin error, y que puede enviar el siguiente. NACK : Indica que el paquete fue recibido sin error, pero que por condición del extremo receptor se debe retransmitir el paquete (Ej: Buffer Full). STALL : Indica que 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 Paquetes V Formato de los Paquetes DATA DATA0 / DATA1: Formato de los paquetes HANDSHAKE:
35
Autor: Alejandro Furfaro35 Campo de Información Adicional: Cuando las transacciones llevan como PID los códigos 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 (Addr 0-6), y 16 Endpoints (Endp 0- 3), para transacciones IN y otros 16 para transacciones OUT. Cada frame que se transmite por el bus tiene un paquete SOF en el que se incluye 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. PIDInfo. AdicionalCRC Paquetes VI
36
Autor: Alejandro Furfaro36 PIDInfo. Adicional CRC Paquetes VII Chequeos de Redundancia Cíclica: Controlan todos los campos no PID en los paquetes Token y Datos de modo de asegurar su integridad. El PID se autochequea al transmitir los bits en formato nativo y en complemento a 1. 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
37
Autor: Alejandro Furfaro37 Tipos de Transferencias I Cada tipo de transferencia determina características importantes del flujo de información involucrado. Entre otras contamos las siguientes: Formato de datos impuesto por el USB. Dirección del flujo de comunicaciones. Restricciones en el tamaño del paquete de datos a transmitir. Restricciones en el acceso al bus. Restricciones en el tiempo de recuperación de datos. Secuencias de datos requeridas. Manejo de errores.
38
Autor: Alejandro Furfaro38 Tipos de Transferencias II Transferencias de control: Son comunicaciones por irrupción, no periódicas, iniciadas por el host, que se utilizan en operaciones de comando o status. 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.
39
Autor: Alejandro Furfaro39 Transferencias de Interrupción: Son comunicaciones de baja frecuencia, para tamaños de paquete de datos muy pequeños, y tiempo de recuperación de datos limitado. Transferencias de volumen (bulk): 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. Tipos de Transferencias III
40
Autor: Alejandro Furfaro40 Tipos de Transferencias IV Tipo de TransferenciaControlBulkInterrupciónIsócrona Uso típico Configuración Impresora, scanner Mouse, TecladoAudio Obligatoria SiNo Soportada por dispositivos Low Speed Corrección de errores Tipo de pipe MessageStream 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 byteshasta 1023 bytes Tamaño de datos por Endpoint (Low Speed) 8 bytes No aplica Ancho de banda reservado por frame 10%Ninguno90 % (ambas combinadas) No SiNoSiNo Si No Stream No Si No Si 8, 16, 32, ó 64 bytes 8 bytes No aplica
41
Autor: Alejandro Furfaro41 Transferencias de Volumen (Bulk) : Formatos de Transacciones I
42
Autor: Alejandro Furfaro42 Transferencias de Volumen (Bulk) : Formatos de Transacciones II
43
Autor: Alejandro Furfaro43 Transferencias de Control : ormatos de Transacciones III
44
Autor: Alejandro Furfaro44 Transferencias de Control : Formatos de Transacciones IV
45
Autor: Alejandro Furfaro45 Transferencias de Interrupción : Formatos de Transacciones V
46
Autor: Alejandro Furfaro46 Transferencias Isócronas : Formatos de Transacciones VI
47
Autor: Alejandro Furfaro47 Transacciones Consecutivas : Formatos de Transacciones VII
48
Autor: Alejandro Furfaro48 Uso del Ancho de Banda I
49
Autor: Alejandro Furfaro49 Uso del Ancho de Banda II
50
Autor: Alejandro Furfaro50 Uso del Ancho de Banda III
51
Autor: Alejandro Furfaro51 Uso del Ancho de Banda IV
52
Autor: Alejandro Furfaro52 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.
53
Autor: Alejandro Furfaro53 Estados durante la Enumeración En la secuencia de Enumeración, el dispositivo puede tomar seis estados posibles: Attached Suspended Powered Default Addressed Configured Attached PoweredSuspended Suspended Suspended Suspended Default Addressed Configured Hub Reseteado O Desconfigurado Hub HubConfigurado Actividad en el Bus BusInactivo Actividad BusInactivo Actividad BusInactivo Actividad BusInactivo Reset DirecciónAsignada DispositivoConfiguraadoDispositivoDesConfiguraado Reset Corte de Alimentación
54
Autor: Alejandro Furfaro54 Pasos en la Enumeración I El usuario conecta el dispositivo a un port de un Hub (Hub root o cualquier hub externo). Attached El dispositivo toma su estado inicial:Attached. Si el Hub está operativo y no está siendo reseteado, alimenta al dispositivo automáticamente, si éste es Bus Powered. Powered El dispositivo pasa al estado Powered. Powered Si el dispositivo es Self Powered al attacharse directamente entra al estado Powered. El Hub detecta al dispositivo. 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. Powered El dispositivo sigue en estado Powered El hub no transmite nada al bus.
55
Autor: Alejandro Furfaro55 Pasos en la Enumeración II El Host controller encuesta a los hubs para saber si tienen eventos que reportar. Cada Hub utiliza un pipe configurado para transferencias de interrupción para reportar eventos al Host controller. 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. 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. El Hub reponde este comando de acuerdo a lo establecido en la especificación. El Host Controller accede a la información completa acera del evento.
56
Autor: Alejandro Furfaro56 Pasos en la Enumeración III El Hub resetea al dispositivo. Leída la información del port attachado, el Host envía al Hub el comando Set_Port_Feature. En dicho comando utiliza la opción que le permite solicitar al hub el reset del port. 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. 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. Según su diseño el Hub puede efectuar esta comprobación antes del Reset o inmediatamente después del mismo.
57
Autor: Alejandro Furfaro57 Pasos en la Enumeración IV El Host establece un path de señal entre el dispositivo y el bus. Envía al Hub el comando Get_Port_Status para verificar que el dispositivo finalizó el reset. 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) Default Cuando esto ocurre, el dispositivo está en estado Default: 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.
58
Autor: Alejandro Furfaro58 Pasos en la Enumeración V El Host averigua el tamaño máximo de paquete soportado por el default control pipe. 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. El Host enumera solo un dispositivo a la vez, así que no hay forma que otro dispositivo responda. 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.
59
Autor: Alejandro Furfaro59 Pasos en la Enumeración VI El Host asigna una dirección. Envía el requerimiento Set_Address, con la dirección que le asigna al dispositivo. El dispositivo lo lee, devuelve ACK, y almacena su dirección. Addressed Ahora está en el estado Addressed. La dirección asignada es válida hasta que el dispositivo se desconecte, apague, o resetee.
60
Autor: Alejandro Furfaro60 Pasos en la Enumeración VII El Host lee las características del dispositivo. Envía el requerimiento Get_Descriptor Endpoint 0 del dispositivo. Dirección de port: la que termina de asignar Descriptor de dispositivo. El dispositivo devuelve su Device Descriptor. Contiene la cantidad de configuraciones, interfaces, y endpoints que el dispositivo tiene definidos. Los detalles de estos elementos se encuentran en los respectivos descriptores almacenados en el dispositivo. Por cada configuración informada, el host controller envía un Get_Descriptor al dispositivo Port y Endpoint, ídem anterior Descriptor de Configuración. El dispositivo responde el requerimiento. Descriptor de la configuración requerida Descriptores de interfaz que dependen de esta configuración Descriptores de endpoint que dependen de cada interfaz Descriptores de string si los hubiera
61
Autor: Alejandro Furfaro61 Pasos en la Enumeración VIII El Host carga un Device Driver. 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. 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. Comando Set_Configuration. Configured El dispositivo está ahora en el estado Configured. El dispositivo está listo para ser utilizado.
62
Autor: Alejandro Furfaro62 Descriptor de Dispositivo
63
Autor: Alejandro Furfaro63 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. */ };
64
Autor: Alejandro Furfaro64 Descriptor de Configuración
65
Autor: Alejandro Furfaro65 Interface Descriptor
66
Autor: Alejandro Furfaro66 Descriptor de Endpoint
67
Autor: Alejandro Furfaro67 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
68
Autor: Alejandro Furfaro68 Descriptor de String
69
Autor: Alejandro Furfaro69 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
70
Autor: Alejandro Furfaro70 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 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
71
Autor: Alejandro Furfaro71 Requerimientos Standard
72
Autor: Alejandro Furfaro72 Códigos para Requerimientos y Tipos Standard
73
73Autor: Alejandro Furfaro USB USB Device Device Comando Get descriptor ¿Quien sos? SyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x0DD0x0DD CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 SETUPSETUP 0xB4 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x080x08 EOPEOP 001001 SyncSync 0000000100000001 DATA0DATA0 0xC3 DATADATA 80 06 00 01 00 00 40 00 CRC16CRC16 0xBB290xBB29 EOPEOP 001001 SyncSync 0000000100000001 ACKACK 0x4B EOPEOP 001001 Setup stage
74
74Autor: Alejandro Furfaro Sync 00000001 SOF 0xA5 Frame# 0x0DD CRC5 0x15 EOP 001 Sync 00000001 SETUP 0xB4 ADDR 0x00 ENDP 0x0 CRC5 0x08 EOP 001 Sync 00000001 DATA0 0xC3 DATA 80 06 00 01 00 00 40 00 CRC16 0xBB29 EOP 001 Sync 00000001 ACK 0x4B EOP 001 Start Of Frame...se genera cada 1 mseg. SyncSync 0000000100000001 Packet start indica “llegando paquete” al transceiver SOFSOF 0xA5 Start of Frame (uno por milisegundo) Frame#Frame# 0x0DD0x0DD Número de Frame (0 - 2047) cíclico CRC5CRC5 0x150x15 5 bit Checksum sobre Frame# EOPEOP 001001 End of Packet (D+ and D- bajas) Setup stage USB USB Device Device
75
75Autor: Alejandro Furfaro Sync 00000001 SETUP 0xB4 ADDR 0x00 ENDP 0x0 CRC5 0x08 EOP 001 Sync 00000001 DATA0 0xC3 DATA 80 06 00 01 00 00 40 00 CRC16 0xBB29 EOP 001 Sync 00000001 ACK 0x4B EOP 001 Paquetes Setup Se decodifican los Paquetes Setup completos y se generan las interrupciones SyncSync 0000000100000001 SETUPSETUP 0xB4 Setup Packet (comienza transf. de control) ADDRADDR 0x000x00 Addr 0 (define direc. para cada nuevo disp. attachado) Sync 00000001 SOF 0xA5 Frame# 0x0DD CRC5 0x15 EOP 001 ENDPENDP 0x00x0 Endpoint 0 (usado para configuración) CRC5CRC5 0x080x08 EOPEOP 001001 Setup stage USB USB Device Device
76
76Autor: Alejandro Furfaro Sync 00000001 DATA0 0xC3 DATA 80 06 00 01 00 00 40 00 CRC16 0xBB29 EOP 001 Sync 00000001 ACK 0x4B EOP 001 Paquete Data El Paquete Data define que clase de transferencia setup se inicia Sync 00000001 SETUP 0xB4 ADDR 0x00 ENDP 0x0 CRC5 0x08 EOP 001 SyncSync 0000000100000001 DATA0DATA0 0xC3 DATADATA DATADATA 80 06 00 01 00 00 40 00 01 = device descriptor 01 = device descriptor 80 = dirección de transferencia, comando std. 80 = dirección de transferencia, comando std. 06 = get descriptor 06 = get descriptor 00 = índice del descriptor 40 00 = cantidad de bytes requeridos por el host (formato little endian; Lowbyte, Highbyte) 40 00 = cantidad de bytes requeridos por el host (formato little endian; Lowbyte, Highbyte) Get device descriptor genera una interrupción Get device descriptor genera una interrupción 00 00 = language ID CRC16CRC16 0xBB290xBB29 EOPEOP 001001 Setup stage USB USB Device Device
77
77Autor: Alejandro Furfaro USB USB Device Device ACKnowledged Cada transferencia de control debe ser reconocida (ACKnowledged) SyncSync 0000000100000001 ACKACK 0x4B Acknowledge Packet EOPEOP 001001 SyncSync 0000000100000001 SOFSOF 0xA50xA5 Frame#Frame# 0x0DD0x0DD CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 SETUPSETUP 0xB4 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x080x08 EOPEOP 001001 SyncSync 0000000100000001 DATA0DATA0 0xC3 DATADATA 80 06 00 01 00 00 40 00 CRC16CRC16 0xBB290xBB29 EOPEOP 001001 Setup stage
78
78Autor: Alejandro Furfaro USB USB Device Device ACKnowledged IISyncSync 0000000100000001 ACKACK 0x4B Acknowledge Packet SyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x0DD0x0DD CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 SETUPSETUP 0xB4 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x080x08 EOPEOP 001001 SyncSync 0000000100000001 DATA0DATA0 0xC30xC3 DATADATA 80 06 00 01 00 00 40 00 CRC16CRC16 0xBB290xBB29 EOPEOP 001001 EOPEOP 001001 Setup stage
79
79Autor: Alejandro Furfaro SyncSync 0000000100000001 ACKACK 0x4B EOPEOP 001001 Paquete IN/OUT Cada transferencia de Datos será iniciada por el host (PC) con un Paquete IN/OUT SyncSync 0000000100000001 ININ 0x960x96 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x80x8 EOPEOP 001001 SyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x0DE0x0DE CRC5CRC5 0x170x17 EOPEOP 001001 Data stage USB USB Device Device SyncSync 0000000100000001 DATA1DATA1 0xD2 DATADATA 12 01 00 01 00 00 00 08 CRC16CRC16 0xC8E70xC8E7 EOPEOP 001001 Data In Packet (Host requiere datos del dispositivo)
80
80Autor: Alejandro Furfaro Sync 00000001 DATA1 0xD2 DATA 12 01 00 01 00 00 00 08 CRC16 0xC8E7 EOP 001 Sync 00000001 ACK 0x4B EOP 001 USB USB Device Device Paquetes de DatosSync 00000001 IN 0x96 ADDR 0x00 ENDP 0x0 CRC5 0x8 EOP 001 DATADATA 12 = longitud del device descriptor 12 = longitud del device descriptor 01 = Tipo de device descriptor 01 = Tipo de device descriptor SyncSync 0000000100000001 DATA1DATA1 0xD2 DATADATA 12 01 00 01 00 00 00 08 CRC16CRC16 0xC8E70xC8E7 EOPEOP 001001 00 = Device Protocol 00 = Device Protocol 00 = Device Class 00 = Device Sub Class 00 = Device Sub Class 08 = Tamaño Max. de paquete del endpoint 0 08 = Tamaño Max. de paquete del endpoint 0 1eros. 8 bytes del device descriptor 01 = byte alto de especificación USB 01 = byte alto de especificación USB 00 = byte bajo de especificación USB V 01.00 } Data stage
81
81Autor: Alejandro Furfaro USB USB Device Device Fin de la Etapa de DatosSyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x0E00x0E0 CRC5CRC5 0x0E0x0E EOPEOP 001001 SyncSync 0000000100000001 OUTOUT 0x87 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x080x08 EOPEOP 001001 SyncSync 0000000100000001 DATA1DATA1 0xD2 DATADATACRC16CRC16 0x00000x0000 EOPEOP 001001 SyncSync 0000000100000001 ACKACK 0x4B EOPEOP 001001 Paquete de datos vacío indica fin de la etapa de datos Paquete Data Out (El Host aborta la etapa de datos) Data stage Status stage
82
82Autor: Alejandro Furfaro Reset desde el Host (10ms) Reset iniciado por el host RESETRESET 128160128160 USB USB Device Device
83
83Autor: Alejandro Furfaro SyncSync 0000000100000001 ACKACK 0x4B EOPEOP 001001 Comando: Set Address Desde ahora te llamás Nº2 SyncSync 0000000100000001 SETUPSETUP 0xB4 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x080x08 EOPEOP 001001 SyncSync 0000000100000001 DATA0DATA0 0xC3 DATADATA 00 05 02 00 00 00 00 00 CRC16CRC16 0xD7680xD768 EOPEOP 001001 DATADATA 02 = device address nr. 2 00 = dirección host- dispositivo, std. command, receptor el dispositivo 05 = set address 05 = set address 00 00 00 00 00 = default SyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x1430x143 CRC5CRC5 0x040x04 EOPEOP 001001 USB USB Device Device
84
84Autor: Alejandro Furfaro USB USB Device Device Fin de la etapa de DatosSyncSync 0000000100000001 SOFSOF 0xA50xA5 Frame#Frame# 0x1440x144 CRC5CRC5 0x080x08 EOPEOP 001001 SyncSync 0000000100000001 ININ 0x960x96 ADDRADDR 0x000x00 ENDPENDP 0x00x0 CRC5CRC5 0x080x08 EOPEOP 001001 SyncSync 0000000100000001 ACKACK 0x4B EOPEOP 001001 SyncSync 0000000100000001 DATA1DATA1 0xD2 DATADATACRC16CRC16 0x00000x0000 EOPEOP 001001 Paquete de datos vacío desde el dispositivo. Data stage Status stage
85
85Autor: Alejandro Furfaro Get Descriptor al Dispositivo Nº 2 ¿Que sos? SyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x1510x151 CRC5CRC5 0x1E0x1E EOPEOP 001001 SyncSync 0000000100000001 SETUPSETUP 0xB4 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP 001001 Setup stage USB USB Device Device SyncSync 0000000100000001 DATA0DATA0 0xC3 DATADATA 80 06 00 01 00 00 12 00 CRC16CRC16 0x072F0x072F EOPEOP 001001 SyncSync 0000000100000001 ACKACK 0x4B0x4B EOPEOP 001001 El dispositivo es accedido como Nº2 El dispositivo es accedido como Nº2
86
86Autor: Alejandro Furfaro Sync 00000001 DATA0 0xC3 DATA 80 06 00 01 00 00 12 00 CRC16 0x072F EOP 001 Sync 00000001 ACK 0x4B EOP 001 Sync 00000001 SETUP 0xB4 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 Sync 00000001 SOF 0xA5 Frame# 0x151 CRC5 0x1E EOP 001 Get Descriptor del Dispositivo Nº 2 II ¿Que sos?, detalles DATADATA 01 = device descriptor 01 = device descriptor 80 = dirección de transferencia, std. command 80 = dirección de transferencia, std. command 06 = get descriptor 06 = get descriptor 00 = índice del descriptor 12 00 = bytes a 12 00 = bytes a transferir 00 00 = language ID SyncSync 0000000100000001 DATA0DATA0 0xC30xC3 DATADATA 80 06 00 01 00 00 12 00 CRC16CRC16 0x072F0x072F EOPEOP 001001 Setup stage USB USB Device Device
87
87Autor: Alejandro Furfaro IN request Obtiene datos del dispositivo SyncSync 0000000100000001 ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x1520x152 CRC5CRC5 0x1C0x1C EOPEOP 001001 Data stage USB USB Device Device SyncSync 0000000100000001 ACKACK 0x4B EOPEOP 001001 SyncSync 0000000100000001 DATA1DATA1 0xD2 DATADATA 12 01 00 01 00 00 00 08 CRC16CRC16 0xC8E70xC8E7 EOPEOP 001001
88
88Autor: Alejandro Furfaro Sync 00000001 ACK 0x4B EOP 001 Sync 00000001 IN 0x96 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 Sync 00000001 DATA1 0xD2 DATA 12 01 00 01 00 00 00 08 CRC16 0xC8E7 EOP 001 USB USB Device Device IN request II Detalles (obtiene datos de descripción del dispositivo) DATADATA 12 = longitud del device descriptor 12 = longitud del device descriptor 01 = Tipo device descriptor 01 = Tipo device descriptor 01 = byte alto dela especificación USB 01 = byte alto dela especificación USB 00 = byte bajo de la especificación USB 00 = Device Protocol 00 = Device Protocol 00 = Device Class 00 = Device Sub Class 00 = Device Sub Class 08 = Tamaño Max. De paquete del endpoint 0 08 = Tamaño Max. De paquete del endpoint 0 1eros. 8 bytes del device descriptor SyncSync 0000000100000001 DATA1DATA1 0xD20xD2 DATADATA 12 01 00 01 00 00 00 08 CRC16CRC16 0xC8E70xC8E7 EOPEOP 001001 Data stage
89
89Autor: Alejandro Furfaro 2 º IN request Obtiene datos del dispositivo SyncSync 0000000100000001 ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 SOFSOF 0xA50xA5 Frame#Frame# 0x1530x153 CRC5CRC5 0x030x03 EOPEOP 001001 Data stage USB USB Device Device SyncSync 0000000100000001 ACKACK 0x4B EOPEOP 001001 SyncSync 0000000100000001 DATA0DATA0 0xC30xC3 DATADATA 8B 05 41 C5 01 00 00 00 CRC16CRC16 0x86DB0x86DB EOPEOP 001001
90
90Autor: Alejandro Furfaro Sync 00000001 DATA0 0xC3 DATA 8B 05 41 C5 01 00 00 00 CRC16 0x86DB EOP 001 USB USB Device Device 2º IN request II Detalles. Se transfieren los datos específicos a la PC Sync 00000001 ACK 0x4B EOP 001 Sync 00000001 IN 0x96 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 DATADATA C5 = byte alto del product ID 41 = byte bajo del product ID 00 = índice para string descriptor del fabricante 00 = índice para string descriptor del fabricante 01 = byte bajo del devicenumber 00 = byte alto del device number 00 = índice al string descriptor del producto siguientes 8 bytes del device descriptor SyncSync 0000000100000001 DATA0DATA0 0xC3 DATADATA 8B 05 41 C5 01 00 00 00 CRC16CRC16 0x86DB0x86DB EOPEOP 001001 8B = byte bajo del vendor ID 05 = byte alto del vendor ID
91
91Autor: Alejandro Furfaro Sync 00000001 SOF 0xA5 Frame# 0x154 CRC5 0x1D EOP 001 Sync 00000001 IN 0x96 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 Sync 00000001 DATA1 0xD2 DATA 00 01 CRC16 0xFCF1 EOP 001 Sync 00000001 ACK 0x4B EOP 001 USB USB Device Device 3º IN request Se transfiere el resto SyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x1540x154 CRC5CRC5 0x1D0x1D EOPEOP 001001 SyncSync 0000000100000001 ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 DATA1DATA1 0xD20xD2 DATADATA 00 01 CRC16CRC16 0xFCF10xFCF1 EOPEOP 001001 DATADATA 00 = índice al string descriptor del número de serie 01 = número de configuraciones Data stage
92
92Autor: Alejandro Furfaro USB USB Device Device Comando: OUT transfer Paquete de datos vacío Finaliza la etapa de datos SyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x1550x155 CRC5CRC5 0x020x02 EOPEOP 001001 SyncSync 0000000100000001 OUTOUT 0x87 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 DATA1DATA1 0xD2 DATADATACRC16CRC16 0x00000x0000 EOPEOP 001001 SyncSync 0000000100000001 ACKACK 0x4B EOPEOP 001001 Data stage Status stage
93
93Autor: Alejandro Furfaro Comando: Get Configuration Descriptor ¿Como funciona el dispositivo? SyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x1570x157 CRC5CRC5 0x1F0x1F EOPEOP 001001 SyncSync 0000000100000001 SETUPSETUP 0xB4 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP 001001 Setup stage USB USB Device Device SyncSync 0000000100000001 DATA0DATA0 0xC3 DATADATA 80 06 00 02 00 00 FF 00 CRC16CRC16 0x97250x9725 EOPEOP 001001 SyncSync 0000000100000001 ACKACK 0x4B0x4B EOPEOP 001001
94
94Autor: Alejandro Furfaro Sync 00000001 DATA0 0xC3 DATA 80 06 00 02 00 00 FF 00 CRC16 0x9725 EOP 001 Sync 00000001 ACK 0x4B EOP 001 Sync 00000001 SETUP 0xB4 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 Sync 00000001 SOF 0xA5 Frame# 0x157 CRC5 0x1F EOP 001 Comando: Get Configuration Descriptor ¿Como funciona el dispositivo?, detalles DATADATA 02 = configuration descriptor 02 = configuration descriptor 80 = dirección de transferencia, std. command 80 = dirección de transferencia, std. command 06 = get descriptor 06 = get descriptor 00 = índice del descriptor SyncSync 0000000100000001 DATA0DATA0 0xC30xC3 DATADATA 80 06 00 02 00 00 FF 00 CRC16CRC16 0x97250x9725 EOPEOP 001001 00 00 = language ID 00 00 = language ID 00 = byte alto de los bytes a transferir FF = byte bajo de los bytes a transferir USB USB Device Device
95
95Autor: Alejandro Furfaro In Request: Respuesta Respuesta a ¿Como funciona el dispositivo? SyncSync 0000000100000001 ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x1580x158 CRC5CRC5 0x0F0x0F EOPEOP 001001 Data stage USB USB Device Device SyncSync 0000000100000001 ACKACK 0x4B0x4B EOPEOP 001001 SyncSync 0000000100000001 DATA1DATA1 0xD20xD2 DATADATA 09 02 19 00 01 01 00 60 CRC16CRC16 0x50200x5020 EOPEOP 001001
96
96Autor: Alejandro Furfaro Sync 00000001 DATA1 0xD2 DATA 09 02 19 00 01 01 00 60 CRC16 0x5020 EOP 001 Sync 00000001 ACK 0x4B EOP 001 USB USB Device Device In Request: Respuesta II Respuesta a ¿Como funciona el dispositivo?, detalles Sync 00000001 IN 0x96 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 DATADATA 19 00 = longitud de los configuration, interface y endpoint descriptors 09 = longitud del configuration descriptor 02 = Tipo del configuration descriptor 00 = índice al configuration string descriptor 00 = índice al configuration string descriptor 01 = nro. de interfaces usadas en esta configuración 01 = valor para esta configuración con SetConfiguration 60 = atributos de la configuration 1eros. 8 bytes del device descriptor SyncSync 0000000100000001 DATA1DATA1 0xD2 DATADATA 09 02 19 00 01 01 00 60 CRC16CRC16 0x50200x5020 EOPEOP 001001
97
97Autor: Alejandro Furfaro 2º In Request: Respuesta a ¿Como funciona el dispositivo? SyncSync 0000000100000001 ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 SOFSOF 0xA50xA5 Frame#Frame# 0x1590x159 CRC5CRC5 0x100x10 EOPEOP 001001 Data stage USB USB Device Device SyncSync 0000000100000001 ACKACK 0x4B0x4B EOPEOP 001001 SyncSync 0000000100000001 DATA0DATA0 0xC3 DATADATA 32 09 04 00 00 01 00 00 CRC16CRC16 0x273E0x273E EOPEOP 001001
98
98Autor: Alejandro Furfaro Sync 00000001 DATA0 0xC3 DATA 32 09 04 00 00 01 00 00 CRC16 0x273E EOP 001 USB USB Device Device 2º In Request II Respuesta a ¿Como funciona el dispositivo?, detalles Sync 00000001 ACK 0x4B EOP 001 Sync 00000001 IN 0x96 ADDR 0x02 ENDP 0x0 CRC5 0x15 EOP 001 DATADATA 04 = Tipo de interface descriptor 32 = Consumo max.de energía (en unidades de 2mA) 09 = longitud del interface descriptor 01 = endpoints utilizados enesta interfaz 00 = número de interfaces 00 = ajustes alternativos 00 = interface class Siguientes 8 bytes del device descriptor 00 = interface sub class SyncSync 0000000100000001 DATA0DATA0 0xC30xC3 DATADATA 32 09 04 00 00 01 00 00 CRC16CRC16 0x273E0x273E EOPEOP 001001
99
99Autor: Alejandro Furfaro USB USB Device Device 3º In Request Respuesta a ¿Como funciona el dispositivo?, detalles SyncSync 0000000100000001 SOFSOF 0xA5 Frame#Frame# 0x15B0x15B CRC5CRC5 0x0D0x0D EOPEOP 001001 SyncSync 0000000100000001 ININ 0x960x96 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 ACKACK 0x4B0x4B EOPEOP 001001 SyncSync 0000000100000001 DATA0DATA0 0xC3 DATADATA 0000 CRC16CRC16 0x00000x0000 EOPEOP 001001 00 = intervalo de polling para interrupt endpoints
100
100Autor: Alejandro Furfaro USB USB Device Device Comando: transferencia OUT Finaliza la etapa de datos SyncSync 0000000100000001 SOFSOF 0xA50xA5 Frame#Frame# 0x15C0x15C CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 OUTOUT 0x87 ADDRADDR 0x020x02 ENDPENDP 0x00x0 CRC5CRC5 0x150x15 EOPEOP 001001 SyncSync 0000000100000001 DATA1DATA1 0xD2 DATADATACRC16CRC16 0x00000x0000 EOPEOP 001001 SyncSync 0000000100000001 ACKACK 0x4B EOPEOP 001001 Data stage Status stage
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.