Augmenter le stockage de votre Arduino avec l’eeprom 24LC512

arduino nano eeprom

Dans la famille Arduino, il existe un certain nombre de cartes électroniques aux caractéristiques différentes: puissance processeur, taille de la mémoire, nombre de pins et de GPIO, espace de stockage disponible, format du pcb, …

On choisit donc sa carte Arduino en fonction de ses besoins, mais même comme cela, on peut être confronté à un problème: l’espace de stockage disponible, l’eeprom, est trop limité (généralement 512 bytes à 1024 bytes).

Heureusement pour nous, il existe des composants appelés EEPROM qui permettent d’étendre cet espace de stockage.

L’eeprom vous permet de stocker des données de manière permanente et fonctionne comme un mini disque dur.

Les composants Eeprom 24LC256 et Eeprom 24LC512 nous permettent d’étendre considérablement l’espace de stockage de notre Arduino.

EEPROM I2C 24LC256 ET 24LC512

Les composants 24LC256 et 24LC512 sont des composants électronique de type Eeprom I2C qui permettent d’ajouter un espace de stockage dans un projet électronique.

24lc512

24lc512

Les eeproms I2C 24LC256 et 24LC512 fonctionnent exactement de la même manière, leur seule différence est l’espace dont ils disposent:

  • le composant 24LC256 dispose de 256 kilobits d’espaces de stockage soit 32 KBytes (32 fois le stockage disponible d’un Arduino Mega).
  • le composant 24LC512 dispose de 512 kilobits d’espaces de stockage soit 64 KBytes (64 fois le stockage disponible d’un Arduino Mega).

Ces composants sont très bon marchés et coûtent à peine quelques euros, il serait donc dommage de s’en priver pour augmenter l’espace de stockage d’un Arduino.

Le datasheet de la mémoire 24LC512 est disponible ici.

Pour ceux qui auraient la flemme de le lire, voici les caractéristiques de la 24LC512:

  • 512 Kbit
  • Buffer de 128 Bytes
  • Temps d’accès en écriture: 5ms max.
  • Peu consommateur: 400 uA max
  • Fonctionnement entre 1.7V et 5.5V
  • Interface I2C (seulement 2 connecteurs nécessaire)
  • Possibilité de cascader jusqu’à 8 24LC512
  • Fréquence d’horloge max: 400 kHz
  • Protection à l’écriture via un pin
  • Jusqu’à 1000000 de cycles

L’eeprom 24LC512 en détail

La différence de tarif entre l’eeprom 24LC256 et la 24LC512 est tellement minime que j’utilise presque tout le temps la 24LC512. C’est pourquoi l’ensemble de l’article portera sur l’eeprom 24LC512 et est valable pour la 24LC256.

L’eeprom 24LC512 est un composant électronique DIP à 8 pins. Il est relativement solide et chauffe peu, même lorsqu’il est fréquemment sollicité.

i2c 24lc512

i2c 24lc512

Voici le détail des 8 pins du 24LC512:

  • Power (pin 8)
  • Ground (pin 4)
  • Write Protection (pin 7)
  • SCL/SDA (pin 5 et 6)
  • 3 pins d’adressage (pins 1, 2 et 3)

Arduino et Eeprom 24LC512

Voici le schéma de connexion générique, valable pour la majorité des EEPROM (24LCxx, AT24Cxx, …) sur un Arduino:

 

arduino-eeprom

arduino-eeprom

Voici un exemple de code permettant d’écrire dans l’EEPROM puis de lire ce qu’on vient d’y écrire. Vous noterez l’utilisation de la librairie “Wire” qui permet d’utiliser facilement les fonctions de lecture et d’écriture dans l’EEPROM grâce à la connection I2C.

#include <Wire.h>    
 
#define disk1 0x50    //Address of 24LC512 eeprom chip
 
void setup(void)
{
  Serial.begin(9600);
  Wire.begin();  
 
  unsigned int address = 0;
 
  writeEEPROM(disk1, address, 123);
  Serial.print(readEEPROM(disk1, address), DEC);
}
 
void loop(){}
 
void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) 
{
  Wire.beginTransmission(deviceaddress);
  Wire.send((int)(eeaddress >> 8));   // MSB
  Wire.send((int)(eeaddress & 0xFF)); // LSB
  Wire.send(data);
  Wire.endTransmission();
 
  delay(5);
}
 
byte readEEPROM(int deviceaddress, unsigned int eeaddress ) 
{
  byte rdata = 0xFF;
 
  Wire.beginTransmission(deviceaddress);
  Wire.send((int)(eeaddress >> 8));   // MSB
  Wire.send((int)(eeaddress & 0xFF)); // LSB
  Wire.endTransmission();
 
  Wire.requestFrom(deviceaddress,1);
 
  if (Wire.available()) rdata = Wire.receive();
 
  return rdata;
}

