Quelles sont les alternatives au chargeur de démarrage Optiboot?

12

Presque toutes les cartes Arduino modernes utilisent le chargeur de démarrage Optiboot . Comparé à l'ATmegaboot utilisé auparavant, il est plus petit en termes de flash (d'environ 1,5 Ko) et plus rapide en vitesse de téléchargement (115,2 k vs 57,6 k) et démarre votre croquis plus rapidement (le délai d'attente avant la réinitialisation est plus court).

Existe-t-il des alternatives au chargeur de démarrage Optiboot? Plus précisément, existe-t-il des chargeurs de démarrage plus petits (en termes flash)? Quelles différences ont-ils?

Cybergibbons
la source

Réponses:

8

Optiboot est le plus petit chargeur de démarrage disponible.

Mais, il existe un chargeur de démarrage beaucoup plus puissant (avec une console intégrée pour les tests matériels, la vérification de la RAM et du contenu Flash, etc.) avec un protocole de communication stk500v2 plus développé et robuste entre avrdude et le chargeur de démarrage AVR.

Je l'ai utilisé sur l'ATmega2560 et sur l'ATmega1284p. Il fonctionne pour le compteur de programme MCU à 3 octets et à 2 octets.

J'ai une version STK500v2 Bootloader sur Sourceforge .

Ce chargeur de démarrage est basé sur le chargeur de démarrage Peter Fleury STK500v2, mis à jour par Mark Sproul. J'ai fait des modifications pour qu'il soit compatible avec la carte Goldilocks (un ATmega1284p).

La caractéristique clé est d'utiliser le protocole STK500v2 pour télécharger l'image Flash sur l'Arduino. Ce protocole est plus robuste et offre de meilleures capacités d'erreur que le protocole avr109 . En passant, le protocole avr109 est appelé "Arduino" dans le monde Arduino, car il bascule DTR (pour réinitialiser la carte et entrer automatiquement dans le chargeur de démarrage), et le protocole STK500v2 est appelé "Câblage" dans le monde Arduino, en raison de la même raison.

Le chargeur de démarrage Fleury / Sproul STK500v2 est conçu pour fonctionner avec l'ATmega2560 qui a un registre de programme de 3 octets, en raison de la plus grande taille de Flash. Mais, il prend également en charge les cartes normales de 2 octets (tout le reste vraiment).

Pour les cartes avec beaucoup de Flash (comme Goldilocks 1284p), il existe un moniteur matériel qui peut être utilisé pour interroger Flash, SRAM et le matériel; vous pouvez vérifier les connexions sans code supplémentaire et vérifier le contenu réel de Flash et EEPROM. Étant donné que le 1284p prend en charge 2 USART, j'ai ajouté la possibilité d'avoir un débogage sur USART1 , afin que le processus de téléchargement via USART0 ne soit pas perturbé.

feilipu
la source
Cela semble faire partie de FreeRTOS, ce chargeur de démarrage est-il totalement indépendant de FreeRTOS?
jfpoilpret
1
Il est totalement indépendant. Le chargeur de démarrage est utilisé pour écrire du flash avec n'importe quoi. FreeRTOS vient plus tard après le démarrage de main (). Je le garde juste dans le même référentiel. Je ne l'ai pas écrit, juste modifié pour mes besoins.
feilipu
Cela semble intéressant; il serait utile de résumer les caractéristiques importantes de votre chargeur de démarrage dans votre réponse: taille en Flash, vitesse maximale de téléchargement, verrats Arduino avec lesquels il peut fonctionner, et quelques détails supplémentaires sur les tests matériels).
jfpoilpret
Il s'agit (basé sur) le chargeur de démarrage Peter Fleury STK500v2, mis à jour par Mark Sproul. J'ai fait des modifications pour qu'il soit compatible avec la carte Goldilocks (un ATmega1284p). La caractéristique clé est d'utiliser le protocole STK500v2 pour télécharger l'image flash sur l'Arduino. Ce protocole est plus robuste et offre de meilleures capacités d'erreur que le protocole avr109. En passant, le protocole avr109 est appelé "Arduino" dans le monde Arduino, car il bascule DTR (pour réinitialiser la carte et entrer automatiquement dans le chargeur de démarrage), et le protocole STK500v2 est appelé "Câblage" dans le monde Arduino, en raison de la même raison.
feilipu
1
Merci pour l'info, j'ai mis à jour votre message car je pense que cette information devrait directement faire partie de votre réponse. N'hésitez pas à ajouter plus d'informations si vous le souhaitez!
jfpoilpret
3

TinySafeBoot est une alternative pour les appareils ATtiny et ATmega.

  • Compatible avec de nombreux ATtinys et ATmegas (voir ci-dessous)

  • Accès en lecture / écriture à Flash et EEPROM.

  • Tous les IO disponibles pour la communication série

  • Un fil, également avec plusieurs AVR sur une seule ligne

  • Autobauding, protocole robuste.

  • Activé par Reset + Password (facultatif)

  • Mot de passe et délai d'expiration modifiables à tout moment.

  • "Effacement d'urgence" pour surmonter le mot de passe perdu - tue toutes les données mais laisse le chargeur de démarrage intact.

  • ATtys: ~ 550 octets,

  • ATmegas: <512 octets (!)

  • TSB for ATtiny peut se mettre à jour.

  • Le code source est un logiciel libre (GPL)

Ashlyn Black
la source
Quelqu'un sait-il comment le BST se compare à Optiboot? La dernière mise à jour semble remonter à au moins 2 ans ...
johny why
1

Existe-t-il des alternatives au chargeur de démarrage Optiboot?

Euh ... pas vraiment. Il y a en fait une modification [non officielle] d'Optiboot pour la rendre plus rapide lors du téléchargement .

Pour installer les variations de vitesse de transmission élevées…

  • Assurez-vous que l'IDE Arduino n'est pas en cours d'exécution
  • Téléchargez l'archive 7-Zip en utilisant le lien ci-dessus
  • Extrayez les trois fichiers dans le répertoire suivant: {Arduino Installation Root}\hardware\arduino\bootloaders\optiboot\
  • Ouvrez le fichier boards.txt situé dans le répertoire suivant: {Arduino Installation Root}\hardware\arduino\

Trouvez cette section à l'intérieur:

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

Ajoutez la section suivante…

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
  • Remplacez les deux valeurs en surbrillance par le débit en bauds que vous prévoyez d'utiliser: 250000, 500000 ou 1000000 Enregistrez et fermez le fichier boards.txt
  • À l'aide de votre programmeur FAI préféré, installez le nouveau chargeur de démarrage. N'oubliez pas de: Assurez-vous que la carte Arduino Uno / Upload Fast est sélectionnée (Outils / Carte) , Le cas échéant, assurez-vous que le port série de votre programmeur est sélectionné (Outils / Port série) , Assurez-vous que le programmeur est sélectionné (Outils / Programmeur ) , Après avoir installé le chargeur de démarrage, changez le port série en port série de votre Arduino Uno .

Texte ci-dessus légèrement modifié pour la compatibilité avec le site. Message d'origine


En plus de cela, et du chargeur de démarrage ATmegaboot, vous ne pouvez pas vraiment trouver d'alternative. J'imagine que si Arduino le charge sur tous les Unos jamais produits, il est assez optimisé. Le hack ci-dessus accélère le temps de téléchargement, mais il ne réduit pas la taille du chargeur de démarrage. Vous pouvez également supprimer le temps d'attente sur le chargeur de démarrage afin qu'il ait un démarrage plus rapide.

Si vous êtes préoccupé par la maximisation de Flash, voir: Comment vraiment réduire une esquisse et cette réponse [sur sur Que puis-je faire si je manque de mémoire Flash ou de SRAM? ].

Pingouin anonyme
la source