Pages: 1 [2] 3   Go Down
Author Topic: Modification bootloader  (Read 4142 times)
0 Members and 1 Guest are viewing this topic.
Near Paris in France
Offline Offline
Full Member
***
Karma: 0
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Et mon TOC viens du simple fait que sur mon PCB où est montée mon Atmega en standalone (oh mon dieu, sacrilège, un Atmega qui utilise le langage Arduino !!), et bien je commande des électrovannes, pilotée par le pin ... 13 ! Et forcement ces dernières font des castagnettes au démarrage.

Je me demande bien pourquoi tu  as mis une Led sur la pin 19 de ton ATmega standalone ????????????????????????
Je me demande bien pourquoi tu  as mis une Led sur la pin 19 de ton ATmega standalone ????????????????????????
Je me demande bien pourquoi tu  as mis une Led sur la pin 19 de ton ATmega standalone ????????????????????????
Je me demande bien pourquoi tu  as mis une Led sur la pin 19 de ton ATmega standalone ????????????????????????
Je me demande bien pourquoi tu  as mis une Led sur la pin 19 de ton ATmega standalone ????????????????????????

Je me demande bien pourquoi tu ne fais pas un FULL FLASH de ton ATmega ce qui supprime le bootloader ??????????????????????
Je me demande bien pourquoi tu ne fais pas un FULL FLASH de ton ATmega ce qui supprime le bootloader ??????????????????????
Je me demande bien pourquoi tu ne fais pas un FULL FLASH de ton ATmega ce qui supprime le bootloader ??????????????????????
Je me demande bien pourquoi tu ne fais pas un FULL FLASH de ton ATmega ce qui supprime le bootloader ??????????????????????
Je me demande bien pourquoi tu ne fais pas un FULL FLASH de ton ATmega ce qui supprime le bootloader ??????????????????????

JLB
Logged

Near Paris in France
Offline Offline
Full Member
***
Karma: 0
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

B@tto je crois que ton problème c'est de conserver le bootloader sur ta carte standalone. Il faut la programmer en ICSP et donc créer dans Mes documents\Arduino\hardware\Atmega un fichier boards.txt.

Je te fournis le contenu de ce fichier pour faire du Full Flash en ICSP. Il n'y a pas besoin de faire de burn du bootloader pour cette config car on ne change pas les fuse bits. On informe le programmateur (ici ArduinoISP mais tu peux changer la ligne correspondante pour un programmateur reconnu) sur les locks bits uniquement. Par contre tu peux faire un burn bootloader avec cette config de carte et cela fonctionne pour remettre un chip en état Arduino.

Je suis le premier à promouvoir l'usage d'Arduino pour programmer des chips autre que l'ATmega328P. Je m'efforce même souvent de n'utiliser que les fonctions Arduino sans aucun accès direct à des fins pédagogiques (voir mon post sur la réception RC5 ultra concise sous interruption entièrement en Arduino et qui tourne sur ATtiny25).

Voici une boards.txt qui va bien :

Quote
atmega48-20.name=ATmega48V 20 MHz FULL FLASH (Arduino as ISP)
atmega48-20.upload.protocol=stk500
atmega48-20.upload.maximum_size=4096
atmega48-20.upload.speed=19200
atmega48-20.upload.using=arduinoisp
atmega48-20.bootloader.low_fuses=0xff
atmega48-20.bootloader.high_fuses=0xdd
atmega48-20.bootloader.extended_fuses=0x00
atmega48-20.bootloader.unlock_bits=0x3F
atmega48-20.bootloader.lock_bits=0x0F
atmega48-20.build.mcu=atmega48
atmega48-20.build.f_cpu=20000000L
atmega48-20.build.core=arduino:arduino
atmega48-20.build.variant=standard

atmega48.name=ATmega48V 16 MHz FULL FLASH (Arduino as ISP)
atmega48.upload.protocol=stk500
atmega48.upload.maximum_size=4096
atmega48.upload.speed=19200
atmega48.upload.using=arduinoisp
atmega48.bootloader.low_fuses=0xff
atmega48.bootloader.high_fuses=0xdd
atmega48.bootloader.extended_fuses=0x00
atmega48.bootloader.unlock_bits=0x3F
atmega48.bootloader.lock_bits=0x0F
atmega48.build.mcu=atmega48
atmega48.build.f_cpu=16000000L
atmega48.build.core=arduino:arduino
atmega48.build.variant=standard