Voilà pour cet article traitant de l’extension de l’espace de stockage sur un Arduino en utilisant des eeproms 24LC256 et 24LC512. J’espère qu’il vous sera utile 🙂

8 Responses to Augmenter le stockage de votre Arduino avec l’eeprom 24LC512

  1. Alexandre says:

    Bonjour, Pourrais tu montrer comment adapter ce petit programme (qui marche du toner etqui est puissant par sa facilité) pour qu’il puisse lire/écrire des valeurs float. J’ai essayé plusieurs fois mais sans succés.

    • jhd says:

      Salut,je suis en congé du coup je ne peux pas essayer mais tu peux essayer avec cette lib, il y a surement des mods qui permettent l’ecriture de floats: http://playground.arduino.cc/Code/I2CEEPROM24LC512

      • Alexandre says:

        Je suis sur ce tuto depuis plus d’un mois ( j’ai jamais réussi à le faire tourner) enfin maintenant j’ai réussi à faire tourner le tiens alors je vais un peu voir pour comparer les 2 et essayer d’adapter. Si tu sais regarder à ton retour de congé ça m’arrangerais… ( je veux avoir ce projet hors des pattes!!!!) Un grand merci quand même pour ta réponse et bon congé ( profite le plus possible!!!! )

        • Alexandre says:

          Bonjour,
          est ce que tu pourrais voir s’il est possible d’adapter ce programme pour lire/écrire des valeurs float ( je suis toujourscoincé sur ce probléme :/)

          Un grand merci

  2. […] 1/ Optimisez la taille de vos variables et libérer l’espace mémoires lorsqu’elles ne servent plus (malloc / free) 2 / Utilisez une partie de la mémoire Flash pour stocker vos données statiques, lors de la déclaration de votre tableau préciser son stockage en flash grâce à l’instruction PROGMEM (librairie <avr/pgmspace.h> ) Plus d’info : http://arduino.cc/en/Reference/PROGMEM 3 / Ajouter de la mémoire de stockage via un lecteur de carte SD, il existe 2 types de formatage compatible ou non avec un PC. 4 / Ajouter une eeprom pouvant être adressé en spi (le plus rapide) ou i2c : ces mémoires sont très bon marché, vous trouverez un bon exemple de mise en oeuvre à cette adresse : zem.fr […]

  3. FLEURY says:

    Bonjour,
    je viens d’acquèrir une mémoire 24LC256 pour accroître la mémoire de ma carte Arduino uno.
    Lorsque je charge et que je compile votre programme de lecture écriture j’obtiens après compilation le message suivant:
    “Le croquis utilise 4094 octets (12%) de l’espace de stockage de programmes, le maximum est de 32 256 octets. Les variables globales utilisent 390 octets (19%) de mémoire dynamique, ce qui laisse 1658 octets pour les variables locales. le maximum est 2048 octets”
    Je suis étonné de ce résultat car ne devrais je pas avoir 256 000 octets pour l’espace de stockage de programmes ?
    Tout se passe comme si la mémoire 24LC256 n’était pas reconnue.
    Je précise que je suis absolument sur de mon cablage.
    Avez vous une idée qui pourrait m’éclairer ?
    Je vous remercie de votre réponse
    Bien cordialement
    françois fleury

    • Bonjour Fleury,

      Je laisse la réponse ici, même si la question date, ça peut en aider d’autres.

      L’extension de mémoire à proprement parler n’est pas disponible sur la arduino UNO / 2009. Il faut une arduino mega, et lui ajouter un module de RAM en DMA (direct memory access : accès en mémoire direct).
      Et même bien configurée, ton compilateur ne te dira pas que de la mémoire supplémentaire est disponible.
      Il faudra y aller ‘à la main’ en respectant sa taille.

      Ce tutoriel à pour but d’adjoindre une mémoire “Morte” au micro contrôleur. Il faut vraiment le voir comme un stockage de données et pas de programme. (c’est possible, mais ça demande des manips complexes consistant à réécrire à la volée la mémoire programme du micro contrôleur. Complexe et pointilleux).

      Pour simplifier, on ne pourra stocker dans cette mémoire de 512k que des données que l’on souhaite conserver une fois la manip hors tension. Ou si l’on à besoin d’une mémoire ‘lente’ de grosse capacité pour la traiter ensuite quand on aura le temps.
      une carte SD remplirait la même fonction, outre le fait qu’elle peut être plus rapide (car en bus SPI et non I²C) et aura une capacité plus importante (100aines de Mio au bas mot).
      Mais l’EEPROM de 512k à l’avantage de pouvoir écrire un octet au hasard, alors que la carte SD sera condamnée à réécrire sa page mémoire entière.

      Mais je digresse…
      Tl;Dr:
      Ça marche pas comme ça, tu peut pas facilement mettre de code dans l’EEPROM.

Leave a Reply

Your email address will not be published. Required fields are marked *