Programación de PIC a través de FPGA

Quisiera saber si existe alguna forma de programar un PIC por primera vez (escribir en Flash) a través de una tarjeta FPGA.

El PIC ya está soldado a la FPGA y no puedo quitarlo. No existe ningún gestor de arranque en el PIC. Por lo tanto, necesito programarlo en modo USART / SPI / I2C con un gestor de arranque para que pueda recibir datos de la FPGA.

Sé que normalmente tengo que desoldarlo, conectarlo a un programador de hardware como PICKit y programarlo con un software en la computadora como MPLAB, pero no puedo pagar eso.

Puedo generar el gestor de arranque con MPLAB, que es un archivo .hex, pero ¿cómo puedo transferirlo a la FPGA y luego a la PIC a través de los pines de la FPGA?

El PIC utilizado es Microchip PIC12F1822.

Solo comprobando: ¿puede reprogramar el FPGA (es decir, tiene todas las herramientas necesarias para hacer esto)?
¿Esta es una especie de placa de desarrollo?
Sí, tengo todas las herramientas necesarias para reprogramar la FPGA (se conecta a la computadora a través de usb estándar).
@MattYoung De hecho, es una placa de desarrollo. Lo que queremos es programar el pic para que pueda intercambiar datos con la FPGA. El PIC se usa para proteger el sistema global con algoritmos de encriptación: después de la programación inicial (carga de arranque) que está causando el problema aquí, y una vez que los registros adecuados estén habilitados en el PIC, se enviará un octeto desde el FPGA al PIC cada segundo. . Si la clave devuelta por el PIC es correcta, el sistema global puede seguir funcionando. De lo contrario, algunas funciones permanecerán pero otras se bloquearán.
Los diseñadores de la placa de desarrollo probablemente hayan publicado archivos de demostración para este tipo de cosas.
No, fueron culpados porque no hicieron este esfuerzo. En realidad, estoy en una pasantía y me pareció muy poco profesional. Aunque todavía necesito solucionar el problema. Realmente no puedo ver una manera de reprogramar este PIC con otras formas que no sean un programador externo que no puedo usar porque el paquete ya está hecho.
Algunos resultados aleatorios de Google: microchip.com/forums/m373979.aspx ww1.microchip.com/downloads/en/DeviceDoc/30277d.pdf ... Buena lectura. Por lo que está diciendo, tendrá que codificar una máquina de estado bastante complicada en su FPGA, o crear una instancia de un procesador de núcleo suave (lo que sea que le guste más) :)
¿No hay forma de soldar algunos cables de puente a pistas o pines en el PIC para que pueda programarlo a través de un programador externo? Intentar hacerlo a través de la FPGA suena como un proyecto de tesis de grado.

Respuestas (2)

No, no necesita, de hecho no puede, usar SPI, UART o I 2 C para programar el PIC. La única forma de introducir un nuevo programa en un PIC que no tenga un código especial cargado para ese fin (un gestor de arranque) es utilizar la interfaz de programación de hardware externa. Eléctricamente, esto significa conectarse a Vss, MCLR, PGC y PGD. Puede ser útil tener el programador también conectado a Vdd, pero no es necesario para este chip siempre que se conozca el nivel de Vdd y el programador se ajuste en consecuencia.

La interfaz de hardware de bajo nivel es bastante simple. PGD ​​es la línea de datos, que es muestreada por el PIC en el flanco descendente de PGC (la línea de reloj). Para poner el PIC en el modo de programación en primer lugar, se registra una clave especial de 32 bits en relación con los bordes específicos en MCLR (aunque vea la nota a continuación con respecto a la programación de alto voltaje).

El protocolo de nivel superior se vuelve más complicado. La mayoría de las cosas se hacen con comandos de 6 bits, algunos de los cuales van seguidos de palabras de datos de 14 bits. Tienes que leer las especificaciones de programación cuidadosamente. Tenga en cuenta que la especificación de programación es un documento separado de la hoja de datos. Vaya a la página del producto para su PIC particular en el sitio web de Microchip y encontrará un enlace a la especificación de programación en la sección de documentos.

Añadido sobre la programación de alto voltaje

Estos tipos de PIC tienen dos formas de ingresar al modo de programación, alto voltaje (HVP) y bajo voltaje (LVP). El método de alto voltaje requiere elevar el MCLR entre 8 y 9 voltios y mantenerlo allí durante la programación. Este método siempre funciona, independientemente de cualquier dato posible programado en el PIC.

El método de bajo voltaje para ingresar al modo de programación comienza con la activación de MCLR alto, luego bajo, luego marcando una secuencia de teclas especial de 32 bits usando PGC y PGD normalmente. La pieza entrará en el modo de programación con la secuencia de teclas correcta y permanecerá en el modo de programación mientras el MCLR se mantenga bajo.

