¿Qué alternativas hay para el gestor de arranque Optiboot?


12

Casi todas las placas Arduino modernas usan el gestor de arranque Optiboot . En comparación con el ATmegaboot utilizado anteriormente, este es más pequeño en términos de flash (aproximadamente 1.5KB) y más rápido en velocidad de carga (115.2k vs 57.6k) e inicia su boceto más rápido (el retraso mientras espera después del reinicio es más corto).

¿Hay alguna alternativa al gestor de arranque Optiboot? Específicamente, ¿hay algún cargador de arranque más pequeño (en términos flash)? ¿Qué diferencias tienen?

Respuestas:


8

Optiboot es el cargador de arranque más pequeño disponible.

Pero hay un cargador de arranque mucho más potente (con consola incorporada para pruebas de hardware, comprobación de contenido de RAM y Flash, etc.) con un protocolo de comunicaciones stk500v2 más desarrollado y robusto entre avrdude y el cargador de arranque AVR.

Lo he usado en el ATmega2560 y en el ATmega1284p. Funciona para MCU de contador de programa de 3 bytes y 2 bytes.

Tengo una versión STK500v2 Bootloader en Sourceforge .

Este gestor de arranque se basa en el gestor de arranque Peter Fleury STK500v2, actualizado por Mark Sproul. He realizado modificaciones para que sea compatible con la placa Goldilocks (un ATmega1284p).

La característica clave es utilizar el protocolo STK500v2 para cargar la imagen Flash en el Arduino. Este protocolo es más robusto y ofrece mejores capacidades de error que el protocolo avr109 . Por otro lado, el protocolo avr109 se llama "Arduino" en el mundo Arduino, porque alterna DTR (para restablecer la placa e ingresar automáticamente al gestor de arranque), y el protocolo STK500v2 se llama "Cableado" en el mundo Arduino, debido a lo mismo razón.

El gestor de arranque Fleury / Sproul STK500v2 está diseñado para funcionar con el ATmega2560 que tiene un registro de programa de 3 bytes, debido al mayor tamaño de Flash. Pero también admite placas normales de 2 bytes (todo lo demás realmente).

Para placas con mucho Flash (como Goldilocks 1284p), hay un monitor de hardware que se puede usar para consultar Flash, SRAM y hardware; puede verificar las conexiones sin código adicional y verificar el contenido real de Flash y EEPROM. Debido a que el 1284p admite 2 USART, agregué la capacidad de depurar en USART1 , para que el proceso de carga a través de USART0 no se vea afectado .


Esto parece ser parte de FreeRTOS, ¿es ese gestor de arranque totalmente independiente de FreeRTOS?
jfpoilpret

1
Es totalmente independiente. El gestor de arranque se utiliza para escribir flash con cualquier cosa. FreeRTOS llega más tarde después de que se inicia main (). Solo lo mantengo en el mismo repositorio. No lo escribí, solo lo modifiqué para mis propósitos.
Feilipu

Esto parece interesante; sería útil si pudiera resumir características importantes de su gestor de arranque en su respuesta: tamaño en Flash, velocidad máxima de carga, jabalíes Arduino con los que puede trabajar y algunos detalles más sobre las pruebas de hardware).
jfpoilpret

Es (basado en) el gestor de arranque Peter Fleury STK500v2, actualizado por Mark Sproul. He realizado modificaciones para que sea compatible con la placa Goldilocks (un ATmega1284p). La característica clave es utilizar el protocolo STK500v2 para cargar la imagen flash en el Arduino. Este protocolo es más robusto y ofrece mejores capacidades de error que el protocolo avr109. Por otro lado, el protocolo avr109 se llama "Arduino" en el mundo Arduino, porque alterna DTR (para restablecer la placa e ingresar automáticamente al gestor de arranque), y el protocolo STK500v2 se llama "Cableado" en el mundo Arduino, debido a lo mismo razón.
Feilipu

