[AUDIO_VIDE] Bonjour. Lorsqu'on coupe le courant sur une enseigne ou un afficheur à LED, on souhaite retrouver nos animations ou nos textes, lorsqu'on va la rallumer. Après avoir rappelé le type de mémoire disponible sur les micro contrôleurs, nous parlerons plus en détail des EEPROM, des mémoires Flash et de leur programmation, ainsi que des mémoires externes que nous pouvons aussi utiliser. On sait qu'il existe principalement deux types de mémoire dans un microcontrôleur, la mémoire Flash, prévue habituellement pour les programmes, et la mémoire vive, pour les données. La mémoire Flash est permanente, le programme va rester, par contre la mémoire vive n'est pas permanente. Comment va-t-on pouvoir conserver des données, par exemple les textes qui défilent sur un afficheur à LED? Certains micro contrôleurs disposent d'une mémoire du type EEPROM. Je rappelle que cela signifie Electrically-Erasable, c'est-à-dire, effaçable électriquement, Programmable Read-Only Memory. Donc, une mémoire morte, mais qui est programmable et qu'on va pouvoir effacer électriquement. C'est le cas, par exemple, de l'ATmega328, bien connu pour être le micro contrôleur de l'Arduino. Il dispose, en plus de sa mémoire Flash et de sa mémoire RAM, de un kiloByte d'EEPROM. Cette mémoire n'est pas dans l'espace habituel des mémoires Flash ou de la mémoire vive. Elle est autonome. Un registre permet de donner les adresses, EEPROM Address Register. Un autre registre permet de préciser les données, EEPROM Data Register. À noter qu'on va toujours, écrire, une adresse. Par contre, les données vont pouvoir être lues ou être écrites. On aura également des circuits qui permettent de lancer les cycles d'écriture, ou de lecture. La programmation est particulièrement simple. Pour lire à une adresse donnée, on spécifie cette adresse dans le registre d'adresses, on active le fanion de lecture, et la valeur se trouve dans le registre de données. On peut préciser que la lecture est quasiment immédiate, il n'y a pas d'attente particulière. Par contre, pour l'écriture, c'est un petit peu plus compliqué. Tout d'abord, on va s'assurer, par la lecture d'un fanion, qu'une éventuelle écriture précédente, qui va durer un certain temps, est bien terminée. Donc, on attend la fin d'une éventuelle écriture précédente. Ensuite, on précise l'adresse dans le registre d'adresses, la valeur, cette fois donc on écrit cette valeur, dans le registre de données. Ici, on va lancer le cycle d'écriture par le fanion, Write Enable, ou, Program Enable ; et, si on se contente de cette instruction, aucune écriture ne va se produire. Il va falloir, auparavant, autoriser une écriture avec ce fanion, Master Write Enable. Son rôle, c'est d'éviter des écritures intempestives, des écritures erronées dans la mémoire ; il est nécessaire pour qu'une écriture soit validée, que l'écriture dans ce fanion se fasse, juste avant, quelques cycles d'horloge, l'écriture du fanion, Write Enable. Tous les micro contrôleurs n'ont pas de mémoire EEPROM. Mais il est généralement possible d'accéder à la mémoire Flash, dans un microcontrôleur, alors qu'elle est normalement réservée au programme. Il faut évidemment faire attention de ne pas détruire le programme à ce moment. C'est un peu plus difficile sur les micro contrôleurs dont l'architecture n'est pas du type Von Neumann. Je rappelle que dans les ordinateurs de type Von Neumann, un seul espace d'adressage est utilisé, à la fois pour les programmes et les données. C'est le cas du MSP430. Dans tous les cas, il faut noter que pour une mémoire Flash, l'effacement s'effectue par bloc. Il n'est pas question de pouvoir écrire à n'importe quel moment, n'importe quelle position, on peut écrire dans des positions qui n'ont pas encore précédemment été écrites. Puis il faudra effacer le bloc, si on souhaite changer une donnée. Voilà les instructions nécessaires sur un MSP430. On doit avoir un pointeur, par exemple à une donnée du type, entier huit bits. On va affecter ce pointeur à une adresse particulière qu'on a choisie, qui correspond donc à une adresse en mémoire Flash, et finalement, on peut lire la donnée, en la prenant à partir du pointeur. Pour l'écriture, ce sera le mécanisme inverse. Le pointeur sera la zone de destination de la valeur, mais auparavant, il faudra mettre à zéro un bit de blocage qui, de nouveau, évite des écritures intempestives ; et on va le rétablir, pour revenir en mode sécurisé, après une écriture. Mais je rappelle que, si l'on écrit une deuxième fois sur cette même position, la valeur écrite sera fausse. On aura écrit seulement les zéros, on ne peut pas remettre à un les bits. Il est donc nécessaire, dans beaucoup de cas, d'effacer tout un bloc et on le fera avec ces instructions. On va dire qu'on souhaite passer en mode effacement, on va supprimer le bit de blocage, on va écrire n'importe quelle valeur dans la zone mémoire, et ça va avoir pour conséquence de lancer un cycle d'effacement du bloc, et finalement, on remet les fanions dans leur état protégé. On a l'habitude de pouvoir écrire et lire, par exemple dans une RAM, autant de fois qu'on veut. Par contre, toutes les mémoires non volatiles ont des nombres de cycles limités, et il faut vraiment garder cet aspect à l'esprit. Typiquement, on a 10 000 cycles possibles pour une Flash, et je dirai qu'a priori, ce nombre semble extrêmement grand. Il faudra beaucoup de temps pour par exemple, écrire 10 000 fois un programme dans un microcontrôleur. Seulement 100 000 pour une EEPROM, et là, ce nombre me semble plutôt petit. En effet, si toutes les secondes, on met une nouvelle valeur dans l'EEPROM, eh bien on risque après un jour d'avoir déjà atteint cette fameuse limite. Bien entendu, il est possible d'ajouter des mémoires non volatiles, externes, à un montage à micro contrôleur. Par exemple, dans un afficheur, on souhaitera mettre des textes relativement importants. Les mémoires du micro contrôleur seront peut-être trop petites, et on va alors utiliser des circuits externes. On peut utiliser des RAM secourues. Ce n'est pas très fréquent, mais il en existe qui sont associées à des horloges temps réel, donc si on en a à disposition, pourquoi ne pas les utiliser. On utilisera beaucoup plus souvent des EEPROM série, elles se présentent sous forme de petits boîtiers, généralement à huit pattes, soit du, Alu line huit, soit des boîtiers SMD. Elles dialoguent avec le microcontrôleur, en série, généralement en, I carré C, ou en SPI. Par exemple, ici, cette mémoire M95256, a une capacité de 256, mais attention, il s'agit de kilobits. On sait que 256 kilobits, c'est égal à 32 kiloByte. Ici, on reconnaît les signaux MOSI, MISO, c'est-à-dire les données transmises dans un sens ou dans l'autre, et l'horloge, on est donc bien en présence du standard SPI. Et il suffit donc de quatre lignes pour connecter cette mémoire à un micro contrôleur. Les trois lignes, plus la sélection. Lorsqu'on souhaite disposer de quantités de mémoire plus importantes, la solution des cartes SD semble la plus appropriée, en particulier les cartes microSD, qui sont particulièrement petites et pratiques à utiliser. Le nombre de broches est relativement limité. C'est assez facile de connecter une carte SD à un micro contrôleur. Par contre, la programmation peut être relativement complexe, en particulier, on doit être capable de gérer les données par bloc, selon des protocoles d'écrit pour les cartes SD, qui sont relativement compliqués. Par ailleurs, on va souhaiter utiliser un système de fichiers, de telle manière que la mémoire puisse être, par exemple, chargée, depuis un ordinateur, puis utilisée par exemple, par un afficheur. Les systèmes de fichiers les plus standards, les plus utilisés, c'est par exemple FAT32. Programmer tout ça n'est pas très difficile, mais ça prend un petit peu du temps, ce sera plus pratique d'utiliser des libraires qui sont disponibles. À titre d'exemple, la librairie, qui s'appelle PetitFat, fournit un certain nombre de procédures qui permettent de monter un volume, donc une mémoire, qui permettent d'ouvrir un fichier, de lire et d'écrire dans ce fichier et également de se déplacer dans ce fichier, pour la lecture ou l'écriture. Il est également possible de gérer des directoires, des dossiers, opendir, pour l'ouvrir et lecture du contenu d'un dossier. Nos avons donc vu les types de mémoire disponibles dans les micro contrôleurs, nous avons regardé comment fonctionnent, comment on utilise les EEPROM, les Flash et quelles sont leurs limites de cycles d'écriture. Nous avons aussi signalé que nous pouvions utiliser des mémoires externes, en particulier des cartes SD, très utiles dans les afficheurs à LED.