ICSP (In-Circuit Serial Programming) es una técnica de programación en circuito (ISP, In-System Programming) implementada en los microntrolodores de la marca Microchip que nos permite programar los microntroladores en la propia placa de aplicación mediante una señal síncrona de datos serie y una señal de reloj.

Sólo son necesarias 5 señales:

VPP: Tensión de programación.

VDD: Tensión de alimentación.

VSS: Masa.

DATA: Señal bidireccional síncrona con los datos de programación.

CLOCK: Señal de reloj generada por el programador.

La señales generadas por el programador no pueden ser conectadas directamente a los correspondientes pines del microcontrolador, es necesario realizar algunas modificaciones en la placa para aislarlas del resto del circuito y así garantizar que las señales no son distorsionadas por el circuito.

Para realizar el aislamiento se pueden usar diodos, resistencias, jumpers, interruptores o cualquier otro elemento que proporcione una separación adecuada entre entre las señales del programador y las señales del circuito de aplicación.

El siguiente esquema representa una implementación de ICSP para el microcontrolador PIC 16F84A, el pin 14 (VDD) es la tensión de alimentación, el pin 4 (MCLR) es la tensión de programación, el pin 13 (RB7) es la señal de datos y el pin 12 (RB6) es la señal de reloj. En esta implementación las señales RB6 y RB7 están disponibles para poder ser usadas como entradas, si en el circuito no se usan los pines RB6 o RB7, se puede eliminar la resistencia asociada al pin.

La tensión de alimentación está aislada del resto del circuito por medio del diodo D2, la tensión de programación está separada por el diodo D1 y la resistencia R3, los pines RB6 y RB7 se han aislado por medio de las resistencias de 10K R2 y R1 respectivamente. Al usar resistencias para aislar los pines RB6 y RB7, estos sólo pueden ser usados como entradas, si se habilitasen las resistencias internas de pull-up del puerto B se crearía un divisor de tensión que no puede obligar a reducir el valor de las resistencias de aislamiento para garantizar un nivel bajo en el pin cuando la entrada correspondiente está a nivel bajo.

ICSP 

La señales ICSP se obtienen del propio programador, algunos programadores ya incluyen un conector para ICSP. Si el programador no posee el conector, se pueden obtener directamente de los correspondientes pines de zócalo en el que insertaríamos el microcontrolador para programarlo.

En la imagen siguiente se muestra un programador TE-20 modificado para obtener las señales ICSP.

IMGP0695