¿Por qué algunos circuitos integrados son programables en circuito, pero otros no?

¿Por qué algunos circuitos integrados son programables mientras aún están conectados en un sistema/circuito, pero otros no? ¿Cuáles son los factores determinantes para que un chip pueda o no?

Esta pregunta surge de mi investigación sobre los encabezados ICSP y, en particular, de una declaración que dice que "en la mayoría de los casos, ni siquiera es necesario quitar la MCU de su circuito primero [para programarla a través de un encabezado ICSP]".

Fuente

Editar: Esto está relacionado con AVR ISP/ISCP.

Nunca tuve que quitar la MCU del sistema al programar a través de ICSP o mediante pines Tx/Rx; Personalmente, no he practicado la eliminación de la MCU del sistema antes de la programación.
Bueno, si conecta el pin RX a tierra, por ejemplo, será difícil programarlo en el circuito.

Respuestas (2)

Depende del circuito. Si los pines del ISP no están rotos o accesibles, deberá quitar el chip. Si los pines ISP, esencialmente SPI, se utilizan para algo que interfiere con la programación, se debe quitar el chip. Si los pines del ISP se utilizan como GPIO y están vinculados a un nivel alto o bajo, eso podría alterar la programación.

Si de alguna manera estropeó un circuito y conectó un pin ISP a vcc/tierra, eso ciertamente requeriría que se quitara el chip.

Si estropea un fusible donde el ISP de bajo voltaje no puede repararlo, debe recurrir al modo de programación de alto voltaje, que a 12v podría matar algunos circuitos, querrá quitar el chip.

El ISP requiere que el chip AVR objetivo se ejecute al menos 4 veces más rápido que el reloj del ISP. Si no es así, no se puede utilizar el ISP.

En las hojas de datos de PIC sugiere usar una resistencia, 10k?, luego el ISP puede "sobrealimentar" la resistencia.
@Spoon, una resistencia en serie o pull up/down, pero las conexiones directas a vcc o gnd no se pueden sobrescribir.
Sí, eso era lo que pretendía decir... pero me equivoqué.

Algunos chips usan voltajes fuera de los parámetros operativos normales para la programación, ya sea porque el circuito de programación necesita voltajes más altos que el funcionamiento normal o porque dicho diseño evitará la posibilidad de que una pieza ingrese accidentalmente al modo de programación durante la operación. Tal diseño puede dificultar la programación en circuito.

Algunos chips requieren el uso de muchos pines para la programación. Para programar un PIC 16C54 de 18 pines, por ejemplo, se requiere el uso de VDD y VSS (obviamente), MCLR para activar el modo de programación (impulsar a 12 voltios), los 12 pines de E/S para ingresar datos, el pin RTCC para actuar como una luz estroboscópica de lectura/escritura, la entrada del reloj para avanzar direcciones. El único pin que no se usa para la programación es la salida del reloj. Programar un dispositivo de este tipo en el circuito generalmente requeriría desconectar tantos de sus pines de otras funciones que generalmente no valdría la pena el esfuerzo.

Como mínimo, tener un dispositivo compatible con la programación en circuito generalmente requiere como mínimo que incluya alguna forma de aislar cualquier memoria programable interna de cualquier circuito que normalmente intente usarla. Esto no tiene por qué ser demasiado complicado, pero puede ser difícil en dispositivos que intentan ser lo más rápidos posible durante el funcionamiento normal. En algo como el PICC 16C54, el almacén de códigos no necesitaba ningún circuito de direccionamiento especial para la programación; en cambio, cuando MCLR se elevó a 12 voltios, eso obligó efectivamente al procesador a ejecutar instrucciones NOP, por lo que su contador de programa podría usarse para proporcionar direcciones. Se necesitaba agregar una ruta bidireccional conmutable entre los pines de E/S y los cables de datos del almacén de código, pero eso no tendría que deshabilitar las rutas normales tomadas por esas señales (ya que los pines de E/S están predeterminados en flotante, y el comportamiento de "forzar NOP" (también utilizado por las instrucciones de omisión) significaba que cualquier código que llegara al pestillo de instrucciones sería ignorado. Permitir la programación en circuito requeriría que el modo de programación afectara la funcionalidad de más circuitos.