Paso 6: Comprender el código de firmware
En el archivo zip 'PIC18F Generic HID Device' con este artículo usted encontrará un completado firmware listo para el PIC18F4550.Simplemente descomprime el archivo en su directorio de proyecto MPLAB favorito y luego usar el MPLAB para abrir el proyecto.
He separado los archivos de código fuente y archivos de encabezado en código que debe mirar y luego las partes más genéricas de la stack de Microchip (almacenados en directorios sub 'stack USB' en el navegador de proyecto).
Los archivos en los directorios de "stack USB" son interesantes, pero para ponerse en marcha rápidamente usted no debería preocuparse de los aspectos del meollo del código hasta que estés más familiarizado con los niveles superiores.
Puesto que ya está preparado el VID/PID y el resto de la información de enumeración debe empezar por realizar un build-todo sobre el proyecto y luego descargar el firmware resultante a su PIC18F. Por supuesto, usted necesitará un entorno de compilación sane para que funcione pero hay un montón de recursos a través de Google si tiene problemas con su entorno.
Probar con algunos ejemplos sencillos para asegurarse de que todo está bien antes de volver a cargar este proyecto y tratar otra vez.
El firmware ofrece 3 comandos:
- 0 x 80 - cambiar el LED
- 0x81 - Lea el estado del interruptor del empuje
- 0x82 - Lea el estado del LED
El código que ejecuta estos comandos se encuentra en el archivo de código fuente main.c en la función ProcessIO(). Esta función es responsable de determinar al mando deseado y luego enviar y recibir datos según corresponda. Esto es bastante sencillo ya que la pila USB se encarga de toda la complejidad subyacente; echar un rápido vistazo en el código fuente y podrás ver lo sencillo es realmente. El cheque sólo extra realizado por la función es para ver si el dispositivo está en un estado configurado; Esto significa que el dispositivo está conectado a un host y enumeración ha sido exitosa. La principal función simplemente llama a la pila USB para realizar las tareas de bajo nivel del dispositivo y luego la función ProcessIO una y otra vez. Es posible hacerlo usando interrupciones en lugar de un bucle, sin embargo en este firmware he seguí lo más sencillo posible. Para entender un poco más sobre el proceso de enumeración mira usb_descriptors.c que contiene la información que se transmite al host cuando el dispositivo está conectado primero. La fuente se encuentra la información de VID y PID del dispositivo así como una serie de descriptores de configuración que explican al host qué tipo de interfaces, el dispositivo tiene y las capacidades de los interfaces. Los 'extremos' son los conectores para las 'tuberías' descritos anteriormente. También hay algunas cadenas que describen textualmente el fabricante y el producto. Windows generalmente utiliza estas cadenas al nombrar dispositivos USB. Entender el proceso de enumeración y los formatos de descriptor es bastante complejo y está cubierto por las varias especificaciones de USB así como un gran libro por Jan Axelson llamado «USB completa - todo lo necesario para desarrollar periféricos USB personalizadas» (ISBN 978-1931448086). Si gozan de este artículo y quiere conseguir más serio USB recomiendo conseguir una copia del libro, sin duda me ayudó cuando yo estaba aprendiendo. En general el firmware es muy sencillo, se incluye todo lo que necesita para levantarse y ejecutar la comunicación a y desde el host. Obviamente usted puede hacer esto tan complejo como quieras, pero a los efectos de este artículo (que te va con el USB) hay mucho para experimentar con.