Modification bootloader

Pas de 16U2 : jme connecte en USB via un adaptateur à 3 euros en provenance d'ebay. Et j'ai besoin de la connexion en permanence (envoi de données au PC).

Ca m'intéresse ton adaptateur à 3 €. Il se connecte sur TX & RX ? Il y a un driver PC livré ou bien celui d'Arduino fonctionne ? Peux tu m'en dire plus que je cherche sur Ebay si c'est encore dispo.

Au sujet du bootloader tu peux aussi utiliser celui fourni par ATMEL et qui ne fait clignoter aucune led. Sauf erreur il tient dans 512 K.

A propos si tu veux changer le bootloader cela ne peut se faire que par ICSP (le bootloader ne peut pas réécrire sur lui même sans se planter).

JLB

Pour JLB :

http://arduino.cc/forum/index.php/topic,66178.0.html

On y parle même de leds qui clignotent lors du transfert Rx-Tx sur la fin de la troisième page.... XD

Merci Jean-François pour ce lien. C'est très intéressant.

Pour ma part j'avais résolu cela en utilisant une simple connexion RS232 avec de vieux adaptateur TTL/RS232 que j'avais fabriqué en petite série il y une vingtaine d'année pour utiliser un minitel comme terminal sur des automates de gestion de sécurité.

Les leds TX et RX qui clignotent sur l'Arduino sont relié au 16U2 et n'ont donc pas d'incidence pour B@tto. Son problème c'est le bagottage de ses électrovannes au reset et qu'il a besoin d'un bootloader non pas pour communiquer avec un PC (les classes Serial le font sans bootloader) mais pour mettre à jour son soft (il pourrait faire autrement et gérer lui-même le self-programming de l'ATmega mais c'est pas simple).

JLB

Remarque:
Simplement fixer le nombre de clignotement à 0 ne fera que détourner le probléme.

Si tu veut vraiment supprimer la partie led renseigne toi (-> datasheet) sur les registres DDRx et PORTx (x -> lettre du port).
Place la broche de la led en entrée, celle ci sera alors en état "haute impédance" ce qui correspond à "débranché" physiquement.

Même avec un nombre de clignotement égale à zéro la broche sera mise en sortie, soit par défaut à LOW.
Si tu as un résistance de pull-up ou autre derrière tu risque d'avoir des ennuis avec ce que tu controle en avale.

Concernant la taille de la zone mémoire alloué au bootloader, tu auras surement besoin de ces quelques info :

  • 1 "mot" (1 commande assembleur) = 2 octets sur un µC AVR
  • avr-size te donne la taille en octets dans la colonne "dec"
  • vérifie plusieurs fois tes fusibles avant de les programmer (désactiver l'ISP est si vite arrivé, et aprés c'est le drame)
  • utilise AVR® Fuse Calculator – The Engbedded Blog pour avoir l'adresse de commencement du bootloader par rapport au fusibles (et la taille max)

Concernant le watch dog il est (par défaut) désactivé en hardware via les fusibles, et en software (de mémoire) par le bootloader.
Il me semble aussi que le "core arduino" est conçu pour fonctionner avec le watch-dog désactivé (est-ce obligatoire ? Je ne sait pas).

Petite précision Skywodd : Le mot n'est pas "une commande assembleur" mais la largeur des registres du processeur.

Sur les AVR 8 bits le mot est de un octet. La plupart des instructions sont codées sur 2 mots (opérande 8 bits) mais aussi sur 3 mots ou plus. Il existe également des instructions sur un seul octet (CLI par exemple).

Sur une architecture 8 bits il n'y a pas de contrainte d'alignement des données.

Les fusibles on peut les régler soi-même par un burn bootloader même sur des chips sans bootlaoader (par exemple pour positionner les fuses d'un ATtiny). Il ne faut pas s'occuper des erreurs dans cette phase (erreurs de relecture en général) car les fuses sont traités avant tout envoi de données programme.

Attention à l'usage du watchdog. Il ne faut pas le considérer comme une sécurité par rapport aux bugs logiciels. Il vaut mieux effectuer tous les tests d'endurance sans watchdog et ne l'activer qu'à la fin pour se prémunir de "sautes de logiciel" occasionnées par des interférences électriques ou radio-électriques ce qui est extrêmement rare voir inexistant dans un environnement normal (disons un appartement). Si votre montage doit fonctionner dans le faisceau d'un radar de centaines de kilowatts il faudra envisager d'autres mesures de protection que le watchdog.

Le bootloader peut initialiser le micro-contrôleur d'une façon spécifique mais cela n'est absolument pas indispensable. Je flash des chips divers sans bootloader et cela donne un reset ultra-rapide (valeur d'ailleurs réglable par fuses) avec une initilisation du micro-contrôleur conforme aux valeurs par défaut de la datasheet et qui, la plupart du temps, sont tout à fait opportunes.

JLB

Bonjour

B@tto choisira peut être finalement de s'affranchir du bootloader (pas mal d'avantages, dont l'espace gagné en flash....) mais comme le sujet du fil reste 'Modification du bootloader' avec l'élimination de l'activité de la led en pin 13 (entre autres) comme objectif je reviens avec une petite nouvelle pour compléter partiellement le fil de discussion.

Je suis séparé de mes cartes Arduino pour toute la semaine et l'épreuve de vérité sur carte pourle bootloader modifié reste à passer !! Vérifications effectuées pour différents nombres d'éclats de led en pin 13 , sur plaque d'essai et sur une carte UNO R2, sous Arduino 1.0.1 = OK (ça résout donc le pb .... du moins pour ce qui est des éclats dépendants du bootloader)

En lisant le fichier README.TXT du dossier Optiboot je vois le paragraphe "Building Optiboot in the Arduino IDE Install."
qui explique comment (re)compiler très simplement le bootlader en une seule commande avec les seuls outils de l'environnement Arduino.

Méthode utilisée sur PC sous XP, (tout se passe dans le dossier d'0ptiboot et à partir de ce dossier)
-avec un editeur respectant les fins de ligne 'Linux' (LF sans CR) editer le fichier make et en ligne 222 mettre 0 au lieu de 3 comme valeur du parametre LED_START_FLASHES
-enlever du répertoire le fichier optiboot_atmega328.hex (garder ailleurs une copie...)
-en ligne de commande lancer omake atmega328
-récupérer et flasher le bootloader produit : optiboot_atmega328.hex

Ci joint le fichier hex pour zéro flash de led + la console.

c:\Program Files\arduino-1.0.1\hardware\arduino\bootloaders\optiboot>omake atmega328

c:\Program Files\arduino-1.0.1\hardware\arduino\bootloaders\optiboot>..\..\..\tools\avr\utils\bin\make OS=windows ENV=a
duino atmega328
../../../tools/avr/bin/avr-gcc -g -Wall -Os -fno-inline-small-functions -fno-split-wide-types -mshort-calls -mmcu=atmeg
328p -DF_CPU=16000000L  '-DLED_START_FLASHES=0' '-DBAUD_RATE=115200'   -c -o optiboot.o optiboot.c
optiboot.c:222: warning: 'flash_led' declared 'static' but never defined
../../../tools/avr/bin/avr-gcc -g -Wall -Os -fno-inline-small-functions -fno-split-wide-types -mshort-calls -mmcu=atmeg
328p -DF_CPU=16000000L  '-DLED_START_FLASHES=0' '-DBAUD_RATE=115200' -Wl,--section-start=.text=0x7e00 -Wl,--section-sta
t=.version=0x7ffe -Wl,--relax -Wl,--gc-sections -nostartfiles -nostdlib -o optiboot_atmega328.elf optiboot.o
../../../tools/avr/bin/avr-size optiboot_atmega328.elf
   text    data     bss     dec     hex filename
    464       0       0     464     1d0 optiboot_atmega328.elf
../../../tools/avr/bin/avr-objcopy -j .text -j .data -j .version --set-section-flags .version=alloc,load -O ihex optibo
t_atmega328.elf optiboot_atmega328.hex
..\..\..\tools\avr\bin\avr-objdump -h -S optiboot_atmega328.elf > optiboot_atmega328.lst
rm optiboot.o optiboot_atmega328.elf

Des modifications légères d'Optiboot peuvent donc etre réalisées simplement grâce aux utilitaires fournis avec Arduino 1.0.1 sans les risques liés aux décalages de version de WinAVR. Il faut bien entendu évaluer les modifications en étudiant les fichiers sources d'Optiboot. Le résultat compilé doit tenir dans la limite des 512octets = 256 mots de mémoire programme (cf Data Sheet p294)

noLED_optiboot_atmega328.hex (1.32 KB)

Alors B@tto, a tu trouvé une solution satisfaisante pour toi ?

J'ai pas eu le temps de me pencher dessus. Je suis rentré de vacances mes collegue s'étaient tous barrés en congés et y'a que moi pour faire tourner la barraque xD du coup pas trop temps ! Mais je reviendrai sur le fil dès que j'ai des news :wink:

Bon je m'y penche enfin xD

Alf1ch, tu utilises quoi comme éditeur pour le fichier make ?

EDIT : bon j'ai testé avec ton hex ça semble marcher :wink: j'ai juste eu à modifié le board.txt parce que sinon sur les duemilanove il prend pas l'optiboot par défaut (à l'inverse des UNO). J'ai suivi celui-la Google Code Archive - Long-term storage for Google Code Project Hosting.

EDIT : je confirme, nickel dans mon montage, plus de castagnettes xD

Bonsoir B@tto

Alf1ch, tu utilises quoi comme éditeur pour le fichier make ?

Sous Windows j'utilise Notepad++

Bonjour ,

Je viens de modifier mon Bootloader pour ma carte perso sur un ATMEGA32U4 et mon problème est la compilation du Bootloader qui m’affiche plein d'erreur du au fait que le Bootloader à une gestion en interne de L'USB .

Je compile avec AStudio 6 de atmel . pour la librairie USB j'ai Télécharger la LUFA 111009 Official Release .

après de nombreuse recherche sur internet pour trouver la solution je me tourne vers vous pour un coup de main.

cordialement,

En quoi consistent tes modifications ? Pourquoi passer par AStudio ?

Je modifie la sortit 13 pour quelle reste à l’état 1 pendant la phase de démarrage et aussi le mon du arduino quand il se connecte par USB .

J'utilise AStudio car je ne vois pas quoi utiliser d'autre pour compiler le bootloader après modification .

Je programme avec le logiciel arduino. Mais par la suite comme c'est pour un produit qui vas sortir en petit série . il sera compiler avec Astudio pour avoir l'HEX pour pouvoir infecter le programme directement sur la ligne de fabrication de mon sous traitant en carte électronique .

Tu compile avec quel logiciel ?

stefprod:
il sera compiler avec Astudio pour avoir l'HEX pour pouvoir infecter le programme directement sur la ligne de fabrication de mon sous traitant en carte électronique .

Si ton sous-traitant lit ce forum ça va pas le rassurer de bosser pour toi XD

stefprod:
Je modifie la sortit 13 pour quelle reste à l’état 1 pendant la phase de démarrage et aussi le mon du arduino quand il se connecte par USB .

Ne pas oublier :

  • tu dois publier ton code modifié avec la même licence que celui d'origine
  • si tu changes le nom dans le descripteur USB tu dois aussi changer le couple VID/PID, et si c'est pour une utilisation commerciale l'utilisation d'un VID est soumis à un achat de licence auprès de usb.org :wink:
    (en gros garde celui d'origine et change rien, où ne le cris pas sur tout les toits et te fait pas choper)

stefprod:
J'utilise AStudio car je ne vois pas quoi utiliser d'autre pour compiler le bootloader après modification .

Tu peut compiler en ligne de commande, c'est pas plus compliqué qu'avec AVR Studio.
Mais si tu as déjà A.S. c'est pas la peine de changer.

stefprod:
Je programme avec le logiciel arduino. Mais par la suite comme c'est pour un produit qui vas sortir en petit série . il sera compiler avec Astudio pour avoir l'HEX pour pouvoir injecter le programme directement sur la ligne de fabrication de mon sous traitant en carte électronique .

Tu comptes sortir un produit basé sur le projet arduino en dissimulant son origine ? (cf usb plus haut)
C'est pas bien clair ton histoire !
PS : l'ide Arduino produit lui aussi .hex, il est juste caché dans un dossier temporaire :wink:

@skywodd pour le changement du nom c'est pas encore sur que je le face c'est qu'il dise que l'on doit pas utiliser le nom arduino sur c'est propre carte c'est pour sa que je voulait changer après l'USB ne servira que pour le SAV . Pour la publication du bootloader sa me dérange pas

Tu comptes sortir un produit basé sur le projet arduino en dissimulant son origine ? (cf usb plus haut)
C'est pas bien clair ton histoire !
PS : l'ide Arduino produit lui aussi .hex, il est juste caché dans un dossier temporaire smiley-wink

merci pour l'info pour HEX .

Je ne cherche pas à le dissimuler , c'est que je suis obliger de développer mes propres cartes électronique car les autres sont trop grosse et n’intègre pas les composants que j'ai besoin .

stefprod:
@skywodd pour le changement du nom c'est pas encore sur que je le face c'est qu'il dise que l'on doit pas utiliser le nom arduino sur c'est propre carte c'est pour sa que je voulait changer après l'USB ne servira que pour le SAV . Pour la publication du bootloader sa me dérange pas

Tu n'as pas le droit d'utiliser le nom "Arduino" car c'est une marque déposée, quelque soit le support, pour ça c'est clair.

Pour le couple VID/PID je résonnai en tant que simple particulier, en tant qu'entreprise c'est bien plus strict en réalité :

If you want to make your own Arduino-compatible board, you have a few choices:
Don't use an 8u2, go with an FTDI chip instead that comes with a VID
If you're planning to make more than one board for your personal use, you will have to purchase a VID from USB IF for a one time $2000 fee
If you're making a single board for your own experimentation, you can pick a VID/PID that doesn't interfere with any devices on your computer and substitute those in
You can purchase licenses for single VID/PID pairs from companies that develop USB devices (we dont have any specific links at the moment)
However, you can't use the Arduino VID when distributing your own Arduino-compatibles! If the cost of a VID is too much for you, simply go with an FTDI chip, K?

Source : http://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-uno-faq
(ps: c'est plus 2000$ mais 5000$ maintenant d'après ce que je lit sur Getting a Vendor ID | USB-IF)

stefprod:
Je ne cherche pas à le dissimuler , c'est que je suis obliger de développer mes propres cartes électronique car les autres sont trop grosse et n’intègre pas les composants que j'ai besoin .

Je comprend bien mais c'est pas pour autant que tu peut faire tout est n'importe quoi :wink:

skywodd:
Pour le couple VID/PID je résonnai en tant que simple particulier, en tant qu'entreprise c'est bien plus strict en réalité :

If you want to make your own Arduino-compatible board, you have a few choices:
Don't use an 8u2, go with an FTDI chip instead that comes with a VID
If you're planning to make more than one board for your personal use, you will have to purchase a VID from USB IF for a one time $2000 fee
If you're making a single board for your own experimentation, you can pick a VID/PID that doesn't interfere with any devices on your computer and substitute those in
You can purchase licenses for single VID/PID pairs from companies that develop USB devices (we dont have any specific links at the moment)
However, you can't use the Arduino VID when distributing your own Arduino-compatibles! If the cost of a VID is too much for you, simply go with an FTDI chip, K?

Source : Arduino UNO FAQ | Arduino Tips, Tricks, and Techniques | Adafruit Learning System
(ps: c'est plus 2000$ mais 5000$ maintenant d'après ce que je lit sur Getting a Vendor ID | USB-IF)

C'est que nos produit ne vont pas disposer de connecteur USB juste 4 pin de test sur la carte électronique du coup pas sur que cela s’applique pour nous mais je vais me renseigner dessus pour prendre une licence .

skywodd:

stefprod:
Je ne cherche pas à le dissimuler , c'est que je suis obliger de développer mes propres cartes électronique car les autres sont trop grosse et n’intègre pas les composants que j'ai besoin .

Je comprend bien mais c'est pas pour autant que tu peut faire tout est n'importe quoi :wink:

Nos carte respecte la norme NF et CEM mais bon pour le moment le problème n'est pas la. :slight_smile:

Mon soucie principal reste la compilation du bootloader pour ATMGE32U4 celui du léonardo ( nos carte de dev sont 2 carte léonardo )