1
Gracias por la información, he actualizado su publicación, ya que creo que esta información debería ser directamente parte de su respuesta. ¡Siéntase libre de agregar más información si lo considera conveniente!
jfpoilpret

3

TinySafeBoot es una alternativa para dispositivos ATtiny y ATmega.

  • Compatible con muchos ATtinys y ATmegas (ver más abajo)

  • Acceso de lectura / escritura a Flash y EEPROM.

  • Todos los IO disponibles para comunicación en serie

  • Un cable, también con múltiples AVR en una sola línea

  • Autobauding, protocolo robusto.

  • Activado por Restablecer + Contraseña (opcional)

  • Contraseña y tiempo de espera de usuario cambiables en cualquier momento.

  • "Borrado de emergencia" para superar la contraseña perdida: elimina todos los datos pero deja intacto el gestor de arranque.

  • ATtinys: ~ 550 bytes,

  • ATmegas: <512 bytes (!)

  • TSB para ATtiny puede actualizarse solo.

  • El código fuente es software libre (GPL)


Alguien sabe cómo TSB se compara con Optiboot? Última actualización parece al menos hace 2 años ...
johny why

1

¿Hay alguna alternativa al gestor de arranque Optiboot?

Err ... no realmente. En realidad, hay una modificación [no oficial] de Optiboot para que sea más rápido al cargar .

Para instalar las variaciones de alta velocidad en baudios ...

  • Asegúrese de que Arduino IDE no se esté ejecutando
  • Descargue el archivo 7-Zip usando el enlace de arriba
  • Extraiga los tres archivos en el siguiente directorio: {Arduino Installation Root}\hardware\arduino\bootloaders\optiboot\
  • Abra el archivo boards.txt ubicado en el siguiente directorio: {Arduino Installation Root}\hardware\arduino\

Encuentra esta sección dentro de ella:

uno.name=Arduino Uno
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino
uno.build.variant=standard

Agregue la siguiente sección ...

uno_uf.name=Arduino Uno / Upload Fast
uno_uf.upload.protocol=arduino
uno_uf.upload.maximum_size=32256
uno_uf.upload.speed=250000
uno_uf.bootloader.low_fuses=0xff
uno_uf.bootloader.high_fuses=0xde
uno_uf.bootloader.extended_fuses=0x05
uno_uf.bootloader.path=optiboot
uno_uf.bootloader.file=optiboot_atmega328_250000.hex
uno_uf.bootloader.unlock_bits=0x3F
uno_uf.bootloader.lock_bits=0x0F
uno_uf.build.mcu=atmega328p
uno_uf.build.f_cpu=16000000L
uno_uf.build.core=arduino
uno_uf.build.variant=standard
  • Cambie los dos valores resaltados a la velocidad en baudios que planea usar: 250000, 500000 o 1000000 Guarde y cierre el archivo de tables.txt
  • Usando su programador ISP favorito, instale el nuevo gestor de arranque. No olvides: Asegúrate de que esté seleccionada la placa Arduino Uno / Upload Fast (Herramientas / Placa) , si corresponde, asegúrate de que esté seleccionado el Puerto serie de tu programador (Herramientas / Puerto serie) , Asegúrate de que esté seleccionado el programador (Herramientas / Programador) ) , Después de instalar el gestor de arranque, cambie el puerto serie al puerto serie de su Arduino Uno .

Texto anterior ligeramente modificado para compatibilidad con el sitio. Publicación original


Además de eso, y el cargador de arranque ATmegaboot, realmente no puedes encontrar ninguna alternativa. Me imagino que si Arduino lo carga en todos los Unos jamás producidos, está bastante optimizado. El truco anterior acelera el tiempo de carga, pero no reduce el tamaño del gestor de arranque. También puede eliminar el tiempo de espera en el gestor de arranque para que tenga un inicio más rápido.

Si está tan preocupado por maximizar el flash, consulte: Cómo reducir realmente un boceto y esta respuesta [encendido en ¿Qué puedo hacer si me quedo sin memoria Flash o SRAM? ]

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.