Contacts
Enseignant: Jérôme Collin, responsable (local M-4013, poste 5060)
Support technique supplémentaire: Laurent Tremblay (local M-4011, poste 7181)
Chargés de laboratoire: Section 1: Stefan Cotargasanu (Lundi AM)
Raphaël Tremblay (Mercredi PM)
Section 2: Ely Cheikh Abass (Mardi PM)
Manel Keddam (Jeudi AM)
Section 3: Tristan Rioux (Lundi PM)
Charles De Lafontaine (Jeudi PM)
Section 4: Paul Petibon (Mardi AM)
Julien Bourque (Vendredi AM)
Section 5: Sunnee Chevalier (Mercredi AM)
Meriam Ben Rabia (Vendredi PM)
Section 6: Ghali Chraibi (Mardi soir)
Xavier Caron (Jeudi soir)

Micrologiciel et amorce


Après avoir monté et soudé la carte mère et compris son fonctionnement, on pourra éventuellement s'en servir pour programmer un système comme un robot par exemple. Cependant, il reste une étape avant d'y arriver. Il faut d'abord programmer le microcontrôleur de programmation, le ATMega8, pour qu'il puisse prendre en charge la gestion de l'interface USB et arriver à programmer le ATMega324PA. Un autre point important est la configuration des deux microcontrôleurs eux-mêmes.


«Fusibles» de configuration des microcontrôleurs AVR


Il existe quelques paramètres intéressants sur les microcontrôleurs modernes qui les rendent vraiment flexibles. Il peut être intéressant, par exemple, de programmer un microcontrôleur et de s'assurer qu'il ne puisse plus jamais être reprogrammé. On peut aussi vouloir utiliser une horloge interne au microcontrôleur pour simplifier l'électronique ou choisir d'y aller avec une autre jugée plus appropriée et provenant de l'extérieur de la puce (ce qui est notre cas sur la carte mère).


Ce genre de configuration est possible avec les AVR. Atmel a donné le nom de «fusibles» (fuses en anglais) à ce genre de paramètres matériels. En réalité, il s'agit d'inscriptions dans une mémoire EEPROM bien délimitée à l'intérieur des microcontrôleurs. Le choix et la façon d'ajuster ces paramètres est un travail qui a été fait pour vous et que vous n'aurez pas à refaire.


Micrologiciel


Dans un système informatique, on cherche toujours à distinguer les parties logicielles et matérielles. Dans certains cas, cette différence devient floue puisque la programmation touche de très près aux éléments matériels. Avec le temps, les gens en sont venus à qualifier cette couche logicielle primaire de «micrologiciel». En anglais, la traduction est «firmware» pour montrer que ce genre de programme est souvent développé par des manufacturiers d'équipements électroniques qui conservent bien leurs secrets de programmation et de configuration dans certaines mémoires mortes des systèmes qu'ils fabriquent.


On peut voir le programme qui tournera sur le ATMega8 comme étant un «firmware» puisqu'il a pour fonction de communiquer avec le PC et de programmer le ATMega324PA. Ce code s'occupe donc de questions se situant très près de l'électronique de la carte mère et considérées comme étant de bas niveau. Il a surtout comme but de faciliter l'utilisation de la carte. Par ailleurs, l'utilisateur de la carte n'a aucunement besoin de comprendre le micrologiciel. La programmation du ATMega324PA se réalisera automatiquement pour lui et toutes les ressources de la carte lui seront accessibles.


Le micrologiciel a été développé en grande partie par la société Objective Devlopment et Thomas Fischl et amélioré par Matthew Khouzam, ancien étudiant à la maîtrise à l'École Polytechnique de Montréal en génie informatique. Il faut de bonnes connaissances du protocole USB et des techniques électroniques d'écriture de code à l'intérieur des AVR pour arriver à comprendre le code source du micrologiciel. Son étude dépasse largement le cadre du cours INF1900.


Chargement du micrologiciel


