L’EEPROM est une mémoire interne du microcontrôleur qui permet de garder en mémoire des données après redémarrage de la carte. Lorsqu’on travaille avec des microcontrôleurs, il est intéressant de conserver en mémoire des données notamment lorsque la carte s’éteint que ce soit voulue ou non, comme dans le cas d’une perte de puissance électrique.

Matériel

  • Ordinateur
  • Arduino UNO
  • Câble USB A Mâle/B Mâle

Principe de fonctionnement

L’EEPROM est un emplacement mémoire particulier du microcontrôleur. C’est un ensemble de registres dans lesquels on stock des données qui restent en mémoire même après que la carte soit éteinte. C’est une mémoire ‘morte’ en comparaison à la mémoire ‘vive’ (comme la RAM) qui est effacée à chaque cycle d’allumage. La taille de la mémoire varie en fonction du microprocesseur de la carte.

Limitation de l’EEPROM

Une chose importante à noter est que l’EEPROM a une taille et une durée de vie limitée. Les cellules mémoires peuvent être lues autant de fois que nécessaire mais le nombre de cycle d’écriture est limité à 100000. Il est conseillé de bien faire attention à la taille des données enregistrées et à la fréquence à laquelle vous souhaitez les mettre à jour.
Si vous souhaitez enregistrer en temps réel les données d’une flotte de capteurs pour tracer des courbes, il vaut mieux s’orienter vers un module de carte SD pour stocker les données.

Code

Pour s’interfacer avec l’EEPROM, nous utilisons la librairie EEPROM.h qui permet d’écrire et de lire des données sur la mémoire. Pour cela nous allons utiliser deux fonctions:

  • put() pour écrire
  • get() pour lire
  • Nous ne l’utiliserons pas ici, mais, EEPROM.update() permet d’écrire une valeur seulement si elle est différente afin d’économiser la durée de vie.
    D’autres fonctions de la librairie peuvent être employées selon l’utilisation que vous avez de l’EEPROM.
//Libraries
#include <EEPROM.h>//https://www.arduino.cc/en/Reference/EEPROM

void setup(){
//Init Serial USB
Serial.begin(9600);
Serial.println(F("Initialize System"));
//Write data into eeprom
  int address = 0;
  int boardId = 18; 
  EEPROM.put(address, boardId);
  address += sizeof(boardId); //update address value

  float param = 26.5;
  EEPROM.put(address, param); 
  
  //Read data from eeprom
  address = 0;
  int readId;
  EEPROM.get(address, readId);
  Serial.print("Read Id = ");
  Serial.println(readId);
  address += sizeof(readId); //update address value
  
  float readParam;
  EEPROM.get(address, readParam);
  Serial.print("Read param = ");
  Serial.println(readParam);
  

 }

void loop(){}


Résultat

Les valeurs lues correspondent bien aux valeurs enregistrées. Vous pouvez retirer la partie écriture et relancer le code pour vérifier que les valeurs sont bien gardées en mémoire.

Applications

  • Garder en mémoire l’adresse IP ou I2C d’une carte Arduino

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie