[leonardo] bootloader interminable

Salut les copains!

Bon, ceux qui ont une leonardo le confirmeront, le booloader dure 8 secondes, ce qui est bien trop long, comparé aux autres cartes. J'imagine que c'est le fait que l'USB soit onboard, mais 8 secondes, c'est bien trop long.

J'ai trouvé ça dans le bootloader caterina / leonardo :

/* Bootloader timeout timer */
#define TIMEOUT_PERIOD	8000

En effet, pendant ces 8000ms, il ne se passe rien à part la led qui clignote. c'est seulement au bout de ces 8 secondes que le "téléversement" peut commencer, ou le prog démarrer.

Quelqu'un a essayé de modifier ça? c'est risqué?

Bonjour Super Cinci

De mon côté je n'ai pas essayé à raccourcir (sauf en donnant un coup de pouce pour le Reset) .
Pas certain qu'on puisse réduire beaucoup avec les cartes à mega32u4 pour l'activation du bootloader :
-arriver à faire le Reset ...
-fermer le port COM de l'appli (COM 7 en ce moment)
-ouvrir l'autre port COM, celui du bootloader (COM 8 en ce moment)

Si coches "compliation" et "téléversement dans Fichier/Préférences "Afficher les résultats détaillés pendant" tu verras le travail !

Salut,

Super_Cinci:
Bon, ceux qui ont une leonardo le confirmeront, le booloader dure 8 secondes, ce qui est bien trop long, comparé aux autres cartes. J'imagine que c'est le fait que l'USB soit onboard, mais 8 secondes, c'est bien trop long.

Je confirme, c'est même relativement :zipper_mouth_face: de voir la led "pulser" pendant tout ce temps à chaque upload, qui lui ne dure qu'une fraction de seconde (merci l'usb 2.0 natif).

Super_Cinci:
Quelqu'un a essayé de modifier ça? c'est risqué?

Ouaip, je l'ai réduit à 4 seconde (ce qui est déja pas mal) quand j'ai recompilé le bootloader lors de ma manip pour le rendre compatible avec teensyduino.
Si tu as un programmateur d'AVR sous la main il n'y a pas trop de risque (à moins de faire une grosse boulette).
Fait un tour sur mon article qui traite du "hack teensyduino sur arduino leonardo", tu auras pas mal d'info sur la manip :wink:

J'avais pensé à "encadrer" le main du bootloader ainsi (avec quand même une optimisation du code) :

digitalWrite(2, HIGH);
if (!digitalRead(2)){

// ici le code du main d'origine...

}
// jmp(0x0000);  // démarrage du sketch

En gros, si la pin 2 est à 0 par liaison extérieure au 0V, pas de bootloader, on banane direct sur le sketch, sinon, bootloader...

Seulement, le truc est de savoir ce qu'il se passe si on sqouize totalement le bootloader, est-ce qu'on aurait toujours accès au port série virtuel sur USB? Peut-être que le driver FTDI en a besoin pour s'initialiser ou cette initialisation se fait sur le Serial.begin() dans l'ATMEGA??

Bonjour
Je viens de regarder les 3 versions de Caterina qui sont disponibles dans l'environnement 1.0.2
L'une d'elles pourrait peut etre donner des idées : caterina-LilyPadUSB (Un LilyPad à mega32u4, "FLORA")

Elle est basée, si j'ai bien compris, sur un reset manuel 'à chaud effectué juste après le HardReset pour activer le bootloader.

LilyPadUSB bootloader code
The LilyPadUSB bootloader has been changed to remove the 8-second delay after external reset which is in
the Leonardo. To enter the bootloader, the user should execute TWO external resets within 750 ms; that is,
press the reset button twice, quickly.\

Pour la modification que tu proposes,Super_Cinci, il me semble qu'il n'y a pas de contre indication de principe (le bootloader et l'appli installent chacun de leur côté leur propre port série ) mais il y a des riques d'"effets de bord" plus délicats à prévoir dès lors qu'on touche et recompile un bootloader (taille du bootloader par exemple)

Super_Cinci:
Seulement, le truc est de savoir ce qu'il se passe si on sqouize totalement le bootloader, est-ce qu'on aurait toujours accès au port série virtuel sur USB? Peut-être que le driver FTDI en a besoin pour s'initialiser ou cette initialisation se fait sur le Serial.begin() dans l'ATMEGA??

Normalement la partie usb est ré-initialisé au démarrage du programme utilisateur.
Dans mon bootloader modifié je force même la dé-initialisation du port usb avant de lancer le programme utilisateur.
(c'est la condition qui fait que teensyduino fonctionne ou non sur la leonardo)

al1fch:
Je viens de regarder les 3 versions de Caterina qui sont disponibles dans l'environnement 1.0.2
L'une d'elles pourrait peut etre donner des idées : caterina-LilyPadUSB (Un LilyPad à mega32u4, "FLORA")

Damned il ont encore touché aux bootloaders dans la 1.0.2 :zipper_mouth_face:
Va falloir que je regarde de plus prés cette nouvelle version ...pour le moment j'essaye la beta 1.5 pour la due ...

le double-click reset peut être sympa, en effet! il va falloir que je regarde ça! :wink: