Introduction aux micro-contrôleurs

Bits et mots

Un processeur ne sait manipuler que des nombres, donc pour traiter autre chose, par exemple du texte, on doit assigner un numéro à chaque caractère, ce numéro étant aussi utilisé par le périphérique d'affichage pour représenter le même caractère.

D'autre part, un processeur ne connaît que 2 états, vrai ou faux, 1 ou 0. Il représente donc les nombres en base 2 (ou binaire), dans laquelle les chiffres sont appelés bits, de l'anglais BInary digiT. Une suite d'un nombre fixe de bits est appelée "mot" (word en anglais), un mot de 8 bits est un "octet" (byte en anglais, jeu de mots avec le verbe to bite (mordre) dont le participe passé est bit) et un mot de 4 bits un "quartet" (nibble en anglais, autre jeu de mots, to nibble signifiant grignoter).

A titre d'exemple, le nombre 13 en base 10 s'écrit 1101 en base 2, c'est-à-dire 1 x 23 + 1 x 22 + 0 x 21 + 1 x 20. Évidemment, plus le nombre est grand, plus il faut de bits pour le représenter, ce qui devient vite encombrant. C'est pourquoi en développement on utilise la plupart du temps la base 16 (ou hexadécimal) pour représenter les nombres. En base 16, les chiffres sont représentés par les chiffres décimaux classiques de 0 à 9, puis on continue avec les lettres de A à F pour obtenir en tout 16 chiffres. 16 étant égal à 24, un seul chiffre hexadécimal permet de représenter 4 bits, ce qui donne des nombres plus lisibles pour un humain.

Processeur, registres et mémoire

On appelle processeur, ou micro-processeur, une unité d'exécution. Pour en comprendre le principe, on peut se l'imaginer comme un comptable auquel on donne des ordres : prends le contenu de telle case, ajoutes-y telle valeur et place le résultat dans telle autre case.

La liste des ordres qu'on donne au comptable-processeur est enregistrée dans un endroit appelé "mémoire programme", ou plus communément ROM (Read-Only Memory) ou encore mémoire Flash (un type courant de mémoire programme).

Les "cases" du tableur sur lequel travaille le comptable-processeur sont enregistrées dans la "mémoire données", ou plus communément RAM (Random Access Memory).

Les registres sont des cellules de mémoire de travail internes au processeur et aux périphériques. Les compilateurs essaient de maximiser l'utilisation des registres du processeur car le code correspondant est très compact et très rapide ("c'est étudié pour", comme disait Fernand Raynaud).

Périphériques, entrée-sorties et micro-contrôleur

Il ne sert à rien d'avoir un comptable-processeur si on ne peut ni lui parler, ni avoir accès au résultat de son travail. Les différents moyens de communication avec le comptable s'appellent les entrées-sorties, ou E/S (en anglais Input/Output, I/O).

Les entrées-sorties sont tellement indispensables qu'on n'imagine plus aujourd'hui fabriquer un processeur sans lui adjoindre toute une batterie de dispositifs d'entrée-sortie. Le résultat de cette association est appelé SoC (System on a Chip). Un micro-contrôleur est simplement un SoC qui intègre processeur, dispositifs d'entrée-sortie et mémoire (programme et données).

Les dispositifs d'entrée-sortie intégrés dans un SoC font partie des "périphériques" qui forment l'entourage du processeur-comptable et en font quelque chose d'utile. Ces périphériques sont internes au micro-contrôleur, mais le même terme est aussi utilisé pour des dispositifs externes interagissant avec le SoC, comme par exemple un afficheur LCD ou un capteur de température.

Le processeur interagit avec les périphériques à travers des registres de commande et d'état (CSR, Control and Status Register), parfois appelés registres à fonction spéciale (SFR, Special Function Register). Ces registres sont accessibles dans des régions réservées de la mémoire données.

Bus et adressage

Pour communiquer avec la mémoire (programme ou données), le processeur doit lui indiquer le numéro de la case à laquelle il veut accéder, appelé "adresse" ; ensuite, le contenu de la case peut être lu ou écrit. S'agissant de 2 informations distinctes, le processeur a besoin de 2 voies de communication indépendantes avec la mémoire. Ces voies de communications sont appelées "bus". Comme tout est nombre chez les processeurs, un bus transmet des nombres et, tout étant fini dans ce bas monde, ces nombres sont des mots car ils ont une taille fixe.

Un bus permet de relier de multiples dispositifs en parallèle. Par exemple, le bus d'adresses pourra desservir à la fois la RAM et les périphériques, le dispositif concerné se reconnaissant à ce que la valeur de l'adresse sur le bus est située dans une plage de valeurs qui lui est réservée. Il en va de même pour le bus de données, car pour une adresse donnée, seul le dispositif concerné s'en servira (en lecture ou en écriture).

La mémoire programme et la mémoire données peuvent toutes deux être connectées aux mêmes bus d'adresses et de données, on parle alors d'architecture von Neumann et on dit que programme et données se partagent le même espace d'adressage.

Cependant, la mémoire programme peut avoir ses propres bus d'adresses et de données, éventuellement de largeurs (taille de mot) différentes de celles de la mémoire données. On parle dans ce cas d'architecture Harvard et on dit que programme et données ont des espaces d'adressage distincts.

Une caractéristique importante d'un micro-contrôleur est la taille de son bus de données. On trouve aujourd'hui principalement des micro-contrôleurs 8 bits (ex. MCS-51, AVR, STM8) et 32 bits (ex. RISC‑V, ARM, MIPS).

Principaux types de périphériques internes

