Está en la página 1de 3

Capacitacin en Electrnica

Nota Tcnica USB


viernes, 13 de mayo de 2011 Modificado el jueves, 26 de mayo de 2011

Nociones Bsicas de Transferencias sobre el USB. Una transferencia se puede definir como el conjunto global de los datos que forman una comunicacin USB, una transferencia est formada a su vez por una o varias transacciones que a su vez estn formadas por diferentes paquetes de datos que contienen las tramas de una comunicacin USB. No existe un formato nico de transferencia, la especificacin USB permite cuatro tipos de transferencias: Control: Se utilizan para configurar y enviar comandos, por ejemplo en la enumeracin del dispositivo, ms adelante veremos lo que es esto. Bulk (masivas): Se utilizan cuando se precisa una transferencia de datos grande, es el tipo ms rpido de transferencia, sin embargo no hay garanta de que los datos se transmitan en un tiempo determinado (no garantizada la latencia). Si hay verificacin de que los datos se han transmitido con xito ya que dispone de sistema de correccin de errores (CRC), esta transferencia solo la pueden utilizar dispositivos que soporten velocidades Full y High Speed. Este tipo de transferencia es utilizada por dispositivos como por ejemplo: discos duros, pen drivers, escaners, impresoras, etc. Iscronas: Es usada en dispositivos que transmiten seales de audio y de vdeo en tiempo real. Se garantiza una tasa de velocidad de transmisin determinada (latencia asegurada). Si no fuera as, por ejemplo en una transmisin de voz el audio se oira entrecortado. No contempla la correccin de errores, si en un archivo de sonido se pierde un BIT, no es importante su recuperacin. Para usar este tipo de transferencia es necesario que los dispositivos soporten velocidades Full Speed. interrupcin: Latencia asegurada y verificacin de que los datos se han transmitido con xito, Se utiliza en dispositivos como: Teclados, Mouse, Sensores, Pantallas tctiles, y dispositivos que no requieran mucho ancho de banda. Los dispositivos usan uno o ms tipos de transferencia pero la de control es utilizada siempre por todos los dispositivos en el proceso de enumeracin. Si se utiliza otra transferencia habr que hacerlo en funcin del tipo y cantidad de datos a transmitir. Que es la enumeracin. El Host es el encargado de detectar cualquier dispositivo que se conecta al bus. Cuando un dispositivo es detectado el Host necesita obtener informacin sobre el, a este proceso es al que se le llama enumeracin. Esta informacin que necesita el Host se encuentra definida en el dispositivo en los llamados descriptores. Los descriptores son una parte importante del firmware de la aplicacin y contienen la siguiente informacin: El ID del vendedor (VID) y del producto (PID), consumo de corriente del dispositivo, tipo de transferencia que se va ha utilizar, endpoint utilizados, versin USB soportada, clase utilizada, etc. El VID y PID. Son dos nmeros de 16 bits representados en Hexadecimal, si utilizamos por ejemplo la clase CDC (Communications Device Class) podemos cambiar estos valores en determinados archivos del proyecto (firmware del microcontrolador) y tambin en el archivo xx.inf, pero esto lo veremos ms adelante. Realmente el modificar estos valores solo es til si queremos distribuir nuestro producto de forma comercial, en ese caso existe una organizacin llamada USB Implementers Forum que se encarga de proporcionarnos previo pago correspondiente un VID valido para que nuestro dispositivo conviva sin problemas con el resto de dispositivos USB del mercado, adems tendremos derecho a poner el logo USB en nuestro producto certificando de esta manera que ha pasado los controles pertinentes y cumple con el estndar USB. Todo esto es similar al proceso que se sigue a la hora de obtener una direccin MAC en una tarjeta de red. Si esto no estuviera regulado tal y como est y cada dispositivo tuviera el VID y PID que quisiera, cuando coincidieran en un mismo sistema dos nmeros iguales se presentara un conflicto de hardware y ambos dispositivos dejaran de funcionar. Que es un Endpoint. Los endpoint son simplemente buffer de memoria RAM que son utilizados para el envo y recepcin de datos o comandos de control durante una comunicacin USB. Cada endpoint puede ser de entrada o salida de datos o bidireccional, el endpoint 0 est reservado para comandos de control, el proceso de enumeracin se realiza a travs del endpoint 0. Este concepto solo se aplica al dispositivo (el microcontrolador), en el host existen tambin buffer para el envo y recepcin de datos pero no se les denomina con este nombre. Que es un Pipe o Tubera. Es una conexin lgica entre un endpoint y el software controlador del host que se produce tras el proceso de enumeracin. Los Pipes se usan mucho en Sistemas Operativos como UNIX/LINUX para enlazar la salida de un proceso con la entrada de otro, en este caso el concepto es el mismo. Que es una clase. Una clase es un modelo o plantilla que describe el estado y el comportamiento de los objetos que la comparten. La clase provee de propiedades y funciones reutilizables por los objetos o miembros que comparten la clase. La especificacin USB provee de propiedades y funciones que pueden ser utilizadas por los dispositivos que tengan caractersticas similares. Por ejemplo, un teclado y un ratn por sus caractersticas pertenecern a la misma clase la llamada Human Interface Device (HID), pues bien si yo diseo el firware de un dispositivo con las especificaciones que me exige esta clase podr beneficiarme de esas propiedades y funciones comunes a la clase, una ventaja de utilizar esta clase por ejemplo es que no se necesita instalar ningn driver para el dispositivo ya que el sistema operativo utilizar uno genrico para todos. La especificacin USB provee de muchas clases para facilitar el desarrollo de dispositivos. Las clases ms utilizadas con Microcontroladores son: HID (Human Interface Device): ejemplos de dispositivos que utilizan esta clase como hemos dicho ya son: teclados, ratones, pantallas tctiles, joystick, etc. Velocidad low-speed (64 KB/s de velocidad mxima), tipos de transferencias soportadas: de control y de Interrupcin. Una caracterstica interesante al utilizar esta clase es que no se necesita instalar un driver especifico en el Sistema Operativo, se utiliza uno estndar que ya est incluido en el sistema. MSD (Mass Storage Device Class): Como su propio nombre indica para dispositivos de almacenamiento masivo como discos duros, memorias flash, cmaras digitales, dispositivos pticos externos como lectores y grabadoras de CD y DVD, etc. Esta clase se puede utilizar solo en dispositivos que soporten velocidades Full y High Speed. El tipo de transferencias utilizadas es Bulk o una combinacin formada por transferencias del tipo Control, Bulk y Interrupt. Microchip tiene notas de aplicacin sobre esta clase como la AN1003. CDC (Communications Device Class): Un ejemplo de dispositivo que utiliza esta clase son los Modems,
http://firtec.com.ar/cms Potenciado por Joomla! Generado: 24 June, 2011, 23:31

Capacitacin en Electrnica

Utiliza tambin driver estndar incluidos ya en el sistema operativo, segn el sistema operativo utilizado precisar o no de la instalacin del archivo .INF, cuando utilizamos esta clase en la PC nos crear un puerto serie virtual y la comunicacin entre el dispositivo y la aplicacin de escritorio se har igual que se hara con un puerto serie fsico, esto supone una gran ventaja a la hora de disear la aplicacin de escritorio, ya que cualquier IDE de programacin sea del lenguaje que sea, dispone de un componente o librera que permite el acceso al puerto serie fcilmente. Existe una clase genrica llamada "Custom Class" que se utiliza cuando el dispositivo no se asemeja a las caractersticas de ninguno de los miembros pertenecientes a otras clases. un ejemplo de dispositivo que utiliza esta clase es el ICD2 o ICD3 de Microchip. Si el firware de nuestro dispositivo no cumple con las especificaciones de alguna de las clases que se beneficia del uso de drivers genricos instalados ya en el sistema operativo no queda otra que disear un driver para nuestro dispositivo, sino el dispositivo no ser reconocido por el PC, disear un driver desde cero es muy complicado ya que se requiere profundos conocimientos tanto de la arquitectura del PC como del Sistema Operativo que tenga instalado. Afortunadamente ya hay drivers personalizados que podemos utilizar en nuestros proyectos estos estn disponibles en distintos lugares en Internet. Unas de las cosas importantes que tenemos que tener en cuenta al programar el Microcontrolador son los fusibles, en los que entre otras cosas se define la velocidad de trabajo del controlador. Una caracterstica que hay que tener en cuenta cuando usamos un PIC con interfaz USB, es que para que dicho mdulo funcione la frecuencia de reloj en la entrada de dicho mdulo debe de ser de 48 MHz, para conseguir dicha frecuencia se dispone de un multiplicador con pre-escaler y post-escaler. A la entrada del multiplicador tenemos que tener una frecuencia fija de 4 MHz. Debido a la complejidad de la comunicacin USB lo que ha hecho tanto Microchip como otros desarrolladores de compiladores es proporcionar libreras que comnmente se les llama "Stacks" o pila de software cuya finalidad es facilitar la tarea al programador de dispositivos, de tal forma que no es necesario conocer a fondo el protocolo de comunicacin USB, simplemente se necesita saber que funciones pblicas me proporciona el "Stack" correspondiente para poder enviar y recibir los datos a travs del bus. Para poder hacer uso del Stack USB desde C18 debemos tener instalado Microchip Application Libraries que se descarga de manera libre desde el sitio de Microchip y que se incluye en el DVD del presente libro. Una vez que instalamos la aplicacin tendremos agregados no solo el Stack USB sino tambin el Stack TCPIP, Smart Card, etc. Comunicacin USB. Como se coment antes, la comunicacin USB entre el host y el dispositivo est basada en pipes o canales lgicos. Los pipes son conexiones del host a una entidad lgica, se realiza travs de los endpoint o punto final. No son conexiones fsicas, sino que son establecidas por el host en la configuracin inicial, para el manejo del protocolo. En un dispositivo full speed se establecen 32 pipes lgicas, entre el software de la aplicacin y el interface del dispositivo. Existe un pipe por defecto (End Point 0) que se utiliza en las transferencias de configuracin del dispositivo, como por ejemplo la enumeracin. Se establece una conexin lgica entre la aplicacin cliente y los diferentes interfaces del dispositivo. Cada interface no es ms que el agrupamiento de los endpoints segn el modo de operacin, como por ejemplo, modo normal o modo suspensin. Estas conexiones lgicas son las utilizadas especficamente por el usuario, por lo que no responden a ningn estndar. Nociones Avanzadas de Transferencias. La comunicacin USB se basa en mensajes que se denominan transferencias. Cada transferencia es un mensaje completo que se enva desde o hacia el dispositivo. Las transferencias se envan en frames o tramas, que en el caso de dispositivos full speed tienen una duracin de 1milisegundo. Esta caracterstica de transmisin divide las transferencias en segmentos, llamadas transacciones. Cada transaccin USB est formada por los siguientes paquetes. • Token Packet: Cabecera que define la informacin que se va a transmitir. • Data Packet: Paquete donde se transmite la informacin • Status Packet: Usado para hacer la aceptacin o Acknowledge de las transacciones. Token y Packets. Hay tres tipos de token packets: • IN: Informa al dispositivo USB, que el host quiere leer informacin. • OUT: Informa al dispositivo USB, que el host va a mandarle informacin. • SETUP: Usada para empezar transferencias de control Data Packets. Hay dos tipos de data packets, cada uno de ellos capaz de transmitir de 0 a 1023 bytes de datos. Concretamente son los paquetes Data0 y Data1. Tambin hay tres tipos de handshake packets, que consisten simplemente en la transaccin de un PID. Concretamente son los PID de ACK, NAK y STALL. • ACK: Acknowledge de que el paquete ha sido recibido con xito. • NAK: Reporta que el dispositivo no puede mandar o recibir datos temporalmente. • STALL: Es un error ms severo que el anterior, requiriendo intervencin del host. Existe un paquete especial llamado Start of Frame Packets. Se utilizan para iniciar cada nueva trama. Consiste en un nmero de trama de 11 bits mandado por el host cada 1mS. El campo PID representa los packets ID. Usados para identificar el tipo de paquete que va a ser enviado. El campo ADDR representa la direccin del dispositivo para el que corresponde el paquete de informacin. Es un campo de 7 bits que permite distinguir 127 dispositivos USB. La direccin 0 no es una direccin vlida, ya que cualquier dispositivo que no tenga asignada una direccin debe responder a estos paquetes. El campo ENDP est formado por cuatro bits, que permite direccionar 16 posibles endpoints. El campo CRC Cyclic Redundancy Checks se utiliza para el chequeo de envo de datos. El campo EOP o end of packet se utiliza para sealar el fin da cada paquete de datos. Se sealiza con lo que se denomina como Single Ended Zero (SE0). Cada transaccin, tiene una direccin de dispositivo y un nmero de endpoint, lo que determina exactamente el dispositivo y el rea de memoria que se va a leer o escribir. Las transferencias, se dividen en las tramas sucesivas hasta que se han completado. Esta estrategia de comunicacin tiene una razn de ser. Se comparte los frames para los diferentes dispositivos conectados al bus, de tal manera que cada uno tiene parte de la trama. Las transferencias Interrupt y asncronas tienen privilegios de transmisin en las tramas, sindoles asignadas un porcentaje configurable de la trama. Bsicamente los elementos en las transferencias son los endpoints y los enlaces virtuales, es por ello que en el presente captulo se resumen sus caractersticas ms relevantes. EndPoint.
http://firtec.com.ar/cms Potenciado por Joomla! Generado: 24 June, 2011, 23:31

