0% encontró este documento útil (0 votos)
47 vistas14 páginas

Arduino Como ISP y Cargadores de Arranque Arduino - Documentación de Arduino

Este documento explica cómo usar un Arduino como programador en circuito (ISP) para reprogramar otros chips Atmega. Describe el proceso de programar el cargador de arranque y los fusibles, y proporciona instrucciones sobre cómo conectar diferentes placas Arduino para este propósito.

Cargado por

edson quis
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
47 vistas14 páginas

Arduino Como ISP y Cargadores de Arranque Arduino - Documentación de Arduino

Este documento explica cómo usar un Arduino como programador en circuito (ISP) para reprogramar otros chips Atmega. Describe el proceso de programar el cargador de arranque y los fusibles, y proporciona instrucciones sobre cómo conectar diferentes placas Arduino para este propósito.

Cargado por

edson quis
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 14

Buscar en Documentos /

Inicio / Programación / Ejemplos integrados / Arduino como ISP y cargadores de


arranque Arduino

Arduino como ISP y cargadores de arranque


Arduino
Arduino ISP convierte su Arduino en un programador en circuito para reprogramar chips
AtMega.

Última revisión 02/09/2023

¿Qué hace que un Arduino sea lo que es? Muchas cosas, pero una de las más
importantes es la forma en que cada placa Arduino se programa fácilmente con
el software Arduino (IDE). Basta con conectarlo al puerto USB de la computadora
y presionar el ícono "Subir" para iniciar un proceso que transfiere tu boceto a la
memoria Flash del microcontrolador.

El cargador de arranque

El comportamiento descrito anteriormente ocurre gracias a un código especial


que se ejecuta en cada reinicio del microcontrolador y que busca un boceto para
cargar desde el puerto serie/USB utilizando un protocolo y una velocidad
específicos. Si no se detecta conexión, la ejecución se pasa al código de su
boceto.

Este pequeño fragmento de código (normalmente de 512 bytes) se llama


"cargador de arranque" y se encuentra en un área de la memoria del
microcontrolador (al final del espacio de direcciones) que no se puede
reprogramar como un boceto normal y se había diseñado para tal fin.
El mapa de memoria de un ATmega328P

Para programar el gestor de arranque y proporcionar al microcontrolador la


compatibilidad con el software Arduino (IDE) es necesario utilizar un
programador serie en circuito (ISP) que es el dispositivo que se conecta a un
conjunto específico de pines del microcontrolador para realizar la programación.
de toda la memoria flash del microcontrolador, incluido el gestor de arranque. El
procedimiento de programación del ISP también incluye la escritura de fusibles:
un conjunto especial de bits que definen cómo funciona el microcontrolador en
circunstancias específicas.

Utilice Arduino como ISP

Todo el proceso de cargar el código del gestor de arranque y quemar


correctamente los fusibles para convertir un microcontrolador ATmega en un
"Arduino" es gestionado por el software Arduino (IDE): proporciona un elemento
de menú específico y permite utilizar una variedad de dispositivos de
programación. Entre los programadores, el "Arduino como ISP" es la solución más
barata y práctica para grabar un gestor de arranque en otra placa Arduino con
ATmega, 32U4 o ATtiny.

El proceso de programación utiliza VCC, GND y cuatro pines de datos. Tres pines
conectan MISO, MOSI y SCK entre el micro de programación y el micro de destino,
el cuarto pin del micro de programación va al pin de reinicio del objetivo.

Cómo cablear tus tableros

La siguiente tabla muestra en qué pines se dividen MOSI, MISO y SCK en las
diferentes placas Arduino:

Placa Arduino MOSI MISO SCK Nivel

ONU o Duemilanove 11 o PEPPE-4 12 o PICS-1 13 o PEPEP-3 5V


Mega1280 o Mega2560 51 o PEPPE-4 50 o PICS-1 52 o PICS-3 5V

Placa Arduino MOSI MISO SCK Nivel

leonardo PEPEP-4 PEPEP-1 PEPEP-3 5V

Pendiente PEPEP-4 PEPEP-1 PEPEP-3 3,3 V

Cero PEPEP-4 PEPEP-1 PEPEP-3 3,3 V

101 11 o PEPPE-4 12 o PICS-1 13 o PEPEP-3 3,3 V

La interfaz SPI (y por tanto estos pines) es la interfaz utilizada para programar los
microcontroladores AVR. Tenga en cuenta que MISO, MOSI y SCK están
disponibles en una ubicación física consistente en el encabezado ICSP; Este
conector también es utilizado por escudos que dependen de la interfaz SPI
permitiendo el diseño de escudos que funcionan en cada placa.

En el Arduino UNO de la siguiente imagen hemos resaltado en rojo las


