Trinket-AvrDude

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Programmation du Trinket avec AVRDude

Certains développeurs pourraient vouloir programmer le Trinket directement en utilisant le compilateur AVR-GCC (avec vi/emacs comme éditeur et AVRdude comme programmateur).

C'est facile à réaliser!

Cibler l'Attiny85 comme puce à utiliser avec avr-gcc, avec F_CPU à 8MHz et en sélectionnant l'oscillateur interne.

Des changements mineurs sont à faire dans avrdude.conf pour utiliser avrdude. Pour trouver le fichier avrdude.conf, ouvrez une fenêtre de ligne de commande (CLI : Command Ligne Interface - Interface en Ligne de Commande... sous windows c'est cmd, pour mac c'est Terminal et pour linux c'est rxvt).

Entrez ensuite la commande: avrdude -v

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Recherchez la ligne "System wide configuration file is .....", cette ligne indique l'emplacement du fichier avrdude.conf.

Comme notre bootloader USB est un peu différent des programmeurs traditionnels, nous devons mettre à jour notre fichier de configuration pour augmenter le délai d'effacement. Cela n'affecte pas la programmation de l'Attiny85, nous pourrons nous servir de ce fichier de configuration avec les Trinkets ou directement avec les circuits-intégrés sans aucun problème.

Mise à jour de avrdude.conf

Méthode Courte

Téléchargez le nouveau fichier avrdude.conf en cliquant sur le lien suivant. Renommez l'ancien fichier en avrdudeconf.bak, et placez le nouveau fichier dans le même répertoire.

Le fichier de configuration nécessaire pour le Mac est un peu différent :

Méthode Longue

Il n'est pas trop difficile de faire la mise à jour de d'avrdude.conf si vous y tenez.

Ouvrez le fichier dans votre éditeur favori.

Trinket-AvrDud-01.jpg
Crédit: AdaFruit Industries www.adafruit.com


et recherchez le texte suivant :

#------------------------------------------------------------
# ATtiny85
#------------------------------------------------------------

Trinket-AvrDud-02.jpg
Crédit: AdaFruit Industries www.adafruit.com

Supprimez le texte après l'entête Attiny85. Celui commençant par "part" et jusque l'entête suivante (dans notre cas, il s'agit de : ATmega640)

Trinket-AvrDud-03.jpg
Crédit: AdaFruit Industries www.adafruit.com

Collez ensuite le texte suivant à l'endroit même de ce que vous venez d'effacer!

part
     id            = "t85";
     desc          = "ATtiny85";
     has_debugwire = yes;
     flash_instr   = 0xB4, 0x02, 0x12;
     eeprom_instr  = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
	             0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC,
	             0x99, 0xE1, 0xBB, 0xAC;
## no STK500 devcode in XML file, use the ATtiny45 one
     stk500_devcode   = 0x14;
##  avr910_devcode   = ?;
##  Try the AT90S2313 devcode:
     avr910_devcode   = 0x20;
     signature        = 0x1e 0x93 0x0b;
     reset            = io;
     chip_erase_delay = 900000;

     pgm_enable       = "1 0 1 0  1 1 0 0    0 1 0 1  0 0 1 1",
                        "x x x x  x x x x    x x x x  x x x x";

     chip_erase       = "1 0 1 0  1 1 0 0    1 0 0 x  x x x x",
                        "x x x x  x x x x    x x x x  x x x x";

    timeout		= 200;
    stabdelay		= 100;
    cmdexedelay		= 25;
    synchloops		= 32;
    bytedelay		= 0;
    pollindex		= 3;
    pollvalue		= 0x53;
    predelay		= 1;
    postdelay		= 1;
    pollmethod		= 1;

    hvsp_controlstack   =
        0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66,
        0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78,
        0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10,
        0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00;
    hventerstabdelay    = 100;
    hvspcmdexedelay     = 0;
    synchcycles         = 6;
    latchcycles         = 1;
    togglevtg           = 1;
    poweroffdelay       = 25;
    resetdelayms        = 1;
    resetdelayus        = 0;
    hvleavestabdelay    = 100;
    resetdelay          = 25;
    chiperasepolltimeout = 40;
    chiperasetime       = 900000;
    programfusepolltimeout = 25;
    programlockpolltimeout = 25;

     memory "eeprom"
         size            = 512;
        paged           = no;
        page_size       = 4;
         min_write_delay = 4000;
         max_write_delay = 4500;
         readback_p1     = 0xff;
         readback_p2     = 0xff;
         read            = "1  0  1  0   0  0  0  0    0 0 0 x  x x x a8",
                           "a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";

         write           = "1  1  0  0   0  0  0  0    0 0 0 x  x x x a8",
                           "a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";

	loadpage_lo	= "  1   1   0   0      0   0   0   1",
			  "  0   0   0   0      0   0   0   0",
			  "  0   0   0   0      0   0  a1  a0",
			  "  i   i   i   i      i   i   i   i";

	writepage	= "  1   1   0   0      0   0   1   0",
			  "  0   0   x   x      x   x   x  a8",
			  " a7  a6  a5  a4     a3  a2   0   0",
			  "  x   x   x   x      x   x   x   x";

	mode		= 0x41;
	delay		= 12;
	blocksize	= 4;
	readsize	= 256;
       ;
     memory "flash"
         paged           = yes;
         size            = 8192;
         page_size       = 64;
         num_pages       = 128;
         min_write_delay = 30000;
         max_write_delay = 30000;
         readback_p1     = 0xff;
         readback_p2     = 0xff;
         read_lo         = "  0   0   1   0    0   0   0   0",
                           "  0   0   0   0  a11 a10  a9  a8",
                           " a7  a6  a5  a4   a3  a2  a1  a0",
                           "  o   o   o   o    o   o   o   o";

         read_hi         = "  0   0   1   0    1   0   0   0",
                           "  0   0   0   0  a11 a10  a9  a8",
                           " a7  a6  a5  a4   a3  a2  a1  a0",
                           "  o   o   o   o    o   o   o   o";

         loadpage_lo     = "  0   1   0   0    0   0   0   0",
                           "  0   0   0   x    x   x   x   x",
                           "  x   x   x  a4   a3  a2  a1  a0",
                           "  i   i   i   i    i   i   i   i";

         loadpage_hi     = "  0   1   0   0    1   0   0   0",
                           "  0   0   0   x    x   x   x   x",
                           "  x   x   x  a4   a3  a2  a1  a0",
                           "  i   i   i   i    i   i   i   i";

         writepage       = "  0  1  0  0   1   1   0  0",
                           "  0  0  0  0  a11 a10 a9 a8",
                           " a7 a6 a5  x   x  x  x  x",
                           "  x  x  x  x   x  x  x  x";

	mode		= 0x41;
	delay		= 6;
	blocksize	= 32;
	readsize	= 256;
       ;
#   ATtiny85 has Signature Bytes: 0x1E 0x93 0x08.
     memory "signature"
         size            = 3;
         read            = "0  0  1  1   0  0  0  0   0  0  0  x   x  x  x  x",
                           "x  x  x  x   x  x a1 a0   o  o  o  o   o  o  o  o";
       ;
     memory "lock"
         size            = 1;
         write           = "1 0 1 0  1 1 0 0  1 1 1 x  x x x x",
                           "x x x x  x x x x  1 1 i i  i i i i";
        min_write_delay = 9000;
        max_write_delay = 9000;
       ;

     memory "lfuse"
         size            = 1;
         write           = "1 0 1 0  1 1 0 0  1 0 1 0  0 0 0 0",
                           "x x x x  x x x x  i i i i  i i i i";

         read            = "0 1 0 1  0 0 0 0  0 0 0 0  0 0 0 0",
                           "x x x x  x x x x  o o o o  o o o o";
        min_write_delay = 9000;
        max_write_delay = 9000;
       ;

     memory "hfuse"
         size            = 1;
         write           = "1 0 1 0  1 1 0 0  1 0 1 0  1 0 0 0",
                           "x x x x  x x x x  i i i i  i i i i";

         read            = "0 1 0 1  1 0 0 0  0 0 0 0  1 0 0 0",
                           "x x x x  x x x x  o o o o  o o o o";
        min_write_delay = 9000;
        max_write_delay = 9000;
       ;

     memory "efuse"
         size            = 1;
         write           = "1 0 1 0  1 1 0 0  1 0 1 0  0 1 0 0",
                           "x x x x  x x x x  x x x x  x x x i";

         read            = "0 1 0 1  0 0 0 0  0 0 0 0  1 0 0 0",
                           "x x x x  x x x x  o o o o  o o o o";
        min_write_delay = 9000;
        max_write_delay = 9000;
     ;

     memory "calibration"
         size            = 2;
         read            = "0  0  1  1   1  0  0  0    0 0 0 x  x x x x",
                           "0  0  0  0   0  0  0  a0   o o o o  o o o o";
     ;
  ;


Pour les éditeurs MAC qui modifie manuellement le fichier: vous devez effacer toutes les références au port parallèle ("type = par;").

Téléverser avec AVRdude

Nous sommes maintenant prêts à utiliser avrdude. Ouvrez une ligne de commande et entrez la commande suivante (mais ne pas presser 'return')

avrdude -c usbtiny -p attiny85

Trinket-AvrDud-10.jpg
Crédit: AdaFruit Industries www.adafruit.com


Connectez ensuite votre Trinket au port USB de votre ordinateur et/ou pressez le bouton de activer le mode bootloader.

Vous devriez voir la LED rouge clignoter. Enfin pressez 'return', vous devriez obtenir une réponse similaire à celle ci-dessous :

Trinket-AvrDud-11.jpg
Crédit: AdaFruit Industries www.adafruit.com

Si vous obtenez la réponse suivante:

avrdude: Error: Could not find USBtiny device (0x1781/0xc9f)

C'est que le bootloader n'est pas actif, assurez-vous que la LED rouge clignote, pressez le bouton Reset/de réinitialisation pour relancer à nouveau le bootloader.

Si vous obtenez la réponse suivante:

avrdude: error: usbtiny_transmit: error sending control message: Operation not permitted

C'est que vous travaillez probablement sur un système Linux... ajouter sudo devant la commande pour permettre à AvrDude d'accéder librement au port usb.

Blink avec AvdDude

Si vous voulez connaitre l'utilisation d'AvrDude et d'avr-gcc en profondeur alors il vous faudra lire un tutoriel/livre détaillé sur ces sujets. Vous pouvez cependant effectuer un test élémentaire en téléchargeant le fichier .HEX suivant.

Cliquez sur le lien ci-dessous pour télécharger le fichier Hex et placez-le dans le même répertoire que votre invite de commande. Dans cette copie d'écran il 'agit de C:\Users\ladyada

Chargez ensuite le fichier HEX avec la commande : avrdude -c usbtiny -p attiny85 -U flash:w:trinketblink.hex

Si AvrDude vous renvoi une erreur, vous pouvez essayer avec la commande: avrdude -c usbtiny -p attiny85 -D -U flash:w:trinketblink.hex (notez le -D supplémentaire)

Comme précédemment, tapez la commande, ensuite pressez le bouton Reset/réinitialisation pour initier le bootloader. Presser la touche "entrée"/Return pendant que la LED clignote.

Lors du chargement, vous verrez s'afficher plusieurs message : avrdude: 8 retries during SPI command et avertissements similaires.

C'EST NORMAL! et cela est provoqué par le fonctionnement des ATtiny85. Il existe un petit délai lors de l'écriture du nouveau programme dans la mémoire flash. Pendant ce délai d'écriture, AtTiny n'est pas capable de gérer la communication USB. Le support USB informe donc AvrDude du délai de traitement... AvrDude vous informe de cet alerte et fait d'autre tentative.

Trinket-AvrDud-20.jpg
Crédit: AdaFruit Industries www.adafruit.com


Source: Introducing Trinket réalisé par Ladyada pour AdaFruit Industries. Crédit AdaFruit Industries

Réalisé avec l'aide de Mr Carette J. à qui nous remettons tous nos remerciements.

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.