Nom Description
GPIO General Purpose Input Output

Couteau suisse des E/S. Permet de recevoir ou de produire des signaux logiques (0 ou 1) et de les manipuler avec souplesse (par mot entier, par groupe de bits, ou par bits individuels). Utilisé pour communiquer avec certains capteurs et actionneurs. Permet aussi des communications parallèles, c'est-à-dire transmettant plusieurs bits simultanément.
UART
USART
Universal Asynchronous Receiver Transmitter
Universal Synchronous Asynchronous Receiver Transmitter

Permet d'établir des communications série, c'est-à-dire transmettant les bits un à un. Avec l'aide d'un circuit externe pour conditionner le signal (buffer de ligne, modem), permet des transmissions sur de grandes distances.
SPI Serial Peripheral Interface

Permet d'établir des communications série entre un maître (le micro-contrôleur) et un ou plusieurs esclaves (des périphériques externes) situés sur la même carte.
I2C Inter-Integrated Circuit communication

Permet d'établir des communications série entre différentes puces situées sur la même carte.
CAN Controller Area Network

Permet d'établir des communications série entre les différents sous-systèmes d'un ensemble, donc entre des cartes différentes. Très utilisé dans l'automobile.
Ethernet Permet l'accès à un réseau informatique filaire basé sur les normes Ethernet (IEEE 802.3).
WiFi Permet l'accès à un réseau informatique sans fil basé sur les normes WiFi (IEEE 802.11).
BLE Bluetooth® Low Energy

Version basse consommation de Bluetooth, très utilisée dans les appareils fonctionnant sur batterie.
Timer Périphérique capable, selon sa configuration, de compter des impulsions, de mesurer leur durée, de générer des signaux périodiques, y compris des signaux PWM (Pulse Width Modulation), très utilisés pour la commande de servos et de moteurs.
DMA Direct Memory Access

Permet de faire des transferts de données (mémoire données <-> périphérique ou autre zone de mémoire données) très rapides car sans intervention du processeur.
...IC ... Interrupt Controller

Connu sous différents noms terminés par IC (ex. PLIC, NVIC), le contrôleur d'interruptions permet de définir quels événements peuvent interrompre le traitement principal de l'application, dans quelles conditions, et quelles parties du code géreront quels événements. C'est une partie essentielle d'un SoC.
RTC Real Time Clock

Gère la date et l'heure et permet de définir des alarmes.
ADC Analogue to Digital Converter

Convertit des signaux électriques analogiques (ex. audio) en nombres utilisables par le processeur.
DAC Digital to Analogue Converter

Convertir des nombres produits par le processeur en signaux électriques analogiques (ex. audio).

Périphériques radio - Distinction SoC / module

Les équipements produisant des ondes radio (ex. Wi-Fi, Bluetooth) sont soumis à une réglementation très stricte et à des tests de conformité, ce qui occasionne des coûts et délais importants aux fabricants desdits appareils.

Pour aider leurs clients à réduire ces coûts et délais, les fabricants de micro-contrôleurs pourvus de périphériques radio leur proposent des modules pré-certifiés incorporant le SoC, quelques composants et un blindage.

Ainsi, le fabricant du produit fini doit uniquement se concentrer sur la certification de son propre travail et pas sur celle du module de communication radio.

Du point de vue logiciel, c'est au SoC que nous avons affaire, qu'il soit ou non intégré à un module. Les caractéristiques (pour choisir la solution) et la documentation (pour le développement) qui nous intéressent sont celles du SoC. La documentation du module intéressera surtout ceux qui sont en charge de la partie matérielle.

Enfin, les fabricants de micro-contrôleurs ne documentent jamais les périphériques radio, ils fournissent seulement les librairies nécessaires à leur utilisation et des exemples de code. Ils évitent ainsi que leur produit soit utilisé dans des conditions différentes de celles ayant permis la pré-certification, prévenant ainsi le risque de litiges avec leurs clients suite à une utilisation incorrecte du produit.

La documentation des micro-contrôleurs

La documentation d'un micro-contrôleur est habituellement divisée en 2 documents, la "data sheet" (DS, fiche de caractéristiques) et le "technical reference manual" (TRM, manuel de référence technique).

La data sheet contient toutes les informations utiles à la conception matérielle du produit (brochage et dimensions du boîtier, définition des signaux et caractéristiques électriques) et le TRM les informations relatives au développement du logiciel, notamment la description des périphériques.

Il arrive que ces 2 documents soient fusionnés en un seul, alors incorrectement appelé soit data sheet, soit TRM. Peu importe, l'important est d'avoir toutes les informations dont on a besoin.

Un troisième type de document est à rechercher systématiquement lorsqu'on aborde un micro-contrôleur, le "silicon errata" (liste des bugs matériels).

Data sheet et TRM décrivent ce que le fabricant a eu l'intention de produire, mais des erreurs se glissent à tous les niveaux, y compris celui du silicium. Elles sont corrigées au fur et à mesure de leur détection, ce qui fait qu'un même micro-contrôleur existera en plusieurs versions successives, identifiées par un code sur son boîtier.

Le silicon errata décrit l'écart entre théorie et pratique pour chacune de ces versions. Lorsqu'il existe, sa consultation peut vous épargner des jours entiers de recherche d'un bug dans votre code alors qu'il est dans la puce. Elle peut même vous amener à changer de micro-contrôleur, une fonctionnalité essentielle pour vous et théoriquement présente n'étant en pratique pas utilisable, sans projet de correction de la part du fabricant...


Copyright (c) 2023 Vincent DEFERT - Tous droits réservés