El método de bajo voltaje se puede desactivar mediante uno de los bits de configuración. Sin embargo, el estado borrado del bit de configuración permite la programación de bajo voltaje, se envía de fábrica de esa manera, y este bit de configuración solo se puede configurar para no permitir LVP si se ingresó a la programación con el método de alto voltaje. Por lo tanto, para que LVP no esté habilitado, todo lo siguiente debe ser cierto:

  1. El PIC se programó por última vez con un programador compatible con HVP y se utilizó el modo de entrada de programa HVP.

  2. El archivo HEX programado en el PIC establece deliberadamente el bit LVP en la palabra de configuración 2 en el estado no borrado.

Dado que deshabilitar LVP requiere una acción deliberada y el programador adecuado, es probable que aún esté habilitado. Si se deshabilitó deliberadamente por alguna extraña razón, debe suministrar 8-9 V en MCLR para que el PIC entre en modo de programación al menos el tiempo suficiente para realizar un borrado masivo (que vuelve a habilitar LVP).

La programación de un PIC requiere un alto voltaje. Sí, es posible cambiar un PIC a "LVP", o modo de programación de bajo voltaje, pero necesita un programador de alto voltaje para hacerlo.

Si su PIC ya se ha puesto en modo LVP, entonces sí, puede programar fácilmente el PIC desde el FPGA. Todas las hojas de datos contienen las formas de onda de programación necesarias para programar el chip, por lo que sería un caso de construir su propio dispositivo de programador PIC en el FPGA.

Sin embargo, si el PIC no se ha puesto en modo LVP, deberá generar un alto voltaje (generalmente 10 V) y aplicarlo al pin MCLR en el momento adecuado para ingresar al modo de programación. Si aún no tiene este tipo de hardware en su placa, entonces requerirá hardware adicional que, en última instancia, es controlado por el FPGA en cuanto a cuándo se activa.

La mayoría de los programadores de PIC incluyen un pequeño regulador de impulso (doblador de voltaje) para llevar los 5 V provistos hasta 10 V usando un PIC integrado para administrar la regulación de voltaje. A menudo usan PWM del PIC y una entrada ADC en el PIC como un simple regulador de impulso.

Debería echar un vistazo a los esquemas PICkit2 disponibles públicamente.

No, es muy probable que no se requiera alto voltaje. La mayoría de las piezas más nuevas, incluidas todas las series 12F1xxx/16F1xxx, pueden usar una secuencia de teclas para ingresar al modo de programación. Esta secuencia no requiere alto voltaje. Esto se puede deshabilitar en la configuración, pero la pieza viene de fábrica con el método clave habilitado. A menos que alguien deshabilite deliberadamente la entrada al modo de programa de secuencia de teclas, aún debería estar disponible. Si está deshabilitado, entonces sí, debe aumentar MCLR a 8-9 V para ingresar al modo de programación.
El modo de programación clave es el modo LVP. Se basa en LVP=1 en la configuración. Parece que ese chip está predeterminado en LVP=1, pero ¿ES =1 en ese chip específico o ya se ha programado con LVP=0? ¿Quién sabe? Como dije, SI está en modo LVP, entonces no necesita el HV, de lo contrario, lo necesita.
Entonces, para programar en modo LVP, ¿necesito implementar algún programador PIC "digital" (VHDL) en mi FPGA? Realmente no puedo pensar en una manera de hacer eso. ¿Podrías ayudarme a construirlo?
No, no puedo. Tiene los esquemas para pickit2 disponibles, por lo que sabe qué señales se necesitan. Tiene disponible la fuente para el firmware pickit2, por lo que sabe cómo comunicarse. Tienes disponibles las fichas de programación, para que sepas qué instrucciones enviar y cómo enviarlas. La forma en que comunica el firmware al PIC desde su computadora depende completamente de usted. ¿Cuánta inteligencia desea en su FPGA y cuánta en el extremo de la PC?
Ok, gracias. En primer lugar voy a intentar programar el PIC directamente con el PICKIT 3. En cuanto al PICKIT (que ha comprado mi empresa al efecto), tengo miedo de conectarlo directamente a los pines del PIC ya que estos son también conectado a la FPGA. Me preocupa que algo de voltaje pueda pasar por el FPGA apagado y causar algún daño. ¿Es una preocupación justificada?
Dependiendo del voltaje máximo para los pines FPGA y de dónde conecte las señales, sí, mucho. Si quiere estar totalmente seguro, levante los pines requeridos en el PIC, corte los rastros compartidos o elimine el PIC antes de programarlo.