Capacitacin en Electrnica

En el caso del PIC18F4550 las especificaciones USB definen un endpoint como, una porcin del dispositivo USB con una direccin nica que es fuente de informacin en una comunicacin entre el host y el dispositivo. Esto sugiere que la informacin solo fluye en una direccin. Esto es cierto aunque los endpoints de control es un caso especial de flujo bidireccional. Todas las transmisiones viajan desde o hacia un endpoint del dispositivo. Un endpoint es un buffer que guarda mltiples bytes. Tpicamente es un bloque de memoria de datos es decir unos registros en el microcontrolador. En el caso del PIC18F4550 estos buffers se encuentran en la memoria RAM, concretamente en el banco 4 (400h) hasta el banco 7 (7FFh) cada uno de ellos, de 256 bytes. Cuando el modulo USB est inhabilitado estas posiciones de memoria pueden usarse como registros de propsito general. Pero cuando el modulo USB est habilitado, la memoria de esos bancos es asignada como Buffer RAM para las operaciones USB. Esta rea de memoria es compartida entre la CPU del microcontrolador y el USB. Tericamente se pueden usar las areas USB RAM que no sean asignadas como buffer endpoint como memoria de propsito general. En la prctica la naturaleza dinmica de la asignacin de USB RAM lo hace especialmente inestable de lo cual surge que si bien el microcontrolador PIC18F4550 tiene 2048 Bytes de Ram esta memoria no esta disponible en su totalidad en todo momento para el usuario. Un endpoint configurado para hacer transferencias de control debe transferir datos en ambas direcciones, por lo que el endpoint de control consiste en un endpoint IN y un OUT que comparten el mismo nmero de endpoint. Cada dispositivo debe tener el endpoint0 configurado como endpoint de control. Puede darse el caso de que se necesite endpoints de control adicionales. Cuando un dispositivo recibe una transaccin OUT o Setup conteniendo su direccin, su hardware almacena la informacin recibida en la ubicacin especifica del endpoint y se genera una interrupcin. Una rutina de servicio a la interrupcin en el dispositivo procesa la informacin recibida y ejecuta la accin requerida en la transaccin. Cuando un dispositivo recibe una transaccin IN conteniendo su direccin, si el dispositivo tiene el dato listo para mandar al host, el hardware manda el dato desde el endpoint especifico al bus y se genera una interrupcin. Una rutina de servicio a la interrupcin en el dispositivo configura el mismo para estar listo para la siguiente transaccin IN. Pipes. Antes de que la transferencia pueda llevarse a cabo, el host y el dispositivo deben establecer un pipe (Tubera). Una pipe no es un objeto fsico, es solo una asociacin entre el endpoint del dispositivo (el PIC) y el software del controlador host (la PC). El host establece las tuberas despus de que se encienda el sistema o se conecte el perifrico al mismo. Si el dispositivo se desconecta del bus, el host elimina los pipes no necesarios. Cada dispositivo tiene un pipe de control por defecto el Endpoint 0. Proceso de Enumeracin. Cuando un nuevo dispositivo USB es conectado al puerto USB, el proceso de enumeracin de dispositivo USB comienza. El host le pide al dispositivo que se identifique y le diga cules son sus parmetros, tales como: • Consumo de energa expresada. • Nmero y tipos de endpoints. • Clase del producto. • Tipo de transferencia, etc. El proceso de enumeracin primero enva una seal de puesta a cero al dispositivo USB. La velocidad del dispositivo USB es determinada durante la sealizacin de puesta a cero. Despus del reinicio, la informacin de sistema de dispositivo USB es leda por el host y se le asigna una nica direccin de host controller de 7 bits. Si el dispositivo es soportado por el host, los drivers del dispositivo necesarios para comunicarse con el dispositivo son cargados y el dispositivo pasa a estar configurado. Si el host es reiniciado, el proceso de enumeracin es repetido para todos los dispositivos conectados. La informacin de configuracin recibida por el host incluye un descriptor por cada endpoint que el dispositivo quiere usar. Cada descriptor es un bloque de informacin que le dice al host lo que necesita saber para poder comunicarse con el endpoint. Concretamente incluye la direccin del endpoint, el tipo de transferencia que usa, el mximo tamao de los paquetes de datos y cuando sea necesario se incluye el intervalo entre transferencias. En todos los casos, el host acepta una peticin de configuracin, solo despus de asegurarse de que el bus tiene suficiente ancho de banda, para hacer las transferencias a la tasa requerida. Este es el caso de que la configuracin requiera pipes con transferencias iscronas, las cuales tienen una tasa de transferencia asegurada (transacciones por segundo). Este caso tambin se da en transferencias interrupt, las cuales tienen garantizada una mxima latencia (tiempo entre transacciones). En estos casos, el host examina el ancho de banda disponible antes de establecer los pipes. Si existe suficiente ancho de banda disponible, el host acepta la peticin de configuracin y asegura que las transferencias tengan el tiempo que necesitan. Si el ancho de banda no est disponible, el host deniega la peticin de configuracin y el software que la realiz debe intentarlo de nuevo. Ya bien sea esperando hasta que haya suficiente ancho de banda disponible o seleccionando una nueva peticin de configuracin que requiera menos ancho de banda. Para las pipes que mueven peticiones sin garanta de tiempos, el host no chequea el ancho de banda disponible, solo ajusta las transferencias, en el tiempo disponible, lo mejor que sea posible. (Datos extrados del manual de "Programacin en C18" edicin 2011 v2,5) Descargar informacin completa sobre el USB con C18

http://firtec.com.ar/cms

Potenciado por Joomla!

Generado: 24 June, 2011, 23:31

También podría gustarte