conexiones de las regletas hembra; en amarillo el conector ICSP que se conecta al
ATmega328P. Tenga en cuenta que la placa Rev.3 tiene un chip ATMega 16U2 que
administra la conexión USB y también ese chip se puede reprogramar a través de
un conector dedicado etiquetado ICSP2, justo encima del propio ATMega 16U2.
En algunas placas Arduino (consulte la tabla anterior), los pines MOSI, MISO y SCK
son los mismos pines que los pines digitales 11, 12 y 13, respectivamente. Es por
eso que muchos tutoriales le indican que conecte el objetivo a estos pines. Si este
cableado le resulta más práctico, defina USE_OLD_STYLE_WIRING. Esto funcionará
incluso cuando no se utilice UNO. (Con el tablero UNO esto no es necesario).
En la imagen de arriba, estamos conectando dos placas UNO para grabar el
gestor de arranque con las conexiones de "estilo antiguo": la placa superior es el
Objetivo, la placa inferior es el Programador. Tenga en cuenta la conexión
amarilla desde D10 del programador al RESET del objetivo. En la familia de placas
MKR, no puedes usar D10 para restablecer; sugerimos D6 y debes recordar cambiar la
línea 73 del boceto ArduinoISP - #define RESET 10 - poniendo "6" en lugar de 10.
Este Arduino NANO se programa a través de su conector ICSP con cables
provenientes de D10-D13 de la placa programadora UNO.

El Arduino MEGA anterior está programando un Arduino UNO conectando D51-


D11, D50-D12, D52-D13, GND-GND, 5V-5V y D10 para RESET. Este tipo de placa
necesita un condensador electrolítico de 10 µF conectado a RESET y GND con el
positivo (pata larga) conectado a RESET. El condensador debe colocarse después
de cargar la placa del programador con el boceto del ISP.

El condensador electrolítico de 10 µF conectado al RESET y GND de la placa de


programación es necesario sólo para las placas que tienen interfaz entre el
l d l d l d
microcontrolador y el USB de la computadora, como Mega, UNO, Mini, Nano.

Placas como Leonardo, Esplora y Micro, con el USB gestionado directamente por
el microcontrolador, no necesitan condensador.

Acerca de los voltajes

La familia de placas Arduino incluye dispositivos de 5V y 3,3V. Cuando utilice un


Arduino que no sea tolerante a 5 V (Due, Zero, ...) como programador, asegúrese
de no exponer ninguno de los pines del programador a 5 V. Una forma sencilla de
lograr esto es alimentar el sistema completo (programador y objetivo) a 3V3.

En la imagen de arriba se ve el cableado entre un MKR1000 y un UNO. Como se


describió anteriormente, todo funciona con 3.3V, tomados de VCC y GND del
MKR1000 y enviados a 5V y GND del UNO. La misma conexión podría realizarse
con el ICSP de la ONU siguiendo el pinout explicado en la página. Hemos utilizado
los mismos colores para los cables que en las otras imágenes para ayudarle a
cambiar del "cableado antiguo" al conector ICSP con facilidad. Tenga en cuenta
que la familia de placas MKR comparte el mismo pinout, por lo que puede utilizar
cualquier placa MKR como programador ISP. Si utiliza una placa MKR como
programador ISP, recuerde cambiar la línea 73 del ArduinoISP que define el pin
real utilizado en la placa MKR para restablecer el objetivo (6 en la imagen de
arriba).

Nota: No conecte las placas al USB ni a la fuente de alimentación mientras


configura las conexiones y los cables. También le sugerimos que primero
programe el Arduino utilizado como programador ISP antes de continuar
con el cableado a la placa de destino.

Cargar el boceto

El Arduino que utilizarás como programador necesita un boceto específico. Lo


encontrará en Ejemplos > 11. ArduinoISP > ArduinoISP.

Al recorrer las líneas del boceto, encontrará una serie de parámetros que deben
configurarse de acuerdo con el tablero de destino. Sin embargo, estos
parámetros se configuran mediante un archivo específico disponible para cada
gestor de arranque/placa compatible con el software Arduino (IDE). Otros
parámetros se explican claramente en los comentarios y solo deben cambiarse si
sabe lo que está haciendo. El boceto también admite tres LED que le brindan
información visual sobre el proceso de programación.
Para cargar el boceto en su placa Arduino, la que utilizará como programador,
debe seleccionar el tipo de placa y el puerto, luego podrá continuar como de
costumbre.

Programar el gestor de arranque

Si todos los cables están configurados, debe cambiar al tipo de placa que desea
programar con el gestor de arranque. Este paso es obligatorio para seleccionar el
código de arranque adecuado y las configuraciones de fusibles. El procedimiento
de programación verifica la firma del microcontrolador antes de realizar
cualquier acción de escritura, pero muchas placas comparten el mismo
microcontrolador y cada placa tiene su propio gestor de arranque. El puerto
sigue siendo el del ArduinoISP.

Elija "Grabar gestor de arranque" en herramientas y espere el mensaje de


confirmación en la parte inferior de la interfaz del software Arduino (IDE). Si
conectó los LED, puede seguir el proceso visualmente.
El modo de programación en serie

El proceso de programación gestiona las tres líneas SPI (MISO, MOSI y SCK) según
el protocolo de programación estándar SPI, el mismo que se utiliza para leer y
escribir tarjetas de memoria SD. La única diferencia con las tarjetas de memoria
es la falta de un pin CS (selección de chip). En nuestros microcontroladores AVR
utilizamos el pin RESET que detiene la ejecución de cualquier sketch o gestor de
arranque y pone el microcontrolador en un estado específico donde escucha los
comandos que llegan desde la interfaz SPI. El primer comando que requiere el
protocolo es el que ingresa al microcontrolador en el Modo de Programación Serial
.

Una vez activo este modo específico, podremos escribir y leer todas las áreas
programables del microcontrolador: Flash, EEPROM y Fusibles. Al final de la
memoria Flash, tenemos la zona del código del gestor de arranque, como se
destaca en la imagen al principio de este artículo. El procedimiento "Burn
Bootloader" también configura correctamente los fusibles del microcontrolador
según el diseño de la placa. Esta es una de las razones por las que tienes que
grabar el gestor de arranque seleccionando el modelo exacto de tu placa en la
lista.

Aspectos técnicos de la programación


Aspectos técnicos de la programación.

La herramienta de software de código abierto utilizada para programar el


microcontrolador es avrdude . El proceso pasa por cuatro pasos: desbloquear la
sección del gestor de arranque del chip, configurar los fusibles en el chip, cargar
el código del gestor de arranque en el chip y volver a bloquear la sección del
gestor de arranque del chip.

Los fusibles se gestionan según las preferencias almacenadas en cada archivo de


parámetros asociado a la placa, evitando posibles errores.

La gestión de los fusibles, normalmente un conjunto de tres bytes (bajo, alto y


extendido), es el aspecto más delicado de la programación del gestor de
arranque: una configuración incorrecta de los fusibles podría bloquear el
microcontrolador y la placa. Los fusibles definen muchos aspectos de las
funciones del microcontrolador, como: seleccionar diferentes fuentes de reloj y
cambiar la velocidad del chip, configurar el voltaje mínimo requerido antes de
que el chip funcione (apagón), configurar si se usa o no un gestor de arranque,
configurar cuánta memoria se asigna al cargador de arranque (de 256 a 2048
palabras, de 512 a 4096 bytes), deshabilitando el reinicio o la programación en
serie y deteniendo el borrado de datos EEPROM al cargar un nuevo boceto.

La descripción detallada de los fusibles se puede encontrar en la hoja de datos


de cada microcontrolador.

Cada configuración tiene su propio uso y es lógico permitir que el desarrollador


bloquee el chip y lo proteja de la programación del ISP, pero podría ocurrir que
por error se colocara un fusible de manera incorrecta, bloqueándolo del proceso
de programación a través de la interfaz del ISP. . Para recuperar el
microcontrolador hay que confiar en un Programador Serial de Alto Voltaje que
utiliza 12V para resetear los fusibles.

Resumen: queme el gestor de arranque en 8 pasos

Abra el firmware ArduinoISP (en ejemplos) en su placa Arduino.

Nota para Arduino 1.0: debe realizar un pequeño cambio en el código Ardu
inoISP. Busque la línea en la función heartbeat() que dice "delay(40);" y cám
bielo a "retraso (20);".

Seleccione los elementos en los menús Herramientas > Placa y Puerto serie
que corresponden a la placa que está utilizando como programador (no a l
a placa que se está programando).

Sube el boceto de ArduinoISP.

Conecte sus placas Arduino.

Seleccione el elemento en el menú Herramientas > Placa que corresponde


a la placa en la que desea grabar el gestor de arranque (no la placa que est
á utilizando como programador). Consulte las descripciones de la placa en l
a página de entorno para obtener más detalles.

Seleccione Arduino como ISP en el menú Herramientas>Programador.

Utilice el comando Grabar cargador de arranque.

Aprende más

Puede encontrar tutoriales más básicos en la sección de ejemplos integrada .

También puedes explorar la referencia del lenguaje , una colección detallada del
lenguaje de programación Arduino.

Última revisión: 20/01/2018 por SM

Sugerir cambios ¿Necesita ayuda? Licencia


El contenido de docs.arduino.cc se Centro de ayuda La documentación de Arduino tie
facilita a través de un repositorio Pregunta en el foro Arduino la licencia Creative Commons
público de GitHub . Si ve algo Attribution-Share Alike 4.0 .
Descubra la discordia de
incorrecto, puede editar esta
Arduino
página aquí .
© 2024 Arduino Términos de servicio política de privacidad Seguridad Configuración de cookies

También podría gustarte