La programación en sistema (ISP), o también llamada programación serial en circuito (ICSP), es la capacidad de algunos dispositivos lógicos programables , microcontroladores , chipsets y otros dispositivos integrados de programarse mientras están instalados en un sistema completo, en lugar de requerir que el chip se programe antes de instalarlo en el sistema. También 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 circuitos, y simplifica el trabajo de diseño. [1]
No existe un estándar para los protocolos de programación en el sistema para programar dispositivos con microcontroladores . Casi todos los fabricantes de microcontroladores admiten esta característica, pero todos han implementado sus propios protocolos, que a menudo difieren incluso para diferentes dispositivos del mismo fabricante. En general, los protocolos modernos intentan mantener baja la cantidad de pines utilizados, normalmente a 2 pines. Algunas interfaces ISP logran lo mismo con un solo pin, otras usan hasta 4 para implementar una interfaz JTAG .
La principal ventaja de la programación en el sistema es que permite a los fabricantes de dispositivos electrónicos integrar la programación y las pruebas en una única fase de producción y ahorrar dinero, en lugar de requerir una etapa de programación independiente 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 a un fabricante o distribuidor, lo que hace posible aplicar cambios de código o diseño en medio de una tirada de producción. La otra ventaja es que la producción siempre puede utilizar el firmware más reciente y se pueden implementar nuevas funciones, así como correcciones de errores, y ponerlas en producción sin el retraso que se produce cuando se utilizan microcontroladores preprogramados.
Los microcontroladores generalmente se sueldan directamente a una placa de circuito impreso y no suelen tener los circuitos ni 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 se comunican 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 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 unión moderadamente grande , los diseñadores pueden implementar un subsistema de programación controlado por JTAG para dispositivos que no sean JTAG, como memoria flash y microcontroladores, lo que permite que todo el procedimiento de programación y prueba se realice bajo el control de un solo protocolo.
A partir de principios de los años 90 se ha producido una importante evolución tecnológica en la arquitectura de los microcontroladores. En un principio se realizaban en dos posibles soluciones: con memorias OTP (programables una sola vez) o con memorias EPROM . En las EPROM, el proceso de borrado de la memoria requiere que el chip se exponga a la luz ultravioleta a través de una ventana específica situada encima del encapsulado. 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 costes de realización eliminando la ventana de borrado situada encima del encapsulado 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 en entornos de producción y de iniciar la producción preliminar de las placas incluso si el desarrollo del firmware aún no se ha completado. 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 suelen estar provistos de pines que utiliza el periférico de comunicación serial 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 placas electrónicas para programación ISP es necesario tener en cuenta algunas pautas para que la fase de programación sea lo más fiable 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 puede suponer un problema si no se tienen 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 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 RESET dedicada para entrar en el modo de programación. Es necesario prestar atención a la corriente suministrada para el pilotaje de la línea y comprobar la presencia de watchdogs conectados a la línea RESET que pueden generar un reset no deseado y, por tanto, provocar un fallo de programación. Además, algunos microcontroladores necesitan un voltaje más alto para entrar en el Modo de Programación y, por lo tanto, es necesario verificar que este valor no se atenúe y que este voltaje no se transmita a otros componentes de la placa.
El proceso de Programación en Sistema tiene lugar durante la etapa final de producción del producto y se puede realizar de dos maneras diferentes según los volúmenes de producción.
En el primer método, se conecta manualmente un conector al programador. Esta solución prevé la participación humana en el proceso de programación, que consiste en conectar el programador a la placa electrónica mediante el cable. Por lo tanto, esta solución está pensada para volúmenes de producción reducidos.
El segundo método utiliza puntos de prueba en la placa. Se trata de zonas específicas situadas 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 de los componentes montados en la placa y, dado que están conectados directamente a algunos pines del microcontrolador, son muy eficaces para la 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 placas se colocan sobre una cama de clavos llamada fixation . Estos últimos se integran, en función de los volúmenes de producción, en sistemas de prueba semiautomáticos o automáticos llamados ATE (automatic test equipment) . Los fixation están diseñados específicamente para cada placa -o como máximo para unos pocos modelos similares a la placa para la que fueron diseñados- por lo que son intercambiables en el entorno del sistema donde se integran. El sistema de prueba, una vez colocada la placa y el fixation en posición, dispone de un mecanismo para poner en contacto las agujas del fixation con los Test Points de la placa a probar. El sistema está conectado, o tiene directamente integrado 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 serial.
En la mayoría de los microcontroladores de Microchip, la programación ICSP se realiza utilizando dos pines, reloj (PGC) y datos (PGD), mientras que en el pin Vpp/MCLR hay un alto voltaje (12 V). La programación de bajo voltaje (5 V o 3,3 V) prescinde del alto voltaje, pero reserva el uso exclusivo de un pin de E/S. Sin embargo, en los microcontroladores más nuevos, en concreto en las familias de microcontroladores PIC18F6XJXX/8XJXX de Microchip Technology , entrar en los modos ICSP es un poco diferente. [2] Entrar en el modo Programar/Verificar ICSP requiere los tres pasos siguientes:
Se necesita un componente de hardware independiente, llamado programador, para conectarse a un puerto de E/S de una PC en un lado y al PIC en el otro. A continuación, se muestra una lista de las características de cada tipo de programación principal:
Los programadores ICSP tienen muchas ventajas, siendo el tamaño, la disponibilidad de puertos de computadora y la fuente de alimentación las principales características. Debido a las variaciones en el esquema de interconexión y el circuito de destino que rodea a un microcontrolador, no existe ningún programador que funcione con todos los circuitos de destino o interconexiones posibles. Microchip Technology ofrece una guía detallada de programación ICSP [3] . Muchos sitios ofrecen ejemplos de programación y circuitos.
Los PIC se programan utilizando cinco señales (se proporciona un sexto pin "auxiliar", pero no se utiliza). Los datos se transfieren utilizando un esquema serial sincrónico de dos cables, tres cables más proporcionan programación y alimentación al chip. La señal de reloj siempre está controlada por el programador.
Microchip admite un estándar industrial para el uso de conectores RJ11 con un programador ICSP. La ilustración representa la información proporcionada en sus hojas de datos. Sin embargo, existe margen de confusión. Las hojas de datos de PIC muestran un conector invertido y no proporcionan una vista gráfica de las asignaciones de pines, por lo que no está claro en qué lado del conector se encuentra el pin 1. La ilustración que se proporciona aquí no se ha probado , pero utiliza la asignación de pines estándar de la industria telefónica (el conector/conector RJ11 se desarrolló originalmente para teléfonos de escritorio con cable).