On l'a dit, le rôle du ATMega8 est de programmer le ATMega324PA. Mais alors, comment programmer le ATMega8 dans un premier temps? Il faut amorcer le système quelque part. Ici, il faudra programmer le ATMega8 par ISP à l'aide d'une autre carte mère... et donc d'un autre ATMega8! Par contre, tout autre programmeur ISP pourrait également faire l'affaire.




Chargement du micrologiciel sur une carte mère à partir d'une autre


La procédure de chargement du micrologiciel devra être effectuée par un chargé de laboratoire au poste du professeur où une carte mère de programmation est disponible. De plus, la plaque au poste du professeur est organisée pour faire rapidement et efficacement ces opérations. Le chargé de laboratoire procède également à une inspection visuelle de la carte à programmer avant toute chose pour éviter des situations inutiles de court-circuit.




Plaque de test et de programmation au laboratoire


La procédure est la suivante:


  1. S'assurer que la carte mère à programmer n'a pas de ATMega324PA dans son support de puce, car sa présence pourrait nuire à la programmation du ATMega8.

  2. La carte mère à programmer doit avoir un cavalier sur les positions 2 et 3 (vers la droite) de PrgSEL pour indiquer que le ATMega8 est la première puce à programmer.

  3. Avoir aussi un cavalier sur VtgEN sur la carte mère à programmer, car elle doit recevoir son alimentation de la carte de programmation.

  4. La carte mère de programmation ne doit avoir aucun cavalier sur PrgSEL (ce qui signifie qu'elle est, en fait, le programmeur de puce). Sur la plaque du laboratoire, c'est toujours le cas, car cette carte, située à droite, ne fait que servir de programmeur de puce. Il faut aussi placer un cavalier sur VtgEN pour fournir une tension à la carte à programmer.

  5. Relier les deux cartes par un câble plat gris de 10 fils. Les ports ISP-10 des deux cartes ainsi reliés permettent la programmation d'une carte mère par l'autre.

  6. Placer 9V avec une limitation de 450 mA sur la source de tension du laboratoire pour alimenter la carte de programmation. La carte à programmer devrait aussi être en activité puisqu'elle tire son alimentation de celle de programmation.

  1. La carte mère de programmation doit être reliée au PC par câble USB. Une carte mère de programmation bien reconnue par Linux vous est indiquée par les deux dernières lignes affichées par la commande 'dmesg' et/ou 'lsusb'.

  2. Exécuter les commandes suivantes à partir du PC pour configurer et charger le micrologiciel sur le ATMega8:

      % cd /usr/local/cours/inf1900/src/usbaspPoly/firmware

      % make fusesM8

      % make flash

  3. Si tout se passe bien, le ATMega8 de la carte cible est maintenant programmé et ses fusibles ont été correctement ajustés.

  4. Sur la carte à programmer, déplacer le cavalier des positions 2 et 3 de PrgSEL aux positions 1 et 2.

  5. Placer le ATMega324PA sur le support de puce de la carte mère à programmer.

  6. Exécuter la commande suivante à partir du PC pour configurer les fusibles du ATMega324PA correctement. Aucun programme ne sera installé sur ce microcontrôleur, mais il sera dans une configuration appropriée.

      % make fusesM324pa

  7. La procédure est terminée. On peut enlever le câble plat de 10 fils qui relie les deux cartes. La carte mère nouvellement programmée peut même devenir elle-même un programmeur de puce au besoin. Il faut laisser le cavalier aux positions 1 et 2 de PrgSEL en tout temps sur la carte pour pouvoir la programmer par port USB pour le reste de la session.


Il est à noter que cette configuration ne sera plus à refaire, à moins que l'un ou l'autre des microcontrôleurs de la carte doive être remplacé.


Programmation par USB


Une fois les microcontrôleurs configurés et le micrologiciel téléchargé, la programmation se fera aisément et à un niveau plus élevé. L'environnement logiciel sur le PC prendra de l'importance et le téléchargement par port USB sera laissé au programme AVRDude. Ce dernier sera simplement appelé dans un Makefile déjà bien ajusté pour le programmeur. Cette programmation à plus haut niveau est décrite dans une section séparée.