Mémoire centrale
Sur les systèmes informatiques, il existe un très grand nombre de moyens pour stocker l’information et les programmes permettant de les traiter. Ces moyens dépendent fortement du type d’information à stocker et de leur volume.
Dans le cadre des systèmes embarqués et des objets de l’Internet basés sur des systèmes sur puce (SoC - Systems on Chip), on distingue généralement deux grands types de mémoires:
- Mémoire volatile
- Mémoire non volatile
La mémoire volatile sert à stocker temporairement les données utilisées que pour le traitement de l’information et qui nécessitent d’être conservées que si le système est sous tension et fonctionnel. La mémoire non volatile sert, comme son nom l’indique, à stocker de façon persistante des données, telles que les programmes ou des données de configuration, afin que l’on puisse les récupérer si le système est mis hors tension un certain temps.
Mémoire volatile
Les systèmes embarqués et SoC utilisent de la mémoire vive (RAM - Random Access Memory) comme mémoire volatile. Cette mémoire vive offre au µP un accès direct à l’information (également appelé accès aléatoire). Le µP peut lire ou écrire n’importe quelle donnée en se rendant directement à l’adresse (emplacement dans la mémoire) où cette donnée est stockée. La deuxième caractéristique principale de cette mémoire est sa rapidité d’accès. En effet, le temps d’accès aux données stockés dans la mémoire a un impact considérable sur les performances des µP.
Il existe deux types principaux de mémoires vives:
- les mémoires vives statiques (SRAM - Static RAM)
- les mémoires vives dynamiques (DRAM - Dynamic RAM)
Static RAM (SRAM)
La figure SRAM - cellule de 1 bit à 6 transistors représente une cellule d’un bit de mémoire vive SRAM. Cette cellule utilise 6 transistors pour stocker un bit.
Le fonctionnement de cellule mémoire d’un bit se base sur le fonctionnement d’une bascule de type RS (Reset/Set). La figure Bascule RS et sa table de vérité représente une telle bascule construite avec des portes NOR.
Vu le nombre de transistors nécessaires à la construction d’un bit mémoire, les SRAM ont une densité relativement faible. Cette faible densité fait que l’on ne trouve que des SRAM de taille relativement petite, de quelques kilo-bits à quelques mega-bits. Par contre elles offrent un accès excessivement rapide à l’information, 1 à 2 ns pour les SRAM on-chip et 5 à 10 ns pour des SRAM off-chip. Les SRAM ne nécessitent aucune logique de rafraîchissement, il suffit de les alimenter afin qu’elles conservent leurs contenus. Ces mémoires sont actuellement utilisées comme mémoire interne des µP (System on Chip) ou comme mémoire cache des processeurs d’applications.
Dynamic RAM (DRAM)
Avec une structure très simple pour enregistrer d’un bit d’information, une pico-capacité et un transistor (figure DRAM - cellule de 1 bit (1 capacité et 1 transistor), les DRAM permettent d’obtenir une grande densité de stockage.
Cette simplicité souffre d’un inconvénient résidant dans la perte de charge due à des courants de fuite de la pico-capacité. Ces courants de fuite font disparaître l’information. Pour pallier à ce phénomène, il est nécessaire de rafraîchir régulièrement (période de quelques millisecondes) la charge des pico-condensateurs (figure DRAM - Refresh).
Les mémoires vives dynamiques ont énormément évolué depuis les années 1990. Les DDR4 SDRAM (Double Data Rate 4th generation Synchronous DRAM) équipent la plupart des systèmes embarqués de dernière génération comme mémoire centrale externe au µP. Leurs tailles varient entre quelques centaines de MiB à quelques GiB avec un débit de transfert de quelques giga bits par seconde.
Mémoire non volatile
Dans le langage courant, on parle également de mémoire morte désignant une mémoire non volatile dont le contenu ne s’efface pas même si le système est mis hors tension, a contrario de la mémoire vive. Les systèmes embarqués et SoC utilisent des mémoires non volatiles à base de semi-conducteurs. Selon les caractéristiques de l’information à stocker (microcode/microprogramme, programmes ou données de configuration) ainsi que des besoins d’accès à cette information, on utilise différents types de mémoires:
- des mémoires ROM (Read Only Memory)
- des mémoires EEPROM (Electrically Erasable Programmable ROM)
- des mémoires NVRAM (Non Volatile RAM)
- des mémoires Flash
Mémoires ROM
Les mémoires ROM ne sont qu’accessibles en lecture. C’est durant le processus de production que leurs fabricants programment leur contenu. Longtemps utilisées pour stocker les fonctions du BIOS (BIOS - Basic Input Output System) des ordinateurs, remplacées à l’heure actuelle par des mémoires Flash, elles sont toujours d’actualité pour les codes d’amorçage (BROM - Boot ROM) des µP de dernière génération.
Mémoires EEPROM
Les mémoires EEPROM, appelées également E2PROM, sont des mémoires non volatiles effaçables et programmables électriquement. Ce type de mémoire, d’une taille de quelques centaines de bytes à quelques KiB, sert généralement à stocker des données de configuration ou d’identification (numéro de série, type de système, etc.). Bien qu’il soit possible d’accéder des EEPROM avec une interface parallèle, c’est plus souvent un bus série qui sert d’interface. Hormis les bus SPI (Serial Peripheral Interface) et 1-Wire, le bus I2C (Inter-Integrated Circuit) est l’un des plus courants.
En lecture, le µP spécifie l’adresse du premier octet de données stocké dans l’EEPROM et cette dernière lui retourne un nombre d’octets correspondant au nombre de cycles de lecture que le µP effectue. En écriture, les EEPROM offrent souvent deux modes d’opération, “byte write” et “page write”. En mode “byte write”, le µP transfère sur le bus l’adresse et l’octet de données à stocker. En mode “page write”, le µP place sur le bus l’adresse de départ des données ainsi que le nombre de données correspondant à la taille de la page (par exemple 64 octets). Une fois le transfert de données effectué (byte ou page write), l’EEPROM procède à l’écriture des données. Cette opération dure généralement entre 5 et 10 ms. Les EEPROM proposent généralement un protocole d’acquittement afin de permettre au µP de déterminer la fin du cycle d’écriture et d’en optimiser ainsi l’accès.
Mémoires NVRAM
Les mémoires NVRAM sont des mémoires RAM qui retiennent leur contenu même si elles ne sont plus alimentées. Ce type de mémoires est généralement utilisé pour stocker des données processus, par exemple des valeurs de calibration ou des données d’échantillonnage, que l’on souhaite ne pas perdre si le système est mis hors tension un certain temps dû par exemple à une coupure d’alimentation inopinée.
Il existe différentes technologies pour réaliser des mémoires RAM non volatile, mais la technique la plus courante consiste à utiliser une mémoire vive statique (SRAM) avec une capacité. On parle dans ce cas de pseudo-NVRAM.
Selon l’application et le temps de stockage, cette capacité peut être une pile, une batterie ou un condensateur. Sur les µP utilisés dans les objets de l’Internet ou les systèmes embarqués, il est usuel de trouver de telles réalisations. Une de celles-ci est l’horloge temps réel (RTC - Real Time Clock).
Mémoires Flash
Les mémoires non volatiles de type Flash apparaissent vers la fin des années 1980. Cette nouvelle technologie révolutionne la micro-informatique. Il devient enfin possible de réaliser des mises à jour logicielles sans devoir envoyer sur site des équipes de maintenance. Les corrections de logiciels ainsi que les nouvelles versions des applications peuvent être téléchargées à distance.
Selon le type de porte logique utilisée comme cellules de stockage des bits d’information, les mémoires Flash se déclinent en deux types:
- les Flash NOR
- les Flash NAND
Ces cellules servant au stockage des bits d’information sont construites avec des transistors MOS (Metal Oxide Semiconductor) à grille flottante (figure Transistor MOS à grille flottante).
La grille flottante piège les charges électriques et permet ainsi de stocker l’information. Afin de pouvoir écrire des données dans une mémoire Flash, il est nécessaire d’effacer préalablement la cellule. Cette opération consiste à charger la grille flottante, c’est-à-dire à injecter des électrons dans la grille. Pour cela il faut appliquer une tension de 12V sur la grille de contrôle. Une fois chargée, il est possible de procéder à l’écriture des données. Ces opérations d’effacements et d’écritures sont excessivement agressives pour la grille flottante et affectent la durée de vie du transistor. La rétention de l’information n’est pas illimitée. Elle varie également avec la température d’opération de la mémoire ainsi que du type de portes logiques utilisé.
Flash NOR
Les Flash NOR garantissent un stockage de l’information à 100% sur une période supérieure à 20 ans avec plus 100‘000 cycles “effacement/écriture”. Leur densité relativement faible limite leur taille de quelques KiB à quelques MiB. Elles offrent un accès direct et aléatoire à chacune des positions mémoire contenant les données organisées généralement en mots de 8 ou 16 bits. Avec cette interface, le µP peut exécuter le code de programmes informatiques directement depuis la mémoire Flash sans devoir le copier préalablement dans la RAM. Cette caractéristique se nomme XIP (eXecute In Place). Les Flash NOR sont spécialement bien adaptées aux systèmes sur puce (SoC) à faible consommation et avec des capacités mémoire restreintes et intégrées directement à l’intérieur du µP.
Les Flash NOR ont une organisation par bloc de quelques KiB, lesquels peuvent être effacés et programmés indépendamment les uns des autres. Selon le type d’applications, ces blocs peuvent avoir la même taille ou des tailles différentes. Des tailles de bloc différentes, comme pour la Flash NOR M29FxxxFT/B de Micron (figure ci-dessous) permet de stocker des types de données différentes, par exemple un code d’amorçage (bootcode) sur les blocs de 16KiB et et 32KiB, des données de configuration sur les blocs de 8KiB et les applications et systèmes de fichiers sur les blocs de 64KiB.
Grâce à un accès direct aux cellules mémoire de la Flash NOR, aucun protocole de lecture n’est nécessaire. Par contre, l’enregistrement de données nécessite un protocole, lequel consiste à écrire des commandes à des adresses spécifiques dans la Flash NOR. Ce protocole est standardisé et connu sous le nom de CFI (Common Flash Interface). Ce standard sert d’interface pour la réalisation de systèmes de fichiers, tels que FAT (File Allocation Table) ou JFFS2 (Journalling Flash File System 2).
Les Flash NOR ont de bons temps d’accès en mode lecture (quelques dizaines de ns), par contre les temps d’effacement (entre 0.5s et 5s) et d’écriture (entre 11µs et 200µs) sont relativement longs.
NAND-Flash
Par leur structure interne, les Flash NAND offrent une plus grande densité, de quelques 100MiB à quelques GiB, à un coût par bit plus bas que les Flash NOR. Les Flash NAND ont une organisation par blocs et pages (figure Organisation des Flash NAND). Le bloc est la plus petite unité effaçable, tandis que la page est la plus petite unité lisible et programmable.
Le nombre de pages par bloc ainsi que la taille d’une page peut varier selon les fabricants et les types de Flash. Cependant deux organisations sont courantes, les Flash à petits blocs (32 pages à 512 octets de données) et les Flash à larges blocs (64 pages à 2048 octets de données.)
Contrairement aux Flash NOR, les Flash NAND ne garantissent pas un stockage à 100% de l’information. Pour détecter ces erreurs et dans la mesure du possible les corriger, chaque page d’un bloc dispose, en plus des bits de données, de bits en réserve pour stocker un code de correction d’erreurs (ECC - Error Correction Code). Sur la durée de vie des Flash NAND, il arrive que certains blocs se dégradent de telle sorte qu’il ne soit plus possible de corriger ces erreurs (quelques pour cent). Dans ce cas, les blocs concernés sont marqués comme défectueux (bad blocks) et remplacés par des blocs de réserve. Les processus de fabrication produisent également un certain nombre de blocs défectueux.
La rétention des données est également plus courte que celle des Flash NOR, environ 10 ans. Par contre, elles permettent plus de cycles “effacement/écriture”, environ 1‘000‘000. Le bloc est la plus petite unité effaçable. L’effacement d’un bloc ne prend que quelque 500µs.
Par leur architecture, les Flash NAND ne disposent que d’une interface série pour accéder à leur contenu. Cette interface nécessite la mise en place d’un contrôleur. Hormis le transfert des pages de données avec la mémoire Flash (écriture, lecture, effacement), ce contrôleur est en charge de gérer:
- les codes de correction d’erreurs
- les blocs défectueux
- l’usure uniforme des blocs (wear leveling)
Les Flash NAND sont disponibles sous différents types de boîtier. Dans le domaine des systèmes embarqués, la technologie eMMC (embedded MMC - embedded Multi Media Card) est très courante, car elle permet de souder le chip directement sur la carte électronique. Les cartes mémoire SD, ou micro SD, servent souvent de support si le système ou l’application nécessite une carte amovible.