¿Cómo quemo el gestor de arranque?

Respuestas:

15

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


Para grabar el gestor de arranque:

  1. Obtenga un AVR ISP , USBtinyISP , ParallelProgrammer u otra placa Arduino . Este será tu ISP.
  2. A menos que se indique lo contrario, conecte el ISP a los pines ICSP de su placa.
  3. Alimente su placa con un cable USB o una fuente de alimentación externa.
  4. Abre el IDE de Arduino.
  5. Asegúrese de haber seleccionado el tablero correcto en el que está grabando Tools ► Board ►en el IDE. Vuelva a verificar esto incluso si pudiera cargar programas correctamente; cargar no siempre requiere el tablero correcto.
  6. Seleccione el programador apropiado en Tools ► Programmer ►.
  7. Haz clic Tools ► Burn Bootloadery espera. No debería tomar más de un minuto y, a menudo, solo toma unos segundos.

Fuentes:

El chico con el sombrero
fuente
1
El AVRISP es prácticamente EOL (fin de vida útil) en este punto. Como mínimo, quieres 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.
Connor Wolf
En tableros como el Arduino Yun, cada vez que "carga a través de wifi", está quemando el cargador de arranque combinado con su boceto. Esto gracias al hecho de que la CPU de Linux está conectada al AVR MCU a través de SPI, para que pueda imitar un ISP con el software.
Federico Fissore
@FedericoFissore: ¿es por eso que tarda tanto?
TheDoctor
Sí, eso y el hecho de que GPIO bitbanging es más lento. Hay un esfuerzo continuo para acelerarlo.
Federico Fissore
8

¿Qué es un gestor de arranque?

¿Y qué es exactamente el gestor de arranque?

El gestor de arranque es un pequeño fragmento de código que reside en la parte "alta" de la memoria del programa. Normalmente no se borra cuando carga 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 corto tiempo (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 en conjunto con el programa de carga (normalmente avrdude), el nuevo boceto se envía a través del puerto serie. El gestor 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 el tablero.


Cómo reemplazar el gestor de arranque

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

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

La placa de "programación" ejecuta el boceto que tiene cargadores de arranque para varias placas codificadas. Conecta la placa de programación a la placa de destino (la placa que quiere el cargador de arranque) con 6 cables de conexión como se muestra.

Programador del gestor de arranque para Uno

Esa foto en particular ilustra uno Uno programando otro.

Ejecutas el boceto (operando a través del Monitor de serie para darle comandos). Primero identifica el chip objetivo:

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 presionas 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 lleva un segundo. Programar un Mega2560 toma 3 segundos.

Instrucciones detalladas en el programador del gestor de arranque Atmega

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

Nick Gammon
fuente
¿Tiene que seleccionar el tipo de chip que está quemando (Herramientas-> Tablero ...)? ¿Qué placa selecciono cuando estoy quemando el gestor de arranque para un chip independiente?
Camilo
Selecciona el tipo de placa que estás utilizando para grabar el gestor de arranque en el IDE. El boceto del gestor de arranque detecta automáticamente el tipo de placa de destino.
Nick Gammon