Initiation au M32C: le bus

Après l'explication succinte précédente sur les bases de la mise en oeuvre d'un M32, il est temps de vous parler d'une de ses caractéristiques fondamentales qui fait toute la différence avec un PIC: le bus de communication. C'est plus qu'un simple périphérique supplémentaire, c'est toute une philosophie ;)

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 '08

Introduction

Sémantiquement, le M32 fait partie de la famille des microcontrôleurs puisqu'il embarque de la mémoire et toute une panoplie de périphériques de communication. Cependant, avec un peu de recul on se rend compte qu'il a également tout de l'esprit d'un microprocesseur. En parcourant sa datasheet, on y entend parler de “Microprocessor mode”, de “Memory expansion” et de “External memory boot”. Puis en jetant un coup d'oeil à ses I/O, on remarque que près de la moitié d'entre elle sont dédiées à un bus de communication parallèle. Dans les fait, ce bus n'est autre qu'une extension du bus système interne au micro. Celui-là même utilisé par le cœur pour accéder aux registres, aux variables en ram interne et aux instructions du programme en flash.

Les M32C sont en fait pleinement conçus pour être au centre d'un système embarqué complexe, pour pouvoir naturellement dialoguer avec une puce de SRAM en cas de besoin, ou une puce de FLASH s'il est nécessaire d'enregistrer de grosses quantités de données, voire même avec un contrôleur USB 2 pour communiquer à très haute vitesse avec un ordinateur. Son bus de 16 bits de large @ 32 MHz lui offre une certaine souplesse, puisqu'il permet un débit maximal de 32 Mo/s, et avec les contrôleurs DMA intégrés, il n'est pas difficile de les atteindre…

Bus-Synoptique.jpg

M32C, au coeur d'un système embarqué : SRAM + FLASH NAND + USB 2.0

Vue d'ensemble

Le bus de communication parallèle des M32C est un bus bidirectionnel synchrone sur lequel coexistent 2 types d'entités. Des esclaves et des maîtres… un seul maître en fait. Une transaction sur le bus est toujours à l'initiative du maître. Les esclaves restent passifs, neutres électriquement tant qu'ils ne sont pas adressés par le contrôleur maître. 'Adressés'… c'est là que réside toute la philosophie du système. Chaque périphérique, quel qu'il soit, représente une zone de mémoire. Il lui est attribué (par branchement) une plage d'adresses et le maître agit sur le bus comme s'il lisait ou écrivait dans un registre ou dans une variable. Il s'agit exactement des mêmes mécanismes. Les M32C ont un bus d'adresse de 24 bits de large, et peuvent ainsi adresser jusqu'à 16 Mo de mémoire.

m32-memory.png Carte de la mémoire

Un bus parallèle est décomposé en plusieurs groupe de signaux, on distingue :

  • Data(16 bits) : signaux bidirectionnels, représente les données échangées sur le bus, dans un sens ou dans l'autre
  • Address (24 bits) : emplacement mémoire accédé sur le bus. 16Mo sont adressables avec ces 24bits.
  • Chip Select : En fait, les bits de poids fort du bus d'adresse servent de signal de sélection de périphérique. La mémoire adressable est découpée en plusieurs zones, chacune possédant son propre chip select, et chacune correspondant à un périphérique différent.
  • WR : Signal qui ordonne une écriture à l'état bas.
  • RD : Signal qui ordonne une lecture à l'état bas.

Chonogramme-Base.PNG Chronogramme d'une lecture

Ce qu'il y a de puissant avec ces zones mémoires sélectionnables, c'est qu'il est possible de régler un timing différent pour chacune d'entre elle, de façon à s'adapter spécifiquement aux puces mémoires reliées, et de sorte qu'une SRAM très rapide ne soit pas pénalisée par une FLASH bien plus lente toutes deux sur le bus du M32.

Vous remarquerez que chaque transaction est en phase avec le battement de l'horloge (BCLK sur le graphique ci-dessus), il s'agit d'un bus synchrone. Sur le chronogramme représenté, on observe une opération de lecture. Dans la première période d'horloge, l'adresse, le chip select, et le signal de lecture sont présentés sur le bus. Et à la fin de la période suivante, le M32 capture la réponse de lecture sur les données et remonte au repos ses signaux de contrôle.

Adressage

Il existe un piège meurtrier, et assez peu documenté tant il s'agit là d'une évidence pour tous les experts en la matière ;) : la méthode d'adressage du bus…

Partont de ce que nous savons. Le bus du M32 contient 16 bits de données, il transfert donc 2 octets à chaque transaction. Si on observe le chronogramme du dessus, l'adresse présentée ne change pas au cours de la transaction, et c'est bien normal. Mais celà veut-il dire qu'à chaque adresse du bus correspondent 2 octets ? Oui et non…

Si l'on se place du côté des fabricants de microcontrôleurs et microprocesseurs, une adresse correspond toujours à un et un seul octet. C'est donc le cas du M32 : une transaction de 16 bits sur le bus correspond à l'échange de deux octets situés à deux adresses consécutives. On parle alors de bus “Byte addressable”.

A l'inverse, les fabricant de puces mémoires considèrent qu'à chaque adresse correspond un mot de la largeur du bus de données. Pour une SRAM de 16 bits donc, 2 octets n'occupent qu'une seule adresse. C'est une convention suivie par les deux parties dont il vaut mieux être conscient. Il s'agit alors de bus “Word addressable”.

Conséquence inévitable : les adresses du M32 sont décallées par rapport aux adresses d'une SRAM, ou plus généralement de tout périphérique mémoire d'une largeur de 16 bits.

Bus-Alignment1.png

Bus “Byte addressable” vs “Word addressable”

Bus-Memory_Organization.png

Organisation mémoire

Article écrit par QUADRINI Matthieu

19 juin 2008