Programar Arduino por ICSP
Una opción extendida de nuestras placas Arduino; así como de otros muchos dispositivos lógicos programables o microcontroladores, es la programación por ICSP (In-Circuit Serial Programming).
La programación ICSP es un modo de programación a través de unos pines muy concretos, ya que antes para algunios microcontroladores era preciso de un programador externo para cualquier modificación. Esto representaba un problema al realizar cambios durante la fase de producción.
En muchas ocasiones se puede confundir el protocolo SPI con la programación por ICSP. SPI es un protocolo; como el I2C; que comunica con otros componentes paraa conectar con una placa Arduino; por ejemplo, una tarjeta SD, una pantalla TFT… Pero aprovecha los mismos pines de conexión ICSP para la transmisión de datos.
La conexión por ICSP tiene como objetivo habilitar el modo de programación de microcontroladores; en el caso de Arduino, el Atmega328 con acceso a la memoria del AVR. Con este modelo ICSP podríamos programar cualquier otro microcontrolador conectado a nuestra placa Arduino.
Por lo que la conexión ICSP NO ES UN PROTOCOLO.
*A la comunición por ICSP, también se le puede denominar ISP (In-system programming)
ICSP ( In Circuit Serial Programming )
Para programar distintos componentes por ICSP, primero vamos a tener que establecer qué tipos de pines necesitamos conectar. Los pines de conexión por ICSP se encuentran agrupados con 6 pines indicados:
- MISO – Master In Slave Out
- MOSI – Master Out Slave In
- SCK – Signal Clock
- RESET – El reset es un pin activo siempre que queremos cargar un nuevo programa a la placa
- VCC – Voltaje
- GND – Tierra
También existe la posibilidad de aprovechar una derivación de estos pines a través de los pines digitales del 11 al 13 para la Arduino UNO que se corresponden con las conexiones MISO, MOSI y SCK. Hay que tener en cuenta que estos pines son diferentes para cada una de las placas.
*Aunque aparezca como conexión SPI, recordamos que los pines ICSP son los mismos a excepción del pin 10 marcado como SS (Slave Select) que forma parte del protocolo SPI ( NO ISP ).
Las posibilidades del ICSP
Vamos a realizar 3 ejercicios que podemos realizar con este nuevo modelo de comunicación mediante formatos diferentes.
- Primeros auxilios Arduino – Cargar Bootloader – Formato Serial USBasp
- Programar Arduino por ICSP – Arduino as ISP
- Programar microcontroladores por ICSP – Arduino as ISP
Cuando vamos a programar una placa Arduino, tenemos que seleccionar un primer componente como programador y el segundo componente que será el microcontrolador a programar.
First Aid Arduino – Burn Bootloader
Una de las utilidades que podemos aprovechar de este formato de programación es la recuperación de algunas de nuestras placas Arduino.
En ocasiones puede ocurrir que el puerto serie por defecto de nuestra placa, haya dejado de funcionar, que no detecte el puerto. En definitiva, que no se cargue correctamente nuestro programa de la forma habitual.
Una de las opciones finales que tenemos disponibles es recargar el bootloader al microcontrolador para que vuelva a funcionar nuestra placa.
Para ello necesitaremos conectar un componente de programación USB directo de nuestro ordenador a nuestra placa por ICSP.
Hay que tener en cuenta que los conectores vienen con una faja de 10 pines, mientras que el conector por ICSP viene con 6 pines. Por lo que necesitaremos además de un conversor en la faja para conectarlo directamente a nuestra placa.
Una vez que consigamos realizar la conexión del cableado, nos podemos dirigir a nuestro IDE de Arduino y sin necesidad de programar nada, presionaremos las siguientes opciones para quemar el Bootloader y resucitar nuestras placas zombies.
Primero hemos de elegir el programador que hemos configurado, en nuestro caso será es USBasp. El USBtinyISP también se encuentra disponible dependiendo del programador que compremos.
Una vez que hemos conectado y configurado el programador, solamente nos queda presionar el boton «Burn Bootloader»
Es posible que puedan aparecer algunos mensajes de error. Hay que asegurarse bien de que los cables se encuentran conectados de la manera correcta y reintentando al final conseguiremos que nuestras placas se puedan volver a usar.
Arduino Zombie
En el caso de que por algún otro motivo no podamos recuperar la placa; por ejemplo en el caso de que el USB de Arduino no haga comunicación de ninguna forma, podemos cargar nuestros programas de la misma manera con este programador USB por ICSP.
En estos casos, podemos hacer que nuestra placa forme parte de un proyecto que sepamos que no vamos a querer modificar nunca más como para volver a conectar por ICSP.
A estas placas las llamamos Arduinos Zombies.
Programar Arduino por ISP
Para programar otras placas Arduino, podemos usar a su vez otra placa Arduino.
Imaginemos que no hemos comprado un conector USB ICSP como el que hemos explicado anteriormente. Pues no pasa nada, ya que podemos usar este mismo modelo de conexión ICSP para cargar nuestras placas como si el primer Arduino fuese el programador y el segundo nuestro microcontrolador objetivo.
Existen distintas formas de conectar unas con otras conociendo los pines ICSP de cada una. En las siguientes imágenes dejamos unos ejemplos para fijarnos en las distintas alternativas posibles que se basan simplemente en conectar los mismos pines MISO, MOSI, SCK, RESET, GND y VCC de una con otra.
IMPORTANTE: Para ejecutar el funcionamiento de una placa como programador era necesario sacar el microcontrolador de nuestra placa. Actualmente los microcontroladores están soldados.
Una vez realizado nuestro esquema de conexión, solamente tenemos que elegir la configuración «Arduino as ISP» y podemos volver a ejecutar las utilidades para quemar bootloader o subir programas que hemos visto anteriormente.
Programar microcontroladores por ICSP
En el nivel más avanzado de programación de microcontroladores, si somos de la vieja escuela y nos gusta trabajar con microcontroladores a parte de las placas, podemos usar nuestra placa Arduino como programador sobre el microcontrolador.
Nos basaríamos en los mismos esquemas que hemos visto anteriormente conectando los pines ICSP de nuestra placa al del microcontrolador objetivo.
Recomendamos encarecidamente buscar más información para la programación de microcontroladores en libros o documentación en Internet, debida a su extensión y el cambio de paradigma en cuanto a la programación en cada caso de uso.
Uno de los libros más útiles para usar Arduino con Microcontroladores AVR es Make AVR Programming, aunque existen otras muchas posibilidades extendidas a la programación de microcontoladores.
Una vez completado este curso, puedes seguir creando proyectos y aprendiendo en nuestra sección de cursos.
Los ejercicios de código, proyectos y recursos que desarrollaremos durante el curso se pueden consultar a través de nuestro Github.