AVR – Chapitre 5 – Lire et écrire les mémoires

Un microcontrôleur AVR contient trois mémoires :

  • la mémoire vive statique, aussi appelée SRAM, est un espace occupé par les programmes en cours d’exécution. Elle est généralement petite (512 octets pour l’ATtiny85), et volatile ; la mise hors-tension du microcontrôleur vide son contenu.
  • la mémoire programmable EEPROM, parfois appelée « mémoire morte » car son contenu survit à l’exécution du programme. Elle est utilisée pour stocker des données, même après une mise hors-tension du microcontrôleur. Sa taille est de 512 octets pour l’ATtiny85.
  • la mémoire programmable Flash, qui contient le code compilé directement en instructions AVR. Il peut contenir jusqu’à 8192 octets.

La mémoire vive

Il n’y a rien de plus simple pour écrire et lire la mémoire vive, puisque c’est exactement ici que ce déroule l’exécution du programme. Déclarer une variable et y accéder suffisent à réaliser cette opération.

Cependant, sa taille étant réduite, nous allons voir comment palier ce défaut en utilisant la mémoire morte.

La mémoire programmable EEPROM

Cette mémoire est intéressante pour sa persistance lorsque le microcontrôleur est mis hors tension. Elle peut supporter 100 000 cycles d’écriture, soit une durée de vie minimum d’un an si on y écrit toutes les cinq minutes. Bien entendu ceci est un minimum théorique et il est fort possible que le microcontrôleur résiste bien plus longtemps.

Comment y écrire ?

Afin d’utiliser la mémoire EEPROM, il faut inclure la bibliothèque correspondante :

Nous pouvons maintenant déclarer une variable directement dans l’EEPROM :

Et il est possible d’écrire en brut dans la mémoire morte :

 

Et comment lire mes variables ?

L’accès à cette variable se fait de manière naturelle :

Il est également possible de lire directement le secteur qui nous intéresse de cette façon :

Pour un exemple pratique, je vous invite à lire cet article, sur la création d’un lecteur de musique minimaliste.

La mémoire programmable Flash

Celle-ci est beaucoup plus large que la mémoire vive, et son but est de contenir le programme à exécuter.

Cette mémoire a cependant un cycle de vie limité (environ 10 000 écritures) et il est déconseillé de l’utiliser sauf dans des cas extrêmes, comme le stockage de larges variables (chaine de caractères, tableau lourd, …).

Cet article (dans la documentation des bibliothèques AVR pour GCC) décrit en détail comment et pourquoi utiliser la mémoire Flash. Je ne rentrerai pas dans les détails ici, je vais simplement vous montrer comment écrire de lourdes variables dans la mémoire Flash :

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*