atmega328.name=ATmega328P 16 MHz FULL FLASH (Arduino as ISP)
atmega328.upload.protocol=stk500
atmega328.upload.maximum_size=32768
atmega328.upload.speed=19200
atmega328.upload.using=arduinoisp
atmega328.bootloader.low_fuses=0xff
atmega328.bootloader.high_fuses=0xdd
atmega328.bootloader.extended_fuses=0x05
atmega328.bootloader.path=arduino:optiboot
atmega328.bootloader.file=optiboot_atmega328.hex
atmega328.bootloader.unlock_bits=0x3F
atmega328.bootloader.lock_bits=0x0F
atmega328.build.mcu=atmega328p
atmega328.build.f_cpu=16000000L
atmega328.build.core=arduino:arduino
atmega328.build.variant=standard

JLB
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3591
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je ne fais pas de full flash pour la simple et bonne raison que ... c'est la première fois que j'en entend parler !! Mais j'ai le programmateur donc pourquoi pas ... Cependant je vais perdre la possibilité de mettre mon appareil à jour simplement par l'USB, ce qui est problématique pour moi.

@al1fch : je pense que tu as raison, perso je vais quand même essayer de virer toutes les ligne en relation : le passage en OUTPUT et la fonction de flash.

Question substancielle : que devient le watchdog avec la plateforme arduino ? Un redémarrage en cas de plantage je suis preneur ...
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il se pourrait même  qu'optiboot.c soit déjà conçu (lignes 630 à 644) pour n flashs de led , n pouvant être nul !!

sans toucher au code il suffirait (conditionnel car non testé avant de poster  !!) de remplacer LED_START_FLASHES=3 par LED_START_FLASHES=0 dans le fichier make en ligne 222 (si c'est bien la config equivalente à ta carte)
Code:
atmega328: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200'
Quelqu'un peut-il confirmer, infirmer, signaler un 'effet de bord'...... ?

Je confirme l'effet de cette macro  smiley

Elle est déjà présente dans le bootloader Arduino d'origine (pré-Optiboot). Je me souviens l'avoir éliminée sans souci.  Il n'y a pas de réel effet de bord mais il y a un gros piège : certes Arduino fournit les sources et le makefile, mais comme ils n'indiquent pas toujours quelle version du compilateur ils ont utilisée et que ses options peuvent avoir un effet et des performances variables selon la version, tu peux te retrouver avec un bootloader compilé sensiblement différent de l'original, y compris sur des parties auxquelles tu ne voulais pas toucher au départ.

Un article qui peut être utile pour comprendre le makefile : http://www.tty1.net/blog/2008-04-29-avr-gcc-optimisations_en.html

De mon expérience personnelle, si tu prends les sources du bootloader Arduino d'origine avec le makefile fourni et que tu compiles tel quel avec un avr-gcc récent, le binaire produit dépasse légèrement les 2kB, et donc ne tient plus dans la zone NRWW d'un ATmega168 par exemple.
« Last Edit: July 12, 2012, 03:32:42 am by Benvenuto » Logged

Near Paris in France
Offline Offline
Full Member
***
Karma: 0
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

B@tto si je comprends bien tu as mis un port USB sur ton ATmega standalone donc avec un 16U2 que tu as programmé par ICSP. Si tu as su faire cela tu sauras sans difficulté faire de l'ICSP sur un ATmega328P.

Si ta carte n'utilise l'USB que pour se reflasher il est aussi simple de le faire en ICSP avec un connecteur 6 points. Dans ce cas tu récupères les bit 0 et 1 du port D qui ne servent plus comme TX et RX, ca te fait deux I/O de plus.

Sans le bootloader tu feras ce que tu veux y compris en langage Arduino comme tu dis. La seule façon de bien maîtriser les conceptions standalone c'est d'étudier soigneusement la datasheet ATMEL (448 pages). Tu y verras comment fonctionne le watchdog.

Ensuite tu n'as pas besoin de programmateur car le sketch ArduinoISP fonctionne parfaitement. Tu peux laisser l'Arduino en permanence en programmateur en laissant en place la capa de 10 uF sur le reset.

JLB
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3591
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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).
Logged


Near Paris in France
Offline Offline
Full Member
***
Karma: 0
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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....  smiley-lol
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Near Paris in France
Offline Offline
Full Member
***
Karma: 0
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 www.engbedded.com/fusecalc/ 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).
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Near Paris in France
Offline Offline
Full Member
***
Karma: 0
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:
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 - downloaded 9 times.)
« Last Edit: July 14, 2012, 03:52:01 pm by al1fch » Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3228
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3591
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged


Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3591
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-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 http://code.google.com/p/optiboot/source/browse/optiboot/boards.txt?r=b91e3ce9d61bcdeb0ac5e471f25eecfce385835a

EDIT : je confirme, nickel dans mon montage, plus de castagnettes xD
« Last Edit: August 31, 2012, 10:00:04 am by B@tto » Logged


Pages: 1 [2] 3   Go Up
Jump to: