Initiation au M32C: les bases

FIXME Images ajoutées bientôt…

Coeur du robot du Clubelek, le M32 - aka M32C87 - est un gros microcontrôleur 32 bits fabriqué par Renesas . Il fait partie de la série des réputés M16C , gonflé en 32 bits, en mémoire et en périphériques. Il fait office de centre décisionnel, rassemblant tout le pilotage du déplacement, et le contrôle de l'ensemble des capteurs et actionneurs.

Avant propos

m32c87.png

Son coeur CISC 32 bits / 32 MHz le place bien au dessus des PIC 18F que nous utilisons dans le reste du robot. Toute cette puissance lui permet de jouer le rôle du pilote. Il contrôle tous les actionneurs, reçoit les informations de tous les capteurs, et gère le déplacement et le positionnement.

Sa mise en oeuvre, bien que relativement aisée, demande un peu plus de soin que pour un PIC, et c'est tout l'objet de cet article ;)

Dossier M32C

1. les bases

2. le bus

3. câblage d'une SRAM

4. câblage d'une FLASH

5. Controller Area Network (bus CAN)

6. Moe 2008

Introduction

Au menu des caractéristiques techniques, le M32C87 possède une large panoplie de périphériques : Timers 16 bits Convertisseurs A/D et D/A 7 canaux d'UART Bus parallèle 16 bits DMA CAN PLL

Il intègre entre 24ko et 48ko de RAM non 'banquée' comme sur les pic, adressable intégralement et entre 384ko et 1Mo de flash programme. Il sait fonctionner en 5V ou en 3V3 pour faciliter l'interfaçage avec des puces mémoire ou des FPGA. Il est disponible en boîtiers TQFP uniquement comme tout ses cousins de la série M32C/80. Deux déclinaisons existent cependant : en 100 pattes et en 144 pattes.

Documentation du M32C87

Prérequis

Le but de ce paragraphe est de vous faire prendre conscience des moyens et du matériel nécessaire pour développer sur M32C.

Outil de développement

Pour commencer, il faut investir dans un programmateur JTAG. Comptez dans les 300 €. Il vous servira aussi de debugger hardware. La suite de programmation HEW de renesas est presque gratuite, il existe une seule limitation, qui se situe sur la taille du binaire compilé. Mais cette limite est plutôt élevée : 64ko.

Compilateur C v5.41r01 + Environnement de développement HEW Programmateur/Debugger E8a Programmateur/Debugger M3A-0665 (obsolète mais encore utilisé au clubelek)

Technologie de circuit imprimé

Ensuite il faut être capable de graver un PCB pour un boitier TQFP 100 ou 144, ie un pitch de 0.5mm. Il vous faudra sans doute d'autres moyens de fabrication que ceux que vous utiliseriez pour de simple PIC. De plus, une telle densité sur un boîtier est particulièrement difficile à router ⇒ il y aura une foule de vias sur la carte. Suivant le budget que vous avez, il y a 3 cas de figure. 1. Peu de moyens : minimum vital Un PCB sur 2 couches en classe 4 avec trous métallisés est le strict minimum.

2. Coût raisonnable

Commencez par augmenter le nombre de couches : passer à 4, ça vous permettra de faire au moins une couche de masse, et si possible une couche d'alimentation. Puis changez pour de la classe 5 qui vous autorisera des vias plus petites, et des pistes très très fines.

3. Confort

Sans tomber dans l'excès, 6 couches en classe 5 garantit un routage tranquille, et vous permettra sans aucun doute de réduire la taille de la carte.

Würth Elektronik , sponsor du Clubelek pour la fabrication des circuits imprimés.

Classe 1 2 3 4 5 6
Largeur de piste (mm) 0.80 0.50 0.31 0.21 0.15 0.12
Espacement minimal (mm) 0.68 0.50 0.31 0.21 0.15 0.12

Soudure

Eh oui, ce fameux boîtier TQFP 144 ne pose pas seulement des problèmes au routage, mais aussi à la soudure. Sauf que là, et ça n'est pas forcément une bonne nouvelle, il existe des moyens de s'en sortir artisanalement. Inutile de vous dire que la qualité de votre fer à souder est primordiale. La taille des pattes faisant 0.3 mm, il faudra investir dans une panne de cet ordre de grandeur. Essayez aussi de vous procurer une binoculaire, c'est extrêmement pratique pour vérifier les contacts. Je ne détaillerai pas ici les techniques de soudage pour ce genre de composant, il existe en effet beaucoup de façons de procéder différentes. Je vais cependant parler brièvement de mon expérience sur la soudure “à la main”.

