L'informatique personnelle a commencé dans les années 1970, l'Apple II était l'un des premiers produits grand public.
Steve Wozniak qui tient l'un des premiers ordinateurs personnels d'Apple.
1970 (Apple II) | 2023 | |
---|---|---|
CPU | 1 MHz | 3 GHz |
Coeurs | 1 | 16 |
RAM | 4 KB | 32 GB |
Stockage | 140 KB | 1 TB |
Architecture | 8 bits | 64 bits |
VRAM | 0 | 8 GB |
La loi de Moore est une observation empirique qui dit que le nombre de transistors dans un circuit intégré double tous les deux ans.
Loi de Wirth: Software is getting slower more rapidly than hardware becomes faster.
Loi de May: Software efficiency halves every 18 months, compensating Moore's law.
Les développeurs se sont peu à peu éloigné des aspects "bas niveau" de leur machine
La montée en puissance des ordinateurs n'a pas forcément eu que des effets positifs sur les logiciels. Les développeurs privilégient souvent la simplicité et la rapidité de développement à la performance.
Quelques constats fréquents:
Billet de blog complet (Nikita Tonsky, 2018)
Système Embarqué: Système informatique qui est intégré à un objet, un appareil ou un système plus complexe.
Un système embarqué vient en général avec des contraintes, de taille, de puissance, de consommation, de coût, de fiabilité...
On peut mentionner plusieurs raisons pour informaticien d'apprendre à faire de l'embarqué:
Nous allons partir à l'aventure dans les tréfonds des l'informatique, et nous allons apprendre à programmer des microcontrôleurs.
Ce cours développera vos compétences en:
Le cours sera essentiellement illustré autour de l'ATmega328P, un microcontrôleur 8 bits très répandu dans le monde de l'embarqué.
Nous utiliserons des cartes Arduino Uno rev3, mais nous n'utiliserons pas l'IDE Arduino, de manière à découvrir les aspects bas niveau de la programmation d'un microcontrôleur.
Nous vous invitons à tester Arduino en dehors de ce cours si vous en avez l'occasion!
Les circuits intégrés sont fabriqués à partir de silicium, un matériau très abondant dans la nature. Ils sont gravé sur des disques de silicium appelés wafers.
Ce processus optique se nomme la photolithographie.
Ces galettes sont ensuite découpées en puces qui sont ensuite encapsulées dans des boîtiers:
Avec un même wafer, le même circuit peut être vendu sous différentes formes (avec des boîtiers différents).
Le boîtier montré ci-dessus est "gros", ce qui peut être pratique pour le prototypage.
Ces composants sont alors soudés sur des cartes électroniques, que l'on appelle PCB (Printed Circuit Board):
Il existe plusieurs types de circuits intégrés:
Un microcontrôleur est composé de plusieurs types de mémoire:
ROM (Read Only Memory)
Stockage permanent (typiquement le programme),
Nécessite un effacement par bloc,
Limité en nombre d'écritures.ATmega328p: 32KB
RAM (Random Access Memory)
Mémoire volatile (perd son contenu à l'extinction),
Stockage temporaire (variables, pile, etc.),
Accès rapide,ATmega328p: 2KB
EEPROM (Electrically Erasable Programmable Read-Only Memory)
Stockage permanent (typiquement configuration, numéros de série, etc.),
Peut être effacée par octet,
Limité en nombre d'écritures.ATmega328p: 1KB
Il existe deux approches classiques pour l'architecture d'un microcontrôleur:
Von Neumann
Les données et le programme sont stockés dans la même mémoire.
Harvard
Les données et le programme sont stockés dans des mémoires séparées.Architecture de l'ATmega328p
Avant toute chose, il est nécessaire de disposer de la documentation technique du microcontrôleur, que l'on appelle datasheet:
Il s'agit de la documentation technique du microcontrôleur que nous allons utiliser.
Le programme que nous écrirons sera stocké dans la mémoire flash du microcontrôleur (ROM). Un programme destiné à être embarqué sur un microcontrôleur est appelé firmware. (Nous verrons plus tard comment programmer la mémoire flash).
À chaque couple d'horloge (ou cycle d'horloge), le microcontrôleur exécute une instruction décodée à partir de la mémoire flash.
L'Atemga328P est un microcontrôleur 8 bits, ce qui signifie qu'il peut traiter 8 bits de données à la fois.
Par exemple, une addition de deux nombres de 8 bits nécessite 1 cycle d'horloge.
Le microcontrôleur est architecturé autour d'un bus de données de 8 bits, qui permet de transférer des données entre les différents composants du microcontrôleur:
Datasheet de l'ATmega328P, Page 9
Datasheet de l'ATmega328P, Page 18
Les adresses mémoires inférieures à 0x0100
sont réservées aux registres du microcontrôleur. Ces
adresses se comportent comme de la mémoire, mais ont des fonctions spécifiques.
La RAM commence à l'adresse 0x0100
.
Afin d'écrire notre premier firmware, nous pouvons par exemple choisir de contrôler les broches du microcontrôleur.
Ces dernières sont regroupées par lot de 8 dans des ports (PORTB
, PORTC
, PORTD
).
La LED de la carte Arduino est par exemple connectée à la broche PB5
.
Les registres DDRx
permettent de configurer les broches d'un port en entrée ou en sortie, et
les registres PORTx
permettent de configurer les broches d'un port en niveau haut ou bas.
Datasheet de l'ATmega328P, Page 72
Dans la partie suivant, nous découvrirons comment écrire et charger un firmware sur le microcontrôleur à l'aide du langage C.