Programando un PIC con un PIC

Estoy construyendo un dispositivo con dos PIC, un PIC18F46K22 y un PIC16F88 . Tengo un búfer en el 18F46K22 que contiene un programa que quiero escribir en la memoria del programa del 16F88. No puedo hacer esto manualmente, porque tiene que suceder sobre la marcha (el búfer puede cambiar), por lo que la programación debe ser iniciada por el 18F46K22. Sin embargo, los bits CONFIG se pueden configurar manualmente, no necesito cambiarlos sobre la marcha. Tampoco es necesario escribir en la RAM o EEPROM del 16F88 con el 18F46K22.

Los dos chips se alimentan con 5V y no hay suministro de 12V disponible. ¿Supongo que tendré que optar por la programación de bajo voltaje (LVP)?

¿Hay alguien que ya haya hecho algo así? ¿Hay algún código o circuito disponible en algún lugar para programar un PIC con un PIC?

Al final, esto es para hacer un dispositivo de codificación basado en PIC básico: el usuario edita el búfer en el 18F46K22, programa el 16F88 con él. Habrá una interfaz I 2 C entre los dos para que se puedan compartir los resultados. La programación del 16F88 será solo con fines matemáticos: el chip recibe alguna entrada sobre I 2 C y un disparador de INICIO en algún pin. Después de eso, el resultado se devuelve por I 2 C.

Sería mucho más fácil si mantuviera el búfer en la memoria de datos (RAM) del 16F88. Pero si necesita almacenamiento no volátil, puede usar la EEPROM del 16F88 (siempre que la longitud del búfer sea <= 256 bytes)
@ m. Alin, ¿por qué sería más fácil almacenar el búfer en la memoria de datos del 16F88? Ese es el chip que quiero programar.
Solo para aclarar las cosas: ¿quieres escribir un nuevo programa del 16F88 o solo quieres cambiar un búfer en el 16F88?
@m.Alin Quiero borrar por completo la memoria del programa del 16F88 y escribirle un nuevo programa. No es necesario guardar datos en la RAM o EEPROM del dispositivo desde el 18F46K22. Lo siento por cualquier malentendido.
En ese caso, malinterpreté tu pregunta. Es posible que desee ver el programador Pickit 2; AFAIK usa un PIC18F y su firmware es de código abierto .

Respuestas (2)

Programar un PIC por otro PIC es perfectamente posible, y cuando usas LVP el circuito es trivial. El esfuerzo consiste en escribir el código en el PIC maestro que implementa el algoritmo de programación, de acuerdo con las especificaciones del documento de "especificaciones de programación" para el chip esclavo. Esto es lo que hacen la mayoría de los programadores (las cosas del hardware, no las personas), pero tenga en cuenta que en la mayoría de los casos el algoritmo de programación se implementa al menos parcialmente en el software del lado de la PC.

Hay varios ejemplos que puedes consultar, ya se ha mencionado el pickit2. El firmware de mi Wisp648 (en Jal) y el software del lado de la PC (en Python) también son de código abierto, y el software IIRC para los programadores de Olin también lo es.

Pero las especificaciones de programación no son tan difíciles de leer desde cero, especialmente si necesita admitir solo un chip de destino. Esencialmente, fuerza el chip al modo de programación (suelte el reinicio mientras LVP está activo), y luego lo alimenta con comandos y datos asociados (de manera similar a SPI), observando el tiempo requerido. Luego, puede usar un programador listo para usar para verificar si su esfuerzo de programación fue exitoso.

Otra solución sería poner un gestor de arranque en el F88. La desventaja es que necesita programar el cargador de arranque (pero es posible que ya exista uno adecuado) y que el cargador de arranque ocupa algo de memoria, pero la ventaja es que puede elegir el protocolo de comunicación (o apegarse a un cargador de arranque existente, que suelen utilizar un protocolo basado en UART).

Estoy de acuerdo con lo que dijo Wouter.

También vendo programadores PIC en el lateral. Todo el software y el firmware para mis programadores se incluyen en la versión del software de desarrollo en www.embedinc.com/picprg/sw.htm . Hay mucha complejidad allí, pero eso se debe a que este software/firmware tiene que admitir tantos algoritmos de programación diferentes. La POD (División de Ofuscación de Programación) de Microchip tiene algunas personas muy inteligentes que constantemente sueñan con pequeñas cosas nuevas y diferentes que tiene que hacer para programar PIC. Sin embargo, a pesar de sus mejores esfuerzos, esTodavía es posible programar todos los PIC, pero requiere mucha excavación y lectura entre líneas de la documentación a veces completamente incorrecta. El software/firmware en esa versión sería mucho más pequeño si todos los PIC se programaran de la misma manera.

Afortunadamente, su firmware puede ser específico para el PIC en particular que está tratando de programar. Tienes que obtener la especificación de programación y leerla cuidadosamente, pero puedes permitirte ignorar todas las demás especificaciones de programación. Probablemente pueda hacer uso de un montón de módulos de firmware de nivel inferior que tengo, especialmente para los programadores de USBProg. Ese es el firmware EUSB, que también usa nombres de archivos comunes PICPRG_xxx.INS.ASPIC. Todo ese firmware está diseñado para ejecutarse en un PIC 18, por lo que gran parte debería poder usarse directamente.

Por lo general, hago que el programador presente aproximadamente una interfaz de dirección/lectura/escritura y que el software host se ocupe de los niveles superiores. Afortunadamente, los niveles más altos son la parte relativamente fácil. Tendrá que buscar en el software host ejemplos de los algoritmos de borrado. Los empujo al host ya que cada uno se ejecuta solo una vez por operación de programación, por lo que la velocidad no es un gran problema.

Pregunta aquí si tienes alguna duda más específica.