Sciences de l'Ingénieur · Bac Sciences et Technologies Électriques

Architecture des Microcontrôleurs et Programmation

À l'intérieur de la puce qui pilote un système embarqué : CPU, bus internes, hiérarchie mémoire (RAM, Flash, EEPROM), cycle d'instruction et structure d'un programme.

Objectifs d'apprentissage

  • Décrire les blocs fonctionnels internes d'un microcontrôleur : CPU, mémoires, ports d'entrées-sorties, périphériques intégrés
  • Distinguer les trois bus internes : bus d'adresses (unidirectionnel), bus de données (bidirectionnel) et bus de contrôle
  • Décrire le cycle d'exécution d'une instruction : recherche (fetch), décodage (decode), exécution (execute)
  • Distinguer mémoire volatile (RAM, perdue à la coupure d'alimentation) et mémoire non volatile (Flash, EEPROM, conservée hors tension)
  • Distinguer mémoire Flash (programme, réinscriptible par blocs) et mémoire EEPROM (données de configuration, réinscriptible octet par octet)
  • Identifier le rôle des périphériques intégrés courants : timers/compteurs, CAN, liaison série (UART), sorties PWM
  • Expliquer le principe d'une interruption et son intérêt par rapport à une scrutation (polling) permanente
  • Lire et interpréter la structure d'un programme embarqué simple : déclarations, initialisation, boucle principale

Formules et résultats clés

Blocs fonctionnels internes

Un microcontrôleur intègre sur une seule puce le CPU (unité centrale, exécute les instructions), des mémoires (programme et données), des ports d'entrées-sorties et des périphériques intégrés (timers/compteurs, CAN, liaison série UART, sorties PWM) qui déchargent le CPU de tâches répétitives ou temporelles.

Les trois bus internes

Bus d'adresses (unidirectionnel) : transporte l'adresse de la case mémoire ou du périphérique concerné par l'échange.

Bus de données (bidirectionnel) : transporte la valeur effectivement lue ou écrite à cette adresse.

Bus de contrôle : transporte les signaux de synchronisation de l'échange (lecture/écriture, validation, horloge).

Hiérarchie mémoire

La mémoire RAM est volatile : elle contient les variables en cours d'exécution et se vide à chaque coupure d'alimentation. La mémoire Flash est non volatile et contient le programme, réinscriptible par blocs entiers. La mémoire EEPROMest elle aussi non volatile, mais réinscriptible octet par octet, ce qui la rend adaptée au stockage de données de configuration modifiées fréquemment (par exemple un paramètre réglé par l'utilisateur).

Cycle d'instruction

Le CPU exécute chaque instruction en trois phases : recherche (fetch, lecture de l'instruction en mémoire programme), décodage (decode, interprétation de l'instruction) et exécution(execute, réalisation de l'opération). La durée de ce cycle dépend directement de la fréquence de l'horloge du microcontrôleur.

Tcy=4FoscT_{cy} = \dfrac{4}{F_{osc}}

Relation typique pour de nombreux microcontrôleurs 8 bits : un cycle d'instruction TcyT_{cy} dure 4 périodes de l'oscillateur FoscF_{osc}, ce qui conditionne directement la durée de toute temporisation réalisée par une boucle logicielle.

Interruption vs scrutation

La scrutation (polling) consiste à tester répétitivement, dans le programme principal, l'état d'une entrée. L'interruptionlaisse le matériel signaler lui-même l'événement : le programme principal est automatiquement suspendu, la routine d'interruption s'exécute, puis le programme principal reprend exactement où il s'était arrêté.

Structure d'un programme embarqué

Un programme embarqué simple comprend généralement trois parties : les déclarations (variables, configuration des ports), une phase d'initialisation exécutée une seule fois au démarrage, puis une boucle principale infinie (le programme ne se termine jamais tant que le système est sous tension) qui répète en continu les tests et actions attendus.

Erreurs fréquentes

1

Confondre RAM (volatile, contient les variables en cours d'exécution, vidée à la coupure d'alimentation) et mémoire Flash (non volatile, contient le programme, conservée hors tension).

2

Confondre bus d'adresses (indique où lire/écrire, unidirectionnel du CPU vers la mémoire) et bus de données (transporte la valeur lue ou écrite, bidirectionnel).

3

Croire qu'une interruption arrête définitivement le programme principal : elle ne fait que le suspendre temporairement, exécuter une routine de service, puis reprendre le programme principal exactement là où il avait été interrompu.

4

Oublier que la scrutation (polling) consomme du temps processeur en permanence à vérifier un état, alors qu'une interruption libère le processeur pour d'autres tâches tant que l'événement ne s'est pas produit.

5

Confondre EEPROM (non volatile, réinscriptible octet par octet, utilisée pour des données de configuration) et Flash (non volatile, réinscriptible par blocs entiers, utilisée pour stocker le programme).

Exemple corrigé — Durée d'une temporisation logicielle

Énoncé

Un microcontrôleur fonctionne à Fosc=20 MHzF_{osc} = 20\ \text{MHz}, avec Tcy=4/FoscT_{cy} = 4/F_{osc}. Une boucle logicielle d'attente exécute 1000 instructions, chacune durant exactement un cycle d'instruction. 1) Calculer TcyT_{cy}. 2) Calculer la durée totale de la boucle d'attente.

Correction

1) Tcy=4Fosc=420×106=0,2×106 s=0,2 μsT_{cy} = \dfrac{4}{F_{osc}} = \dfrac{4}{20\times 10^{6}} = 0{,}2\times 10^{-6}\ \text{s} = 0{,}2\ \mu\text{s}.

