La comunicacin USB es talvez una de las mas complejas,
existen libros enteros sobre esta comunicacion.
Si bien podemos usar el puerto USB con el PIC en ensamblador esto nos costara horas y horas de literatura, en general es un esfuerzo considerable.
Programar en C nos facilita sensiblemente el trabajo sintetizndolo en el uso de funciones, sin contar la ya mencionada portabilidad.
De hacerse con ensamblador y querer usar otro uC distinto a Microchip nos costara otras horas de literatura, este tipo de detalles muestran la conveniencia de la programacin en lenguajes de alto nivel para uC. La interfaz est formada por cuatro hilos dos para la alimentacin 5v (Rojo) GND (Negro) y dos para datos D+ (verde) y D- (Blanco), la seal es diferencial (+-) cuyo valor depende de la velocidad del bus (3,3v para low-speed y 400mV para high-speed).
Los conectores se les denomina de tipo A y de tipo B Tipo B Tipo A Low speed: 1,5 Mbps. Soportado por las especificaciones 1.1, 2.0 y 3.0. Es la velocidad utilizada por dispositivos como teclados, ratones, joystick, etc.
Full speed: 12 Mbps. Soportado por USB 1.1, USB 2.0 y USB 3.0. Un ejemplo donde se utilizan estas velocidades es en transmisiones de audio.
High speed: 480 Mbps. Solo USB 2.0 y USB 3.0. Ejemplo transmisiones de video.
Super speed: 5Gbps solo soportado en dispositivos USB 3.0
Los dispositivos USB que se conectan a la computadora se dividen en clases.
Una clase es un modelo o plantilla que describe el estado y el comportamiento de los objetos que la comparten.
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) 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. CDC (Communications Device Class): Un ejemplo de dispositivo que utiliza esta clase son los Modems.
En este ejemplo utilizaremos esta clase para comunicar nuestro PIC18F4550 con una aplicacin de escritorio. La velocidad mxima al utilizar esta clase ser de 80 kBytes/s.
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 el PC nos crear un puerto serie virtual y la comunicacin entre el dispositivo y la aplicacin de escritorio se har a travs de el al igual que se hara con un puerto serie fsico Lo anterior supone una gran ventaja a la hora de disear una aplicacin de escritorio, ya que cualquier IDE de programacin sea del lenguaje que sea, por ejemplo MATLAB, Visual Basic o LABView, en general programas muy utilizados en las areas de electrnica disponen de un componente o librera que permite el acceso al puerto serie fcilmente. El Host es aquel encargado de detectar la conexin de nuevos dispositivos (generalmente es la PC), cuando el host detecta un nuevo dispositivo lo interroga para adquirir de l la informacin necesaria para establecer la comunicacin, como la clase a la que pertenece, el consumo de corriente, el VID y PID, etc y le asigna una direccin.
Este proceso de interrogacin y asignacin de direccin para establecer la comunicacin se le llama enumeracin. Los PIC18 no poseen las caractersticas para adoptar el papel de host, es decir, no podemos conectarle al PIC un mouse, o una memoria USB.
Sin embargo las gamas mas altas como la PIC32 si poseen las capacidades para ser un HOST. La informacin que el host pide al dispositivo se llaman descriptores, en el caso del pic esta almacenada es su memoria no voltil. De estos descriptores los que realmente nos interesan por el momento son los:
VID (Vendor ID) PID (Product ID) El ID del vendedor y el ID del producto son dos nmeros de 16 bits que identifican y distinguen al dispositivo del resto. Nunca deben conectarse dos dispositivos con el mismo VID y PID al mismo host pues habr conflictos.
Por esta razn se debe adquirir una licencia para que se nos otorgue un VID valido y poder comercializar nuestros productos garantizando que no habr otros iguales que produzcan fallos.
Evidentemente no compraremos una licencia para trabajar, afortunadamente Microchip facilita estos nmeros para trabajar con los PIC: VID=0X04D8 PID=0X000A
Cuando hayamos programado nuestro PIC y lo conectemos al puerto USB, Windows lo reconocer inmediatamente y comenzara la instalacin del driver genrico (usbser.sys), la instalacin es la habitual, el asistente nos pedir el archivo .inf, as que le indicaremos la direccin del mismo: C\:Microchip Solution\USB Tools\USB CDC Serial Demo\inf
El archivo se llama: mchpcdc.inf Este archivo (mchpcdc.inf) es proporcionado por Microchip y en el se encuentran los datos como el nombre que se muestra en el administrador de dispositivos y sobre todo los VID y PID mencionados anteriormente, debemos asegurarnos que estos ltimos coincidan con los grabados en el PIC.
Los VID y PID del PIC los podemos modificar antes de grabarlo modificando el archivo USB_DESC_CDC.h en CCS. En este video se mostrara como.
Bueno, el programa que realizaremos en el PIC ser simple, consistir en que el PIC esperara que se presione una tecla y mostrara un mensaje, posteriormente recibir texto desde la PC y lo escribir en un LCD y reenviara a la aplicacin de escritorio para verlo tambin en la pantalla de la PC. Las funciones USB que veremos en el desarrollo del programa son:
Usb_cdc_init(); USB_init();
Estas funciones son necesarias para inicializar el modulo USB. Usb_enumerated() Esta funcin devuelve un 1 o true si el dispositivo ha sido enumerado por el HOST.
Usb_task(); Funcin que habr de ser llamada peridicamente en el programa Usb_cdc_putc(); Envia un carcter por el puerto
Usb_cdc_getc(); Lee el carcter recibido por el puerto, si no lo hay esperara hasta que haya.
Usb_cdc_kbhit(); Devuelve un true si se ha recibido un carcter por el puerto Pues como hemos dicho usaremos la clase CDC que emula un puerto serie virtual, as que con toda comodidad podemos usar un visor de puerto serie como el Hyperterminal.
Esta aplicacin ser suficiente ya que no requiere de prcticamente ningn conocimiento previo y nos ser til para ver o mostrar que se manda o recibe del PIC a la PC. Lo que haremos en resumen ser:
1) Realizar el programa en el PIC para enviar/recibir datos por usb y modificaremos los datos del VID PID a los requeridos por Microchip.
2) Conectaremos el PIC a la PC e instalaremos el driver necesario.
3) Abriremos Hyperterminal y lo configuraremos para enviar/recibir datos desde el PIC y poder verlos en el Hyperterminal y LCD. Con esto habremos aprendido a enviar y recibir informacin de la PC usando el puerto USB con la ventaja de la emulacin de un puerto serie que nos servir para migrar fcilmente de RS232 a USB y trabajar cmodamente con IDEs potentes como LABView entre otros.