La programación en el sistema (ISP), también llamada programación en serie en el circuito (ICSP), es la capacidad de algunos dispositivos lógicos programables , microcontroladores y otros dispositivos integrados para ser programados mientras están instalados en un sistema completo, en lugar de requerir que el chip programarse antes de instalarlo en el sistema. Permite que las actualizaciones de firmware se envíen a la memoria en chip de los microcontroladores y procesadores relacionados sin requerir circuitos de programación especializados en la placa de circuito, y simplifica el trabajo de diseño. [1]
Hay varios protocolos de programación en el sistema incompatibles entre sí para programar dispositivos de microcontroladores , incluidos los microcontroladores PIC , AVR y Parallax Propeller . ICSP ha sido implementado principalmente por Microchip Technology para programar dispositivos PIC y dsPIC.
La principal ventaja de esta característica es que permite a los fabricantes de dispositivos electrónicos integrar la programación y las pruebas en una sola fase de producción y ahorrar dinero, en lugar de requerir una etapa de programación separada antes de ensamblar el sistema. Esto puede permitir a los fabricantes programar los chips en la línea de producción de su propio sistema en lugar de comprar chips preprogramados de un fabricante o distribuidor, lo que hace posible aplicar cambios de código o diseño en medio de una ejecución de producción.
Los microcontroladores generalmente se sueldan directamente a una placa de circuito impreso y, por lo general, no tienen los circuitos o el espacio para un cable de programación externo grande a otra computadora.
Por lo general, los chips que admiten ISP tienen circuitos internos para generar cualquier voltaje de programación necesario a partir del voltaje de suministro normal del sistema y comunicarse con el programador a través de un protocolo en serie. La mayoría de los dispositivos lógicos programables utilizan una variante del protocolo JTAG para ISP, con el fin de facilitar la integración con los procedimientos de prueba automatizados. Otros dispositivos suelen utilizar protocolos propietarios o protocolos definidos por estándares más antiguos. En sistemas lo suficientemente complejos como para requerir una lógica de pegamento moderadamente grande , los diseñadores pueden implementar un subsistema de programación controlado por JTAG para dispositivos que no son JTAG, como memorias flash y microcontroladores, lo que permite que todo el procedimiento de programación y prueba se realice bajo el control de un solo protocolo.
Historia
A partir de principios de los 90 asistimos a una importante evolución tecnológica en la arquitectura de los microcontroladores. Al principio, se realizaron en dos posibles soluciones: con OTP (One Time Programmable) o con memorias EPROM . En estas tecnologías, el proceso de borrado de memoria requiere que el chip se exponga a la luz ultravioleta a través de una ventana específica sobre el paquete. En 1993, Microchip Technology presentó el primer microcontrolador con memoria EEPROM : el PIC16C84. Las memorias EEPROM se pueden borrar eléctricamente. Esta característica permitió reducir los costos de realización al eliminar la ventana de borrado sobre el paquete e iniciar la tecnología de programación en el sistema. Con ISP, el proceso de flasheo se puede realizar directamente en la placa al final del proceso de producción. Esta evolución dio la posibilidad de unificar la fase de programación y prueba funcional y en los entornos de producción e iniciar la producción preliminar de las placas incluso si aún no se ha completado el desarrollo del firmware. De esta manera fue posible corregir errores o realizar cambios en un momento posterior. En el mismo año, Atmel desarrolló el primer microcontrolador con memoria Flash, más fácil y rápido de programar y con un ciclo de vida mucho más largo en comparación con las memorias EEPROM.
Los microcontroladores que admiten ISP generalmente se proporcionan con pines utilizados por el periférico de comunicación en serie para interactuar con el programador, una memoria Flash / EEPROM y los circuitos utilizados para suministrar el voltaje necesario para programar el microcontrolador. El periférico de comunicación está a su vez conectado a un periférico de programación que proporciona comandos para operar en la memoria Flash o EEPROM.
A la hora de diseñar tarjetas electrónicas para la programación de ISP es necesario tener en cuenta algunas pautas para tener una fase de programación lo más confiable posible. Algunos microcontroladores con un número reducido de pines comparten las líneas de programación con las líneas de E / S. Esto podría ser un problema si no se toman en cuenta las precauciones necesarias en el diseño de la placa; el dispositivo puede sufrir daños en los componentes de E / S durante la programación. Además, es importante conectar las líneas del ISP a circuitos de alta impedancia tanto para evitar que el programador dañe los componentes como porque el microcontrolador a menudo no puede suministrar suficiente corriente para pilotar la línea. Muchos microcontroladores necesitan una línea de RESET dedicada para ingresar al modo de programación. Es necesario prestar atención a la corriente suministrada para la conducción de la línea y verificar la presencia de perros guardianes conectados a la línea RESET que puedan generar un restablecimiento no deseado y, por lo tanto, provocar una falla en la programación. Además, algunos microcontroladores necesitan un voltaje más alto para ingresar al Modo de Programación y, por lo tanto, es necesario verificar que este valor no esté atenuado y que este voltaje no se transmita a otros componentes de la placa.
Aplicación industrial
El proceso de Programación In-System tiene lugar durante la etapa final de producción del producto y se puede realizar de dos formas diferentes en función de los volúmenes de producción.
En el primer método, un conector se conecta manualmente al programador. Esta solución espera la participación humana en el proceso de programación que tiene que conectar el programador a la placa electrónica con el cable. Por lo tanto, esta solución está pensada para volúmenes de producción bajos.
El segundo método utiliza puntos de prueba en el tablero. Estas son áreas específicas colocadas en la placa impresa, o PCB , que están conectadas eléctricamente a algunos de los componentes electrónicos de la placa. Los puntos de prueba se utilizan para realizar pruebas funcionales para componentes montados en placa y, dado que están conectados directamente a algunos pines del microcontrolador, son muy efectivos para ISP. Para volúmenes de producción medios y altos el uso de puntos de prueba es la mejor solución ya que permite integrar la fase de programación en una línea de montaje.
En las líneas de producción, las tablas se colocan sobre un lecho de clavos llamado fixture . Estos últimos se integran, en función de los volúmenes de producción, en sistemas de prueba semiautomáticos o automáticos denominados ATE - Automatic Test Equipment . Los accesorios están diseñados específicamente para cada placa, o como máximo para algunos modelos similares a la placa para la que fueron diseñados, por lo que son intercambiables en el entorno del sistema en el que están integrados. El sistema de prueba, una vez colocados el tablero y el dispositivo en posición, tiene un mecanismo para poner en contacto las agujas del dispositivo con los puntos de prueba en el tablero a probar. El sistema al que está conectado, o ha integrado directamente en su interior, un programador ISP. Éste tiene que programar el dispositivo o dispositivos montados en la placa: por ejemplo, un microcontrolador y / o una memoria serie.
Microchip ICSP
Para la mayoría de los microcontroladores Microchip, la programación ICSP se realiza usando dos pines, reloj (PGC) y datos (PGD), mientras que un alto voltaje (12 V) está presente en el pin Vpp / MCLR. La programación de bajo voltaje (5 V o 3,3 V) prescinde del alto voltaje, pero se reserva el uso exclusivo de un pin de E / S. Sin embargo, para los microcontroladores más nuevos, específicamente las familias de microcontroladores PIC18F6XJXX / 8XJXX, ingresar a los modos ICSP es un poco diferente. [2] Entrar en el modo Programa / Verificación de ICSP requiere los siguientes tres pasos:
- El voltaje se aplica brevemente al pin MCLR (master clear).
- En PGD se presenta una secuencia de claves de 32 bits.
- Se vuelve a aplicar voltaje a MCLR.
Se requiere una pieza de hardware separada, llamada programador, para conectarse a un puerto de E / S de una PC en un lado y al PIC en el otro lado. Una lista de las características para cada tipo de programación principal es:
- Puerto paralelo : cable grande y voluminoso, la mayoría de las computadoras solo tienen un puerto y puede ser inconveniente cambiar el cable de programación con una impresora conectada. La mayoría de las computadoras portátiles posteriores a 2010 no admiten este puerto. La programación de puertos paralelos es muy rápida.
- Puerto serie ( puerto COM): en un momento, el método más popular. Los puertos seriales generalmente carecen de un voltaje de suministro de programación de circuitos adecuado. La mayoría de las computadoras y portátiles posteriores a 2010 carecen de soporte para este puerto.
- Zócalo (dentro o fuera del circuito): la CPU debe retirarse de la placa de circuito o debe conectarse una abrazadera al chip, lo que hace que el acceso sea un problema.
- Cable USB : pequeño y liviano, admite fuente de voltaje y la mayoría de las computadoras tienen puertos adicionales disponibles. La distancia entre el circuito que se va a programar y el ordenador está limitada por la longitud del cable USB, normalmente debe ser inferior a 180 cm. Esto puede hacer que los dispositivos de programación en la profundidad de la maquinaria o los gabinetes sean un problema.
Los programadores de ICSP tienen muchas ventajas, siendo las principales características el tamaño, la disponibilidad de puertos de computadora y la fuente de alimentación. Debido a las variaciones en el esquema de interconexión y el circuito de destino que rodea a un microcontrolador, no hay un programador que funcione con todos los circuitos de destino o interconexiones posibles. Microchip proporciona una guía detallada de programación de ICSP [3]. Muchos sitios ofrecen ejemplos de programación y circuitos.
Los PIC se programan usando cinco señales (se proporciona un sexto pin 'auxiliar' pero no se usa). Los datos se transfieren utilizando un esquema en serie síncrono de dos cables, tres cables más proporcionan programación y potencia del chip. La señal del reloj siempre la controla el programador.
Señales y pinout
- V pp - Voltaje del modo de programación. Esto debe estar conectado al pin MCLR o al pin V pp del puerto ICSP opcional disponible en algunos PIC de gran cantidad de pines. Para poner el PIC en modo de programación, esta línea debe estar en un rango específico que varía de PIC a PIC. Para los PIC de 5 V, esto siempre es una cantidad superior a V dd , y puede ser tan alto como 13.5 V. Los PIC de solo 3.3 V como las series 18FJ, 24H y 33F usan una firma especial para ingresar al modo de programación y V pp es un señal digital que está en tierra o Vdd. No hay un voltaje V pp que esté dentro del rango V pp válido de todos los PIC. De hecho, el nivel mínimo de V pp requerido para algunos PIC puede dañar otros PIC.
- V dd : esta es la entrada de energía positiva al PIC. Algunos programadores requieren que esto sea proporcionado por el circuito (el circuito debe estar al menos parcialmente encendido), algunos programadores esperan manejar esta línea ellos mismos y requieren que el circuito esté apagado, mientras que otros pueden configurarse de cualquier manera (como el Microchip ICD2) . Los programadores de Embed Inc esperan manejar la línea V dd ellos mismos y requieren que el circuito de destino esté apagado durante la programación.
- V ss - Entrada de energía negativa al PIC y la referencia de cero voltios para las señales restantes. Los voltajes de las otras señales son implícitamente con respecto a V ss .
- ICSPCLK : línea de reloj de la interfaz de datos en serie. Esta línea oscila entre GND y V dd y siempre la controla el programador. Los datos se transfieren en el borde descendente.
- ICSPDAT : línea de datos en serie. La interfaz en serie es bidireccional, por lo que esta línea puede ser impulsada por el programador o el PIC dependiendo de la operación actual. En cualquier caso, esta línea oscila entre GND y Vdd. Un bit se transfiere en el flanco descendente de PGC.
- AUX / PGM : los controladores PIC más nuevos usan este pin para habilitar la programación de bajo voltaje (LVP). Manteniendo PGM alto, el microcontrolador entrará en modo LVP. Los microcontroladores PIC se envían con LVP habilitado, por lo que si usa un chip nuevo, puede usarlo en modo LVP. La única forma de cambiar el modo es utilizando un programador de alto voltaje. Si programa el microcontrolador sin conexión a este pin, el modo no cambia.
Pinout RJ11
Microchip admite un estándar de la industria para el uso de enchufes RJ11 con un programador ICSP. La ilustración representa la información proporcionada en sus hojas de datos. Sin embargo, hay lugar para la confusión. Las hojas de datos del PIC muestran un enchufe invertido y no proporcionan una vista gráfica de los pines, por lo que no está claro en qué lado del enchufe se encuentra el Pin 1. La ilustración proporcionada aquí no está probada, pero utiliza la distribución de pines estándar de la industria de los teléfonos (el enchufe / toma RJ11 fue desarrollado originalmente para teléfonos de escritorio con cable).