(redirected from Main.Bootloader)

Learning   Examples | Foundations | Hacking | Links

Desarrollo del gestor de arranque.

¿Que es un gestor de arranque?

Vea esta página para una explicación mas completa de que es un gestor de arranque y por que necesitamos usar uno.

Uso sin gestor de arranque.

Si quieres utilizar el total de la memoria disponible para tus programas o evitar el retraso que se produce al encender la placa puedes utilizar cargar tus sketches utilizando un programador externo.

Grabando el gestor de arranque.

Para grabar un gestor de arranque necesitaras comprar un AVR-ISP ( programador "in-system" ), USBtinyISP o construir un programador paralelo. El programador se puede conectar la los pines ICSP ( las 2 filas de 3 pines ) - Asegurate de de conectarlo de la forma correcta. La placa debe ser alimentada por una fuente de energía externa o directamente por un cable USB.

También debes asegurarte de tener correctamente seleccionada la opción correcta en el menú Tools | Board. Por último solo hay que lanzar el comando apropiado desde el menú Tools > Burn Bootloader del Arduino IDE. Grabar un gestor de arranque puede durar 15 segundos o más, así que se paciente.

Grabando el gestor de arranque en una Arduino Mini.

Aquí están las instrucciones para grabar el gestor de arranque, gracias a Gian Pablo Vilamil.

Esto todavía no funciona! (programador paralelo con Windows XP).

Windows XP puede causar problemas en el puerto paralelo e interrumpir el proceso de grabación del gestor de arranque. Necesitas este parche:

 
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Parport\Parameters]
"DisableWarmPoll"=dword:00000001

Mira en este hilo del foro para mas detalles.

Versiones del gestor de arranque.

Hay diferentes versiones del gestor de arranque para trabajar sobre dispositivos diferentes o por que han cambiado a lo largo del tiempo.

Los gestores de arranque actuales ( p. e. el incluido en la versión Arduino 0009) son prácticamente idénticos para la Diecimila y la NG (con ATmega168). Ambos corren a 19200 baudios y ocupan unos 2 KB de memoria flash en el ATmega168. La única diferencia está en el tiempo que el gestor de arranque espera para que un nuevo programa llegue y el numero de destellos que emite el LED del pin 13 cuando arranca. Por que en el reseto automático de la Diecimila este gestor de arranque emplea muy poco tiempo de espera, menos de un segundo, y para ahorrar tiempo el LED del pin 13 solo destella una vez. El gestor de arranque de la NG espera de 6 a 8 segundos y el LED del pin 13 destella 3 veces.

El gestor de arranque que actualmente carga la Arduino NG es ligeramente diferente. Este activa la resistencia interna pull-up en el pin RX. Tampoco espera después de recibir datos no validos, así que si le envías datos inmediatamente después de que se resetee tu sketch nunca se ejecutará.

El gestor de arranque del Arduino BT hace una configuración inicial del módulo bluetooth.

El gestor de arranque del ATmega8 sólo ocupa 1 KB de memoria flash. Este tampoco espera después de recibir datos no validos, necesitas estar seguro de que no le envías nada durante los 6 u 8 segundos que tarda en ejecutarse.

Algunas versiones antiguas del gestor de arranque funcionan a 9600 baudios (en lugar de 19200). Para asegurarnos el éxito a la hora de cargar sketches con este gestor de arranque necesitamos cambiar el valor del parámetro serial.download_rate en el archivo preferencias a 9600.

Terceras partes han hecho modificaciones en el gestor de arranque. Esta página contiene enlaces a algunos de ellos.

¿Como trabaja?.

Los comandos "Burn Bootloader" en el entorno Arduino utilizan una herramienta open-source, avrdude. Hay cuatro pasos: desbloquear la sección del gestor de arranque en el chip, fijar los fusibles en el chip, subir el código del gestor de arranque al chip y bloquear la sección del gestor de arranque en el chip. Esto está controlado por determinados parámetros del archivo de preferencias.

Para el gestor de arranque del ATmega8 son:

  • bootloader.atmega8.programmer (valor por defecto: stk500) es el protocolo usado por el gestor de arranque.

  • bootloader.atmega8.unlock_bits (valor por defecto: 0xFF) es el valor para escribir en el ATmega8 un byte de bloqueo para desbloquear la sección del gestor de arranque.

  • bootloader.atmega8.high_fuses (valor por defecto: 0xca) escribe un byte alto en los fusibles del ATmega8.

  • bootloader.atmega8.low_fuses (valor por defecto: 0xdf) escribe un byte bajo en los fusibles del ATmega8.

  • bootloader.atmega8.path (valor por defecto: bootloader) es el subdirectorio (relativo al directorio en que se encuentra la aplicación Arduino) que contiene el gestor de arranque precompilado.

  • bootloader.atmega8.file (valor por defecto: ATmegaBOOT.hex) es el nombre del fichero que contiene el código precompilado del gestor de arranque (en bootloader.path).

  • bootloader.atmega8.lock_bits (valor por defecto: 0x0F) es el valor para escribir un byte de bloqueo para la sección del gestor de arranque del ATmega8 (para no sobreescribir accidentalmente sobre ella al grabar un sketch).

Para el ATmega168, estos son (donde <BOARD> es según corresponda "diecimila" o "ng"):

  • bootloader.atmega168-<BOARD>.programmer (valor por defecto: avrispmkii) es el protocolo usado por el bootloader.

  • bootloader.atmega168-<BOARD>.unlock_bits (valor por defecto: 0x3F) es el valor para escribir en el ATmega168 un byte de bloqueo para desbloquear la sección del gestor de arranque.

  • bootloader.atmega168-<BOARD>.extended_fuses (valor por defecto: 0x00) es el valor para escribir un byte alto en los fusibles del ATmega168.

  • bootloader.atmega168-<BOARD>.high_fuses (valor por defecto: 0xdd) es el valor para escribir un byte alto en los fusibles del ATmega168.

  • bootloader.atmega168-<BOARD>.low_fuses (valor por defecto: 0xff) es el valor para escribir un byte bajo en los fusibles del ATmega168.

  • bootloader.atmega168-<BOARD>.path (valor por defecto: bootloader168) es el subdirectorio (relativo al directorio de la aplicación Arduino) que contiene el gestor de arranque precompilado.

  • bootloader.atmega168-<BOARD>.file (valor por defecto: ATmegaBOOT_168_<BOARD>.hex) es el nombre del fichero que contiene el bootloader precompilado (en bootloader.path).

  • bootloader.atmega168-<BOARD>.lock_bits (valor por defecto: 0x0F) es el valor para escribir en el ATmega168 un byte de bloqueo en la sección del gestor de arranque (para no escribir sobre ella por error al grabar un sketch).

Código fuente.

El código fuente del gestor de arranque.

Share