Go Down

Topic: Modification bootloader (Read 4977 times) previous topic - next topic

B@tto

Salut à tous !

J'ai réussi à esquiver jusqu'à maintenant mais voudrais modifier le bootloader d'un atmega328 (virer la LED 13 qui clignote au reset notamment) mais je trouve pas grand chose de concret sur google ... Si quelqu'un a un lien ou quelque chose sur windows je le remercie d'avance :)
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

skywodd

Salut,


J'ai réussi à esquiver jusqu'à maintenant mais voudrais modifier le bootloader d'un atmega328 (virer la LED 13 qui clignote au reset notamment) mais je trouve pas grand chose de concret sur google ... Si quelqu'un a un lien ou quelque chose sur windows je le remercie d'avance :)

La toolchain : winAVR (prendre la derniére version)
http://sourceforge.net/projects/winavr/files/WinAVR/

Le bootloader : optiboot (utilise un client mercurial pour récupérer les sources à jour : http://mercurial.selenic.com/downloads/)
http://code.google.com/p/optiboot/source/browse

La modif pour la led : ton cerveau et de solide connaissance en avr-c ;)
--> Fait gaffe à la taille final du programme tu est limité par la zone réservé pour le bootloader
--> ne touche pas aux déclarations et aux attributs .init9, naked, etc ... sinon ton bootloader sera corrompu.
--> plus généralement fait gaffe à tous ce que tu modifie, copie les lignes avant modifications et met les en commentaires pour garder une trace

La programmation : programmateur d'AVR ICSP + fichier makefile + éditeur intelligent (genre notepad++)
--> Fait ton choix pour le programmateur il en existe des 100aine
--> n'oublie pas de modifier le makefile suivant ta configuration (programmateur, carte cible, fonctionnalités STK500, etc ...)
Moi j'utilise un AVR pocket de sparkfun : http://skyduino.wordpress.com/2011/08/23/test-pocket-avr-programmer/
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

B@tto

Outch je voyais ça un peu plus simple ^^'

Jvois ça la semaine prochaine et jdonne mon retour ;)
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

jihelbi

Je vois pas bien la nécessité de modifier le bootloader.

La led en PIN 13 ne perturbe en rien le fonctionnement ni en entrée ni en sortie. Tu peux l'éteindre dans le setup de tes applications.

Le clignotement de cette Led est très utile car elle indique que le reset a eu lieu correctement par la séquence suivante :
- clignotement
- extinction
- allumage

Si tu supprimes cela tu ne sais jamais si le reset a eu lieu. C'est pourtant utile dans un sens ou dans l'autre (avec l'Arduino en ISP cela permet de voir qu'on a oublié la capa de 10 uF ou qu'elle n'est pas bien connectée).

JLB

68tjs

A propos de la del pin 13 avez vous remarqué que depuis la révision 3 (Uno et Mega) elle n'est plus câblée directement sur la pin 13.
Elle est maintenant commandée par l'ampli opérationnel qui était disponible mais non utilisé, l'ampli est câblé en suiveur de tension.

Ce qui fait que maintenant la pin 13 n'est plus chargée à basse impédance : Del + 300ohms.
Par là même la del ne tire plus son courant au travers de la pin 13 mais directement sur l'alimentation 5V.
Cela rend  l'usage de la résistance de tirage au +5V (pull-up) sur la sortie 13.

B@tto


Je vois pas bien la nécessité de modifier le bootloader.

La led en PIN 13 ne perturbe en rien le fonctionnement ni en entrée ni en sortie. Tu peux l'éteindre dans le setup de tes applications.



Sauf si tu t'en sers ... :0

Et le reset dans bien des applications t'en a rien à faire, d'ailleurs à y penser je ne m'en sers jamais !
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

jihelbi

Ca relève du TOC ton besoin d'éteindre cette LED...

Tu n'as qu'à mettre un ATmega sur une breadboard et le programmer avec ArduinoISP et tu feras ce que tu veux.

Ensuite le reset tu n'en as pas besoin jusqu'au jour où... Et pourquoi tous les processeurs en ont-il un ??? Tu raisonnes comme un débutant en deni de l'expertise des concepteurs des cartes Arduino.

La carte Arduino est un système de développement. Ensuite tu fais ta board avec le chip que tu veux (moi j'aime bien les ATtiny à 8 pattes). Tout est prévu pour cela dans l'environnement et tu peux rajouter des types à volonté dans le répertoire Arduino\hardware de "Mes documents". Il faut juste régler dans les fichiers boards.txt la variante de MCU, sa fréquence, sa taille de flash et les fuse bits qui vont bien selon ce que tu veux faire (datasheets ATMEL indispensables).

C'est l'intelligence du concept Arduino qui fait que nous sommes ici à discuter sur ce forum alors pourquoi le remettre en cause. La Rev 3 de la carte UNO résoud efficacement le problème de la Led 13.

Sinon il y a une autre solution : Pose sur la led un petit bout de scotch noir...

JLB

Snootlab

#7
Jul 11, 2012, 04:24 pm Last Edit: Jul 11, 2012, 04:57 pm by Snootlab Reason: 1
Bonjour,

Je suis désolé de ne pas suivre l'avis général, mais je vais encourager B@tto à la bidouille !
Peu importe ce qu'il veut faire, même si c'est pour juste éteindre le clignotement d'une led. Regarder/modifier votre bootloader, c'est aussi savoir ce qu'il y a dans vos machines, et essayer de l'apprivoiser.
donc, B@tto, je te recommande de :
1) Avoir deux Arduino (un qui te permettra de flasher/reflasher le deuxième, et qu'il ne faudra pas toucher)
2) faire une copie de save du répertoire ./hardware/arduino/bootloaders
3) savoir/apprendre comment compiler un programme en C avec make/avr-gcc (tutos pour arduino disponibles partout)
4) dans le dossier optiboot, éditer optiboot.c
5) remarquer dans le header "LED_START_FLASHES", la fonction flash_led et leurs rapports.
6) regarder dans le makefile si tu ne trouves rien d'interessant qui soit relié à ça.
7) faire les modifications idoines
8 ) faire un make clean
9) recompiler en fonction de la cible voulue "make <cible_voulue>
10) charger le nouveau bootloader.

et si ça n'a pas marché :
11) remplacer le répertoire par le répertoire de save, flasher un bootloader correct, s'assurer que tout marche, et recommencer au 1)

Bonne journée :)

-----
Stéphane.
- Distributeur officiel Arduino - France

jihelbi

Sauf qu'une réponse a déja été faite dans ce sens et que B@tto a répondu "Outch je voyais ça un peu plus simple ^^' "...

Bien évidemment dans une communauté open source les améliorations sont bienvenues mais je pense que cela concerne des développeurs confirmés qui apporteront quelque chose à la communauté et pourront proposer réellement une version différente et fiable de bootloader (même si je n'y vois aujourd'hui aucune nécessité).

Je pense qu'il lui serait plus profitable d'apprendre à faire ses boards avec des chips ATMEL divers et variés et profiter du fait que l'environnement Arduino lui permet de faire cela sans rien apprendre de l'environnement AVR et de continuer à programmer comme sur une carte Arduino avec la même simplicité sur un tiny ou un mega48V (que l'on trouve à pas cher).

Je persiste à considérer que l'intérêt d'Arduino est d'être un système de développement et que dans ce contexte l'extinction de la Led 13 est vraiment secondaire.

JLB

Snootlab

Je comprends tout à fait le principe du "ça marche, je touche pas, c'est trop compliqué de toute manière".
Sauf que là le but n'est pas de faire une meilleure version, juste de s'amuser à éteindre une led. Ce n'est pas une nécessité, c'est de la bricole fun :)

Quote
Sauf qu'une réponse a déja été faite dans ce sens et que B@tto a répondu "Outch je voyais ça un peu plus simple ^^' "...

On va rendre caduque tout ça, pour faire ce que B@tto veut faire, il y a UNE seule ligne à modifier.

Et comme je le disais, si il fait des betises, il recharge ses répertoires sauvegardés puis son bootloader et c'est reparti :)
Il ne faut pas avoir peur d'aller trifouiller VRAIMENT sous le capot, c'est fait aussi pour ça un microcontrôleur.

-----
Stéphane.
- Distributeur officiel Arduino - France

jihelbi

Je suis d'accord avec toi Snootlab, un microcontroleur c'est fait pour cela. J'ai bien dit un microcontroleur pas une carte Arduino qui est un système de développement.

Bien sur si les acheteurs d'Arduino achètent une carte Arduino pour chaque projet c'est mieux pour certains... Alors que s'ils se contentent d'une carte pour développer et achètent ensuite des ATMELs sur Ebay...

Maintenant le monde est fait de tout... Les concepteurs de cartes PC font même des cartes pour "jouer" à overclocker... alors que !..

Je pense surtout que B@tto a plein de choses à apprendre et que c'est vraiment pas le plus urgent que de modifier un bootloader sans comprendre ce que l'on fait juste en suivant les directives d'un forum.

JLB


skywodd


Je suis désolé de ne pas suivre l'avis général, mais je vais encourager B@tto à la bidouille !

Je ne suis pas ici pour encourager ou non B@tto dans sa manip, je lui fourni juste les info brute de forme, à lui de décider si il se lance ou pas.
Je peut parraitre un peu "voila tu va devoir faire ça ça et ça, fait gaffe c'est pas si simple que ça" mais c'est pour qu'il sachent à quoi s'attendre.


1) Avoir deux Arduino (un qui te permettra de flasher/reflasher le deuxième, et qu'il ne faudra pas toucher)
2) faire une copie de save du répertoire ./hardware/arduino/bootloaders
3) savoir/apprendre comment compiler un programme en C avec make/avr-gcc (tutos pour arduino disponibles partout)
4) dans le dossier optiboot, éditer optiboot.c
5) remarquer dans le header "LED_START_FLASHES", la fonction flash_led et leurs rapports.
6) regarder dans le makefile si tu ne trouves rien d'interessant qui soit relié à ça.
7) faire les modifications idoines
8 ) faire un make clean
9) recompiler en fonction de la cible voulue "make <cible_voulue>
10) charger le nouveau bootloader.

3) cette seul étape demande (au moins) une semaine de documentation pour un non initié.
Quand on sait utiliser un makefile et gcc en ligne de commande c'est certes d'une évidence désobligeante.
Mais quand on débute la subtilité du -Wl ou du -Os par exemple ne vient pas d'elle même à l'esprit.
De même la tabulation en début de ligne dans un makefile n'est pas inné.
Et dans le cadre d'un bootloader ce n'est pas envisageable de travailler ainsi.


Quote
Sauf qu'une réponse a déja été faite dans ce sens et que B@tto a répondu "Outch je voyais ça un peu plus simple ^^' "...

On va rendre caduque tout ça, pour faire ce que B@tto veut faire, il y a UNE seule ligne à modifier.

Dans le cadre d'un bootloader il y a tout la partie fusibles à gérer, l'adresse de début du bootloader, la taille en "mots" et en octets (à bien différencier) qui ne doit pas dépasser celle alloué.
Le bootloader optiboot est basé sur énormément de suppositions (états des registres, etc ...) et d'attribut spécifique à avr-gcc.
Il n'y as peut être qu'une seul ligne à modifier dans le code, mais il faut s'assurer que cela n'as pas corrompu l'intégrité du reste du code.


Et comme je le disais, si il fait des betises, il recharge ses répertoires sauvegardés puis son bootloader et c'est reparti :)
Il ne faut pas avoir peur d'aller trifouiller VRAIMENT sous le capot, c'est fait aussi pour ça un microcontrôleur.

Arduino est conçu pour être simple et "superficielle" d'un point de vue code, les actions bas niveaux n'ont jamais était vu comme de l'arduino.