Le constat final : c'est une technique imparfaite, sur 144 pattes, il y a forcément du déchet (absence de contact, ou court-circuit avec les pattes adjacentes). Le problème c'est qu'il est très difficile de tester chaque soudure du fait même des petites dimensions du boîtier. La conséquence de cette imperfection : un comportement aléatoire de la carte. “suivant si j'appuie un peu sur ce coin là, ou que je tord la carte comme ça…” Et pendant la phase de développement informatique, c'est insupportable de ne pas pouvoir faire confiance au matériel. Retenez donc qu'il est possible de s'en sortir avec de faibles moyens, mais que l'économie ainsi faite sur la soudure se reportera en temps perdu à l'utilisation.

La solution industrielle à ce problème est simplement de passer par un sous-traitant assembleur, qui fera ça au four à refusion et à la machine à placer.

Addax, sponsor du Clubelek pour l'assemblage.

Instruments de mesure

Je partirai du principe que chacun de vous possède un oscilloscope, si ce n'est pas le cas, c'est le moment d'en trouver un :D Par contre il est beaucoup plus rare de trouver dans nos petits labos d'électronique un analyseur logique. Et là aussi, j'aurai tendance à dire que c'est le bon moment pour investir…

Montage basique

Pour la plus simple des utilisations, il ne faut vraiment pas grand chose pour faire tourner un M32. Je dirais même qu'à part un découplage propre des multiples pattes d'alimentations, et quelques pull-up de configuration, il n'y a rien à faire. Le schéma le plus simple se résume donc à celui-ci :

Schema.png Schéma de base pour la mise en oeuvre d'un M32

Découplage

Un condensateur de 100nF par broche d'alimentation est une bonne pratique. S'il vous avez la possibilité de router en plus de 2 couches, il est bon de se réserver une couche complète pour y faire un plan de masse, et encore mieux une deuxième couche pour un plan d'alimentation.

Layers.png Organisation des couches de routage : 6 couches, dont 1 plan de masse et 1 plan d'alim

Le routage des condensateurs de découplage doit être fait avec soin. Serappeler que l'utilité d'un tel condensateur est de découpler l'alim etnon la masse, il faut donc absolument que la distance entre lecondensateur et la broche d'alim du M32 soit la plus courte possible,et ne contienne aucune via.

Decouplage-good.png

Decouplage-Bad.jpg

Découplage des alimentations

Configuration

Le seul réglage à faire pour ce montage simpliste concerne la méthode de boot du coeur. Nous souhaitons que le M32 se comporte comme un microcontrôleur, et démarre depuis sa flash interne, puisque nous n'avons aucune mémoire externe présente sur ce schéma. Cette configuration se fait par le biais de la broche CNVSS qui doit être tirée à 0.

Programmation

La programmation du M32 se fait avec une sonde JTAG, et celle que nous utilisons au club (qui commence à se faire un peu ancienne certes) porte le doux nom de M3A-0665. Elle sert à la fois de programmateur et de debugger. Elle communique à travers un simple port série synchrone (RX1, TX1, CLK1, CTS1), la broche HOLD lui sert quand à elle à mettre le cœur du M32 en pause pour les besoins du débugger, et la broche WR activée juste après un reset active son mode programmation. La connexion se fait par un simple HE10 10 points. Pour le câblage du nouveau programmateur/debuggeur, l'E8a, consultez cette documentation.

Conclusion

Voilà qui devrait vous permettre de démarrer sereinement un design. Il n'y a pas vraiment de grosses difficultés, si ce n'est de bien penser aux quelques pull-up/pull-down et de concevoir proprement l'alimentation. Ce montage vous permet de vous servir tranquillement d'un M32 dans son fonctionnement le plus simple, comme n'importe quel autre microcontrôleur. La suite de ce dossier vous permettra d'entrevoir toute la puissance caché derrière cette vitrine de “simple microcontrôleur”.

Article écrit par QUADRINI Matthieu

19 juin 2008