Bien que j'aimerais beaucoup explorer les différentes méthodes de programmation disponibles, quelqu'un d'autre l'a déjà fait. Voici le tutoriel de Dean Camera sur AVRFreaks, méthodes de programmation AVR :
Il existe de nombreuses façons de programmer les microcontrôleurs AVR. Étant donné que de nombreuses personnes posent des questions différentes à un moment ou à un autre, je pensais les décrire ici afin que leurs questions puissent recevoir une réponse rapide et efficace. S'il vous plaît pardonnez-moi si je manque une méthode ou faire une erreur.
MÉTHODE 1: Programmation système (ISP)
Pris en charge par: La grande majorité des AVR (voir les messages ci-dessous)
Programmeurs pris en charge: AVRISP MKI / II, JTAG MKII, STK500, STK600, Dragon, clones AVRISP, programmeurs AVR910, AVRONE
La programmation système est peut-être la méthode la plus courante pour programmer le flash, l’EEPROM, le fusible et les octets de verrouillage de l’ensemble de la ligne de l’AVR. Le FAI peut programmer les AVR à une fréquence d'horloge extrêmement élevée (en supposant que l'AVR cible fonctionne à une fréquence élevée et que le programmeur la supporte) et constitue la méthode de choix pour presque tous les amateurs d'AVR. Il existe de très nombreux clones AVRISP et programmeurs AVR910 sur le marché, en plus de simples dongles de bricolage qui se connectent au port parallèle de votre ordinateur.
Les nouvelles conceptions récentes de dongle peuvent utiliser le port série de l'ordinateur. Toutefois, selon des preuves anecdotiques, cette méthode est extrêmement lente en raison de limitations techniques.
Le FAI exige que l’AVR cible fonctionne à une fréquence d’au moins quatre fois celle de son horloge. C’est un piège courant et une source de confusion pour de nombreuses personnes novices en AVR.
MÉTHODE 2: JTAG
Pris en charge par: Consultez l'aide d'AVRStudio Tools pour la prise en
charge des appareils MKI et MKII. Programmeurs pris en charge: JTAG-ICE, MKT JTAG-ICE, Dragon, clones JTAG-ICE, AVRONE, STK600 (programmation uniquement).
Techniquement, JTAG est un système de débogage, pas une méthode de programmation. Néanmoins, l’interface JTAG permet de programmer un AVR qui le supporte.
JTAG est un outil de débogage intégré au système qui vous permet de manipuler et d'examiner l'état d'un AVR pris en charge lorsqu'il est exécuté dans un circuit. JTAG permet à l'utilisateur d'arrêter l'exécution à tout moment, la manipulation des registres internes de l'AVR et bien plus encore.
Les unités officielles JTAG-ICE de ATMEL ont été remplacées par le JTAG-ICE MKII, qui prend en charge le protocole de débogage DebugWire plus récent et plus largement pris en charge de la gamme AVR, ainsi que la programmation via la méthode ISP (voir ci-dessus).
Les clones JTAG-ICE sont disponibles à bas prix, mais leur compatibilité limitée avec seulement quelques AVR limite leur utilité. Indépendamment de cela, si votre AVR prend en charge l'interface JTAG, JTAG-ICE reste une méthode et un programmeur de débogage très agréables et efficaces.
MÉTHODE 3: DebugWire
Pris en charge par: De nombreux plus petits AVR
Programmeurs pris en charge: JTAG-ICE MKII, Dragon, AVRONE
Encore une fois, DebugWire est un débogage plutôt qu'une interface de programmation, mais peut être utilisé pour charger des programmes dans des AVR pris en charge. L’interface dW utilise une seule broche AVR (la ligne / RESET) pour toutes les communications, ce qui la rend idéale pour les appareils AVR à faible nombre de broches.
MÉTHODE 4: chargeur de démarrage
Pris en charge par: La plupart des AVR les plus récents
Programmeurs pris en charge: N / A
Encore une fois techniquement pas une méthode de programmation. Un chargeur de démarrage est un petit programme AVR qui se trouve dans une section réservée réglable par l'utilisateur du flash régulier. Les bootloaders utilisent les fonctions de modification automatique de la mémoire flash disponibles dans les nouveaux AVR pour permettre à l’AVR de se programmer par le biais de données de programme chargées à partir d’une source externe. Les Bootloaders peuvent importer leurs données depuis n’importe quel emplacement (par exemple, une carte de données externe ou une carte SD). Cependant, le type le plus courant de Bootloader communique avec un PC via le port RS-232 (série) de l’AVR.
Les chargeurs de démarrage sont limités en ce qu'ils consomment de l'espace flash (ce qui limite la taille du flash disponible pour l'application de l'AVR) et ne peuvent pas modifier les bits de fusible de l'AVR.
Les bootloaders sont largement disponibles sur Internet pour le téléchargement, mais ils souffrent d'un problème de "poule et d'oeuf"; vous avez besoin d'un autre type de programmateur répertorié ici pour pouvoir commencer par programmer le chargeur de démarrage. Ceci est généralement résolu par la construction d'un simple dongle à port parallèle (voir la section FAI) ou par l'achat d'un AVR déjà préchargé avec un chargeur de démarrage (par exemple, la carte AVRButterfly).
MÉTHODE 5: Programmation parallèle haute tension (HVPP)
Pris en charge par: La plupart des AVR non-TINY (avec des exceptions)
Programmeurs pris en charge: STK500, STK600, Dragon, dongles Homebrew, AVRONE
La programmation parallèle haute tension est une méthode de programmation rarement utilisée, en raison des problèmes liés à la configuration. Malgré cela, la programmation HVPP est couramment utilisée pour "ressusciter" les AVR dont les fusibles ont été mal configurés via une autre méthode de programmation.
Le STK500 et le Dragon prennent en charge HVPP. Pendant le protocole HVPP, la broche / RESET de la cible est élevée à la valeur exceptionnellement élevée de 12 V qui engage le circuit de programmation parallèle interne. La broche / RESET est la seule broche de l’AVR (sur les AVR pris en charge par HVPP) pouvant être élevée en toute sécurité à ce niveau.
Vous pouvez créer votre propre clé HVPP en utilisant des forfaits en ligne tels que celui-ci.
MÉTHODE 6: Programmation série haute tension (HVSP)
Prise en charge par: Nombreux AVR TINY (avec des exceptions)
Programmeurs pris en charge: STK500, STK600, Dragon, dongles Homebrew, AVRONE
HVSP est similaire à HVPP, sauf que le transfert de données est effectué en série plutôt qu'en parallèle. Il s'agit de la méthode de programmation alternative utilisée par de nombreux AVR de la série TINY pour lesquels il manque suffisamment de broches pour HVPP.
MÉTHODE 7: PDI
Pris en charge par: XMEGA AVR
Programmeurs pris en charge: STK600, AVRONE, JTAG MKII, Dragon, AVRISP MKII
PDI est la nouvelle interface de programmation basée sur le protocole debugWire, pour la gamme d’AVR XMEGA. Il n'est actuellement pas utilisé sur d'autres microcontrôleurs AVR 8 bits.
MÉTHODE 8: TPI
Pris en charge par: 6-pin TINY AVR (ATTINY10, etc.)
Programmeurs pris en charge: STK600, Dragon, AVRISP MKII
TPI est une toute petite interface de programmation pour la nouvelle gamme d’AVR TINY à broches limitées, comme la ATTINY10 à 6 broches. Comme dW, TPI utilise la ligne / RESET du périphérique dans le cadre de l'interface de communication, mais la similitude s'arrête là. Étant donné que les TINY AVR de taille réduite ne disposent pas d'un circuit de débogage sur puce, le protocole TPI utilise une nouvelle interface de programmation à trois broches, dans un protocole semi-duplex. Étant donné que la ligne / RESET doit être augmentée à + 12V pour la programmation lorsque la broche RSTDSB du périphérique est définie, cette option est actuellement prise en charge par la carte de programmation STK600 plus récente.
Bonus FAQ section!
Quelle est la meilleure méthode?
Il n'y a pas de "meilleure" méthode universelle. La programmation ISP est simple et extrêmement populaire, mais toutes les méthodes ci-dessus fonctionneront. Les deux modes de programmation haute tension (celui qui convient à votre appareil) sont les plus riches en fonctionnalités, car ils permettent de réparer un AVR dont les fusibles ont été mal configurés. Cependant, ces méthodes sont difficiles à configurer, d’où la plupart des utilisateurs optent pour le fournisseur de services Internet.
J'ai fabriqué un dongle à port parallèle. Puis-je l'utiliser avec AVRStudio?
J'ai bien peur que non. AVRStudio ne peut s’interfacer avec des dongles "dumb" - il nécessite un périphérique de programmation intelligent (contenant un microcontrôleur lui-même) pour déchiffrer le protocole de communication qu’il envoie. Les dongles simples sans microcontrôleur doivent être «bitbangés» (c'est-à-dire les signaux appropriés simulés via le dongle via l'ordinateur) lui-même.
Donc, mon dongle est inutile alors?
Non. Vous pouvez toujours programmer via un dongle fait maison avec un logiciel de programmation tiers. AVRDude est un bon utilitaire en ligne de commande gratuit, connu et compris dans le package WinAVR.
Quelles sont mes options si je veux que mon programmeur fonctionne avec AVRStudio?
Choisissez un programmeur utilisant un protocole pris en charge par AVRStudio. Cela peut être le simple protocole "AVR910" (obsolète) ou une implémentation personnalisée du protocole utilisé par le STK500 / AVRISP. Notez que ces programmeurs nécessitent un micro-contrôleur, ce qui conduit à une situation de piège. Cela peut être résolu en pré-programmant l'AVR du programmateur au moment de l'achat avec le micrologiciel approprié ou en pré-programmant l'AVR avec un chargeur de démarrage.
Ok, je veux utiliser un chargeur de démarrage. Comment puis-je l'obtenir là-bas en premier lieu?!
Pour utiliser un chargeur de démarrage dans un AVR, vous devez d’abord le programmer. Si vous n’avez pas de programmateur existant (même un simple dongle idiot suffira pour la programmation initiale), vous pouvez également acheter des AVR préprogrammés avec un chargeur de démarrage de plusieurs fournisseurs.
Atmel fabrique également la carte de démonstration Butterfly, dont le MEGA169 AVR est préchargé avec un chargeur de démarrage compatible AVR-Studio.
Aidez-moi! J'ai joué avec les fusibles et cassé mon AVR tout en utilisant ISP!
L'erreur la plus courante consiste à remplacer les fusibles de sélection d'horloge par un réglage non valide. Essayez de placer une horloge externe sur la broche XTAL1 de l'AVR et voyez si cela vous aide.
À défaut, utilisez si possible l'une des méthodes haute tension. Cela corrigera toute mauvaise configuration, y compris celles impliquant la source d'horloge car les méthodes haute tension fournissent sa propre horloge à l'AVR pour la programmation.
Comment je m'interface avec mon programmeur?
Le logiciel que vous utilisez pour interfacer avec votre programmeur dépend du type de programmeur que vous utilisez.
Les dongles "dumb" simples nécessitent des logiciels tiers, tels que PonyProg ou AVRDude. Il peut s’agir d’outils de ligne de commande ou d’interface graphique - regardez sur le Web et vous en trouverez un adapté à vos besoins.
Les programmeurs et les chargeurs de démarrage basés sur le protocole AVR910 peuvent être utilisés dans AVRStudio. Dans le menu Outils, sélectionnez l’option "AVRProg" pour ouvrir un écran graphique permettant une interface avec votre programmeur. Comme alternative, des outils tiers tels que AVRDude sont également compatibles AVR910.
Les outils officiels sont étroitement intégrés à AVRStudio, en particulier dans le cas des variantes de débogage (JTAG / Dragon / etc). Dans le menu Outils d'AVRStudio, sélectionnez le sous-menu "Programme AVR ..." et cliquez sur l'élément "Connecter". Dans la nouvelle fenêtre, sélectionnez votre outil et son interface de connexion, puis cliquez sur OK.
Comme c'est le cas avec les dongles dumbles et les programmeurs AVR910, les outils officiels peuvent également être utilisés avec un logiciel de programmation tiers.
(C) Dean Camera, 2009. Tous droits réservés. Ne peut pas être reproduit sur un site Web autre qu'AVRFreaks.net sans autorisation expresse et préalable.