Bootloader DFU pour Arduino Leonardo

Bonjours à tous, Si vous êtes comme moi et que vous n'aimez pas le langage de l'IDE Arduino, ni le fait que IDE implémente automatiquement le port série virtuel sur l'USB, ni le fait qu'il est presque impossible de savoir réellement ce qu'il y a derrière certaine fonction, voici un Bootloader DFU. Ce Bootloader fonctionne sur la carte Arduino Leonardo et est compatible avec FLIP. Vous pourrez développer et compiler vos codes sous Atmel Studio et utiliser FLIP pour les implanter dans l'Arduino. Au démarrage la carte reste 8 s en mode Bootloader puis passe sur le programme principale si elle n'est pas connectée avec FLIP. Merci de me prévenir si vous trouvez des erreurs ou si vous voyez des amélioration à apporter.

Re, voila les fichiers, il reste à ajouter la lib LUFA si vous voulez le recompiler ou utilisez directement le .hex

CaterinaDFU.zip (48.6 KB)

Salut,

C'est quoi la différence avec celui d'origine des AtmegaYuX?

La différence, c'est que tu n'es plus limité à l'IDE Arduino pour programmer les cartes. Personnellement je n'ai pas réussi à la programmer avec autre chose que l'IDE Arduino. En plus Atmel fournis des utilitaires gratuits pour utiliser ses µc, pourquoi chercher ailleurs? Le langage Arduino est un mitigé de c/c++, donc des fonctions propres à l'IDE ou on ne sais pas ce qui est réellement fait derrière, et pour finir, l’implantation systématique d'une interface COM virtuel à la compilation (faite avec la lib LUFA) et sans doute d'autre chose sur des registres que je n'ai pas encore vu (quand je fait un programme vide, j'aime bien qu'il soit vide). La carte Leonardo est très bien faite, bien que la broche /HWBE devrait être accessible pour choisir le mode de démarrage, si non il y a vraiment le minimum nécessaire pour que ça marche.

C'est très simple de savoir ce que fait le framework arduino. Y a toutes les sources disponibles. Par contre, c'est pas évident de comprendre

Ma question n'était pas sur l'utilité d'un bootloader en DFU compatible FLIP, mais bien sur la différence entre ce que tu proposes ici et celui incorporé à tous les atmegaYuX (32u4, 16u2 ...) qui fait, si on se limite à ta description, exactement la même chose.

EDIT : différence sur le comportement ? Celui d'atmel faut jouer avec le HWB et toi y'a 8 sec ?

C'est ça, tous les autres Bootloaders DFU on besoin que /HWBE soit disponible pour bien fonctionner. Sur la carte Leonardo ce n'est pas le cas. Je n'ai pas trouvé de Bootloader DFU qui marche avec cette carte. Je suis justement parti du Bootloader disponible avec LUFA et j'ai ajouté le timer comme dans le Bootloader d’origine Caterina. Je précise que ça fait 10 ans que je n’avais pas touché aux µC et qu'à l’époque les µC avec USB ça courrai pas les rues, alors je découvre tout ça.

Dommage y'en avait déjà un : http://www.stanleylio.com/home/usblufa

Par contre je suis justement dans le sujet, et je ne sais pas encore pourquoi mais l'up d'un prog compiler sous Arduino avec bootloader DFU Atmel + Flip ça marche pas ... Surement un souci de fuse

J'ai testé ce Bootloader avant d'en refaire un, et chez moi non plus ça ne marche pas. La Leonardo ne fait que des resets. Vue que cette source ne marchai pas pour moi et qu'il avait utilisé LUFA pour la faire, je suis reparti de la source de base de LUFA et j'ai rajouté le fait de sortir du Bootloader après 8s comme dans le Bootloader Off. Donc si tu as testé cette source, tu as peu-être eu le même problème que moi.

Attention aussi au titre, je n'ai pas dit que ça marchai sur toutes les cartes à base d'AtMega32u4 mais sur LA carte Arduino Leonardo. Le Bootloader Off d'Atmel ne peu pas marcher puisque la broche /HWBE n'est pas accessible et qu'il est donc impossible de démarrer autrement que sur le Bootloader.

C’est sur une carte perso :wink:

Idéalement j’aimerais un bootloader MSC, comme j’ai installé sur mon launchpad stellaris. Du branche au PC, ça apparait comme une clé, il suffit de dropper le .hex dessus et c’est bon :slight_smile:

Peut-être une histoire de watchdog sinon … Ou de lancement d’appli (pourtant sur Arduino comme prévu sur le DFU Atmel, c’est bien à 0x0000 qu’il boot …)

Le Boot en 0x0000, c'est le Boot du programme principale. En Bootloader, il Boot sur la fin de la flash si le fuse sont bien programmés et/ou que la broche /HWBE soit à la masse. Pour bien comprendre cf datasheet atmega32u4 section 27 Bootloader Support page 330.

Oui ça je sais, c'est pour ça que je parle de lancement d'appli, et pas du bootloader.

Mais bon le bootloader est bien sensé démarrer la ou il charge le prog donc la question était saugrenue à la base ...

Je vais tenter de ré up le DFU d'atmel en utilisant les mêmes fuses que la leonardo, même si à mon avis c'est un problème de watchdog activé dans le bootloader et non suspendu au démarrage de l'appli

"Mais bon le Bootloader est bien sensé démarrer la ou il charge le prog" Non pas forcément. le Bootloader ce trouvera dans la flash la ou tu lui dira d'aller lors de la compilation. De plus ton add de pointage sur le Bootloader dépend de tes fuses BOOTSZ0 et 1 (cf Table 27-8 page 344). Et ton mode de Boot (Boot normale ou Boot Bootloader) dépend de tes fuses BOOTRST, HWBE et de la broche /HWBE (cf page 335). Tu peux aussi passer sur le Bootloader avec un jump dans le programme principale.

Je parlais pas du bootloader, mais de la où le bootloader charge l'appli, et donc l'adresse à laquelle il lance l'appli si on passe par lui au démarrage.

Bon je viens de up ce bootloader http://www.stanleylio.com/home/usblufa en passant par l'IDE Arduino et en conservant les fuses de la leonardo et c'est OK. Up du hex compilé sous Arduino par flip marche, et bien 5 sec d'attente au démarrage