2) Durée totale =1000×Tcy=1000×0,2×106=2×104 s=0,2 ms= 1000 \times T_{cy} = 1000 \times 0{,}2\times 10^{-6} = 2\times 10^{-4}\ \text{s} = 0{,}2\ \text{ms}.

3 exercices pour t'entraîner

Exercice 1

Facile

Une coupure d'alimentation survient sur un système à microcontrôleur en cours de fonctionnement. Que devient le contenu de sa mémoire RAM ? Que devient le contenu de sa mémoire Flash ?

Voir la correction

Le contenu de la RAM (mémoire volatile) est entièrement perdu à la coupure d'alimentation — toutes les variables en cours d'exécution disparaissent. Le contenu de la mémoire Flash (non volatile) est conservé intégralement : le programme sera de nouveau disponible et démarrera normalement dès la remise sous tension.

Exercice 2

Moyen

Un microcontrôleur fonctionne avec une horloge de fréquence Fosc=8 MHzF_{osc} = 8\ \text{MHz}. On admet que chaque cycle d'instruction dure 44 périodes d'horloge (Tcy=4/FoscT_{cy} = 4/F_{osc}). Calculer la durée d'un cycle d'instruction, puis le nombre approximatif d'instructions exécutables en une seconde.

Voir la correction

Tcy=4Fosc=48×106=0,5×106 s=0,5 μsT_{cy} = \dfrac{4}{F_{osc}} = \dfrac{4}{8\times 10^{6}} = 0{,}5\times 10^{-6}\ \text{s} = 0{,}5\ \mu\text{s}. Le nombre d'instructions exécutables par seconde vaut environ 1Tcy=10,5×106=2×106\dfrac{1}{T_{cy}} = \dfrac{1}{0{,}5\times 10^{-6}} = 2\times 10^{6} instructions par seconde, soit 2 millions d'instructions par seconde (en supposant qu'une instruction s'exécute en un seul cycle).

Exercice 3

Difficile

Un système embarqué doit à la fois exécuter un calcul de régulation long et répétitif, et réagir instantanément à l'appui d'un bouton d'arrêt d'urgence. Justifier pourquoi une solution par interruption est préférable à une solution par scrutation pour surveiller ce bouton.

Voir la correction

En scrutation, le programme devrait interrompre régulièrement son calcul de régulation pour vérifier l'état du bouton, ce qui ralentit le calcul principal et retarde la détection si le test n'est pas fait au bon moment — un risque inacceptable pour un arrêt d'urgence. Avec une interruption associée à la broche du bouton, le CPU peut exécuter le calcul de régulation sans interruption apparente ; dès que le bouton est actionné, le matériel déclenche automatiquement la routine de service, qui peut couper immédiatement l'alimentation des actionneurs, sans dépendre du moment où le programme principal en serait autrement. L'interruption garantit donc un temps de réaction déterministe et minimal, indispensable pour une fonction de sécurité.

3 exercices, c'est un début.

Orka en génère autant que tu veux sur ce chapitre, à ton niveau, avec correction détaillée étape par étape.

Continue gratuitement sur Orka

Va plus loin sur ce chapitre

Questions fréquentes

Quelle est la différence entre le bus d'adresses et le bus de données ?

Le bus d'adresses transporte, dans un seul sens (du CPU vers la mémoire ou les périphériques), l'adresse de la case mémoire ou du registre que le CPU veut lire ou écrire — c'est un bus unidirectionnel. Le bus de données transporte la valeur réellement lue ou écrite à cette adresse ; il est bidirectionnel, puisque le CPU peut aussi bien y déposer une donnée (écriture) qu'y recevoir une donnée (lecture). Un troisième bus, le bus de contrôle, transporte les signaux qui synchronisent l'échange (lecture/écriture, validation, horloge).

Pourquoi le programme est-il stocké en mémoire Flash et non en RAM ?

La mémoire Flash est non volatile : son contenu est conservé même hors tension, ce qui est indispensable pour un programme qui doit démarrer automatiquement dès la mise sous tension du système, sans intervention extérieure. La RAM, au contraire, est volatile : tout son contenu est perdu à chaque coupure d'alimentation. C'est pourquoi la RAM est réservée aux variables temporaires manipulées pendant l'exécution, jamais au code du programme lui-même.

Quel est l'intérêt d'une interruption par rapport à une scrutation ?

En scrutation (polling), le programme principal doit vérifier lui-même et en permanence l'état d'une entrée, ce qui consomme du temps processeur même quand rien ne se passe et peut retarder d'autres tâches. Avec une interruption, c'est le matériel qui signale l'événement : le CPU peut exécuter d'autres traitements, et n'est détourné vers la routine de service qu'au moment précis où l'événement survient, avant de reprendre le programme principal exactement où il avait été interrompu.