Paso 7: Arranque - deshacerse de PicKit
1. ¿por qué necesitamos un gestor de arranque?
Es necesario, sin embargo él que miente alrededor de nuestra área de trabajo con sin razón no es un PicKit alrededor. Inicialmente no quería complicar mi vida con bootloaders, pero más tarde me di cuenta la verdad: este proyecto es mejor sin el PicKit. Es agradable, especialmente si es un cable mini USB extremadamente común, que cada aficionado tiene un montón de tener un solo cable para la programación. Por suerte para mí, errores debían fijarse en ambos PCB así que había una buena oportunidad para añadir funcionalidades y hardware bootloader. La cabecera de cinco pines ICSP fue dejada fuera el diseño intencionalmente, y tuve que soldar cables de abrigo para flash el gestor de arranque. -Que el cableado no puede quedarse allí, lo lanzaría todo fuera de la mesa una vez que el rotor está girando - por suerte la ranura del USB es compacta y puede permanecer. Enchufe para la programación, enchufe hacia fuera cuando pruebas y spinning.
2. USB bootloader, simple y buena
Mirando la hoja de datos del procesador que me decidí a usar uno puede ver que existe UART y USB. Si escojo UART, necesito un USB-UART convertidor y un montón de hilos - en contra del propósito. Así que la opción mejor, más simple, más bonita es USB. Microchip ofrece todo tipo de muestras de código para las fotos, gestores de arranque también. Si usted descarga e instala "Librerías de Microchip para aplicaciones", habrá una carpeta completa sobre todo tipo de aplicaciones USB, bootloaders, herramientas y otras cosas útiles. En la subcarpeta "Bootloaders" escogió "USB HID Bootloader" y abrió en MPLAB X. Después de leer a través de ella un par de veces para entender su lógica, empecé a aplicar las modificaciones para adaptarse perfectamente a las placas que tenía la intención de usarlo para.
3. unas palabras sobre gestores de arranque
Un gestor de arranque es una sección especial del código que está escrito en microcontroladores una vez y proporciona una manera para cargar firmware sin necesidad de un programador (alto voltaje) especial, como el PicKit en nuestro caso. Desafortunadamente, no hay ninguna manera de evitar completamente el uso del PicKit, el gestor de arranque tiene que llegar de alguna manera en el PIC. La parte buena: usted puede pedir prestado un PicKit, ICD2 o cualquier interruptor intermitente de la foto de un amigo, y dar de nuevo una vez que el gestor de arranque está escrito en el microcontrolador. Después de - dependiendo de qué tipo de gestor de arranque tiene flasheada, puedes subir firmware a la memoria de programa a través de UART, USB, CAN o lo que sea.
Utilizar gestores de arranque es simple, pero viene con la desventaja de perder la memoria de programa precioso. Algunos gestores de arranque comen menos espacio, algunos comen más - que decidí usar es alrededor de 1K. Al inicio de cada PIC en la dirección 0 se enciende y comienza a ejecutar cualquier código el programador ha escrito allí. Si es el gestor de arranque = el PIC se ejecuta el gestor de arranque. Si es el código de usuario = la PIC se ejecuta el código de usuario. Bastante simple!
Para poder utilizarlos dos, tenemos que cambiar de alguna forma entre estos dos programas. Este cambio puede hacerse en base a una condición, evento o lo que sea - va a ser muy parecido a una declaración enorme "if". Elegí esta condición que el nivel de voltaje en un pin de entrada, RD3 IO del registro PORTD. Este pin es conectado al pin de 5V del conector USB a través de un resistor. Si el pasador está en 5V en el arranque, el PIC tiene que ejecutar la rama del gestor de arranque de la gran "si", si es 0V, el código de la aplicación de usuario tenía que ejecutar. Coloqué el código de usuario justo después del código de gestor de arranque, en la dirección 1000h. El PIC18F4550 verifica el pin RD3 repetidas veces, así que cuando se quita el cable USB y 5V desaparece del RD3, el PIC va saltar el código colocado en el 1000h, código de la aplicación de usuario. En el código de la aplicación de usuario verificar nuevamente el nivel de voltaje en el RD3, si el programa ve a 5V en él, el cable USB está conectado otra vez y el PIC tiene que saltar para el gestor de arranque. Hacer este salto al modo gestor de arranque con una instrucción de "RESET" de montaje en línea.
Desde el PIC comienza a ejecutar desde la dirección 0, lo más simple y más común es colocar el código de gestor de arranque allí y el código de usuario justo después el gestor de arranque. El código de gestor de arranque puede modificarse para comprobar si existe o no un firmware válido por escrito en la foto. Esto se hace comprobando el contenido de la memoria en dirección 1006-1007 horas. Después de cada programación, los insertos de bootloader "600D" (leet de 'bueno') en este lugar, lo que significa que el código se ha escrito en el PIC con éxito - esto es lo que consigue comprobar su validez. Debemos especificar en la configuración de proyecto de aplicación de usuario que esta ubicación no debe ser sobrescrito, ver las imágenes para ver cómo se hace (ROM gamas se especifican para saltar este lugar cuando se compila el código de la aplicación de usuario). No hacerlo resultará en errores muy difíciles de detectar más tarde. La sección donde las mentiras del gestor de arranque deben estar protegidas así: esto se hace por compensación el código de la aplicación de usuario todo por 1000h (código offset parámetro en las opciones del vinculador). Gestores de arranque son generalmente situados al principio o al final de la memoria de programa - debe tener cuidado de no sobreescribirlo!
Quería añadir alguna parametrización para este dispositivo, por eso la gama de 3000-3100 está protegida así. No necesitas eso, solo uno!
4. problemas llegué a trabajar con el gestor de arranque
Compilar el proyecto resultará en un archivo hexadecimal generado - esto tiene que ser flasheado en el PIC con un PicKit o lo que sea. Mina no quería empezar por un buen tiempo, la herramienta de gestor de arranque USB no podía detectar nada. Decidí hacer las mediciones en el pin VUSB del PIC de mi alcance y el momento que mencioné el perno con la sonda alcance el conocida USB sonido jugado y tiene reconocida la Junta! Pensé que el problema se fue, pero en cuanto me lo quitaron la sonda, la cosa dejó de funcionar otra vez. Me di cuenta de que todo funciona cuando la sonda alcance, incluso las escrituras, se restablece - el problema tuvo que ser algo que fija la sonda. Entonces pensé: ¿Qué tienen las puntas de prueba alcance? Capacitancia parásita. El condensador en el pin VUSB fue enorme en valor y no podía filtrar los ruidos de alta frecuencia. Se agregó un capacitor de 100nF en paralelo, y la junta fue reconocida inmediatamente. Problema resuelto!