C'est vrai qu'il ne faut pas avoir peur de regarder un peu plus en profondeur, mais il faut le faire avec du recule et un minimum de connaissances.
(Au moins de quoi sauver le matériel en cas d'erreur)

Sur un microcontrôleur AVR il est extrêmement simple d'activer un fusible critique par erreur (c'est du reste un point récurent qui en fait le point faible des AVR).
Un microcontrôleur avec ISP désactivé ? Ou une broche reset désactivé (Attiny) ?
Sans un programmateur "HVSP" celui ci est bon à jeter !
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

jihelbi

attiny45-16.name=ATtiny45 - 16 MHz clock (Arduino as ISP)
attiny45-16.upload.protocol=stk500
attiny45-16.upload.maximum_size=4096
attiny45-16.upload.speed=19200
attiny45-16.upload.using=arduinoisp
attiny45-16.bootloader.low_fuses=0xe1
attiny45-16.bootloader.high_fuses=0xdf
attiny45-16.bootloader.extended_fuses=0xff
attiny45-16.build.mcu=attiny45
attiny45-16.build.f_cpu=16000000L
attiny45-16.build.core=arduino:arduino
attiny45-16.build.variant=tiny8

attiny45-8.name=ATtiny45 - 8 MHz clock (Arduino as ISP)
attiny45-8.upload.protocol=stk500
attiny45-8.upload.maximum_size=4096
attiny45-8.upload.speed=19200
attiny45-8.upload.using=arduinoisp
attiny45-8.bootloader.low_fuses=0xe2
attiny45-8.bootloader.high_fuses=0xdf
attiny45-8.bootloader.extended_fuses=0xff
attiny45-8.build.mcu=attiny45
attiny45-8.build.f_cpu=8000000L
attiny45-8.build.core=arduino:arduino
attiny45-8.build.variant=tiny8

attiny45.name=ATtiny45 - 1 MHz clock (Arduino as ISP)
attiny45.upload.protocol=stk500
attiny45.upload.maximum_size=4096
attiny45.upload.speed=19200
attiny45.upload.using=arduinoisp
attiny45.bootloader.low_fuses=0x62
attiny45.bootloader.high_fuses=0xdf
attiny45.bootloader.extended_fuses=0xff
attiny45.build.mcu=attiny45
attiny45.build.f_cpu=1000000L
attiny45.build.core=arduino:arduino
attiny45.build.variant=tiny8


Avec ca dans le board.txt tu peux faire un burn bootloader avec ArduinoISP et changer la fréquence du Tiny. Attention ce qui change la fréquence ce sont les fuse bits pas le build.f_cpu qui ne fait qu'adapter les fonctions de Arduino.h qui s'occupe du temps et utilisent le timer 0.

JLB

B@tto

#13
Jul 11, 2012, 09:47 pm Last Edit: Jul 11, 2012, 09:50 pm by B@tto Reason: 1
Jihelbi tu ne sais absolument rien de moi et de mon projet, et tu viens me juger ... Sur le seul fait que je ne sais pas modifier un bootloader ... Renseigne toi avant de prendre les gens de haut. Je traine sur ce forum depuis bien plus longtemps que toi ;) 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 conçois de A à Z des appareils de labo, et la plateforme arduino me permet de largement répondre à tout mes besoins. J'ai démonté assez d'appareil commerciaux pour me rendre compte que beaucoup d'electroniciens pro doivent vraiment s'emmerder dans leur atelier pour tout bordéliser ainsi. J'ai un ami qui fait des études dans les microcontroleurs, il arrive en 5ème année et il ne sait toujours pas ce que c'est que l'i2c ... Mais c'est un peu pareil dans tous les domaines tu me diras.

EDIT : en plus je viens de mater l'optiboot, y'a quoi de sorcier ???
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

al1fch

#14
Jul 11, 2012, 10:23 pm Last Edit: Jul 11, 2012, 10:28 pm by al1fch Reason: 1
B@tto

rien de sorcier en effet, pas de tabou ou d'interdit !!!

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: [Select]
atmega328: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200'
Quelqu'un peut-il confirmer, infirmer, signaler un 'effet de bord'...... ?

On ne va quand même pas tomber içi dans le "dites moi ce que vous voulez, je vous montrerai comment vous en passer" !!

Go Up