¿Cómo grabo el cargador de arranque?

Se me indicó que «quemara el gestor de arranque» en mi Arduino para corregir un error que recibía. ¿Cómo puedo hacer esto? (¿Y qué es exactamente el gestor de arranque?)

Comentarios

Respuesta

El gestor de arranque es un pequeño programa que (casi) siempre en un Arduino. Gestiona la carga e inicio de los bocetos que realiza, y hace parpadear el LED del pin 13 cada vez que se reinicia la placa.


Para grabar el gestor de arranque:

  1. Obtenga un AVR ISP, USBtinyISP , ParallelProgrammer , o similar; o use otra placa Arduino . Este será su ISP.
  2. A menos que se le indique lo contrario, conecte el ISP a los pines ICSP en su placa.
  3. Encienda su placa con un cable USB o una fuente de alimentación externa.
  4. Abra el IDE de Arduino.
  5. Asegúrese de seleccionar la placa correcta en la que está grabando en Tools ► Board ► en el IDE. Vuelva a verificar esto incluso si pudiera cargar programas correctamente; la carga no siempre requiere la placa correcta.
  6. Seleccione el programador apropiado en Tools ► Programmer ►.
  7. Haga clic en Tools ► Burn Bootloader y espere. No debería tomar más de un minuto y, a menudo, solo toma unos segundos.

Fuentes:

Comentarios

  • El AVRISP es prácticamente EOL (final de la vida) en este punto. Como mínimo, desea un AVRISPmk2. También hay muchas otras herramientas más sofisticadas (¡AVR One! Por ejemplo). Probablemente deberías decir {line 1} or other dedicated ISP programmer.
  • En placas como Arduino Yun, cada vez que " subes a través de wifi ", ' estás grabando el cargador de arranque combinado con tu boceto. Esto gracias al hecho de que la CPU de Linux está conectada al AVR MCU a través de SPI, por lo que puede imitar a un ISP con software.
  • @FedericoFissore, ¿es por eso que toma tanto tiempo?
  • Sí, eso y el hecho de que el bitbanging GPIO es más lento. Hay un esfuerzo continuo para acelerarlo.

Respuesta

¿Qué es un cargador de arranque?

¿Y qué es exactamente el gestor de arranque?

El cargador de arranque es una pequeña pieza de código que reside en la parte «alta» de la memoria del programa. Normalmente no se borra al cargar nuevos bocetos. Su propósito es que se active inmediatamente después de un reinicio (los fusibles están configurados para comenzar el código en la dirección del cargador de arranque en lugar de la dirección 0x0000). El gestor de arranque esperará un poco (como un segundo) para ver si los datos de «programación» están llegando al puerto serie.

  • Si es así, lee esos datos y los decodifica para reprogramar el resto de la memoria flash. Trabajando junto con el programa de carga (normalmente avrdude), el nuevo boceto se envía a través del puerto serie. El cargador de arranque borra las páginas de la memoria flash y las reemplaza con el nuevo código. Una vez hecho esto, ejecuta el nuevo código.

  • Si no llegan instrucciones, el gestor de arranque salta a la dirección 0x0000 para ejecutar el boceto existente en la placa.


Cómo reemplazar el cargador de arranque

Un método alternativo para programar un cargador de arranque es usar un boceto que escribí hace un tiempo que se ejecuta en:

  • Uno (o similar, como Duemilanove)
  • Leonardo
  • Mega2560

El tablero de «programación» ejecuta el boceto que tiene cargadores de arranque para una serie de placas codificadas de forma rígida. Conecta la placa de programación a la placa de destino (la placa que desea el cargador de arranque) con 6 cables de conexión como se muestra.

Programador de cargador de arranque para Uno

Esa foto en particular ilustra un Uno programando otro.

Usted ejecuta el boceto (operando a través del Monitor Serial para darle comandos). Primero identifica el chip de destino:

Atmega chip programmer. Written by Nick Gammon. Entered programming mode OK. Signature = 0x1E 0x95 0x0F Processor = ATmega328P Flash memory size = 32768 bytes. LFuse = 0xFF HFuse = 0xDE EFuse = 0xFD Lock byte = 0xCF Bootloader address = 0x7E00 Bootloader length = 512 bytes. Type "L" to use Lilypad (8 MHz) loader, or "U" for Uno (16 MHz) loader ... Type "G" to program the chip with the bootloader ... 

Luego presiona G para programarlo.

Erasing chip ... Writing bootloader ... Committing page starting at 0x7E00 Committing page starting at 0x7E80 Committing page starting at 0x7F00 Committing page starting at 0x7F80 Written. Verifying ... No errors found. Writing fuses ... LFuse = 0xFF HFuse = 0xDE EFuse = 0xFD Lock byte = 0xCF Done. Type "C" when ready to continue with another chip ... 

Para un Uno, esto toma un segundo. Programar un Mega2560 toma 3 segundos.

Instrucciones detalladas en Programador del cargador de arranque Atmega

El código se puede descargar desde Github: nickgammon / arduino_sketches

Comentarios

  • Tienes que seleccionar el tipo del chip que está quemando (Herramientas- > Tablero ..)?¿Qué placa selecciono cuando estoy grabando el cargador de arranque en un chip autónomo?
  • Usted selecciona el tipo de placa que está usando para grabar el cargador de arranque en el IDE. El boceto del cargador de arranque detecta automáticamente el tipo de placa de destino.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *