compteur internet compteur de site  
La MÉMOIRE 24LC512








PRÉAMBULE
Il peut être intéressant ou nécessaire dans un montage, d'étendre la mémoire du microcontrôleur ou de substituer l'utilisation de la mémoire du microcontrôleur vers une autre mémoire pour le préserver.

La mémoire 24LC512 est une EEPROM permettant de stocker de façon permanente des données mais avec la possibilité de les modifier simplement.
Cette mémoire peut être remplacée par une 24LC256 si le montage ne nécessite par la capacité de la 24LC512.

Ces composants fonctionnent selon la norme I2C permettant de les interfacer avec seulement 2 fils.

CARACTÉRISTIQUES des 24LC512
La mémoire 24LC512 dispose comme son nom l'indique, de 512 kilobits d’espace de stockage.
1 octet représentant 8 bits, cette capacité de stockage représente :
• 512 / 8 = 64 Koctets de mémoire.

Pour fixer les idées cela représente par rapport aux microcontrôleurs utilisés sur les platines Arduino :
• Pour un Atméga 328 (Arduino UNO) la mémoire est de 1 Koctets soit : 64 fois plus,
• Pour un Atméga 2560 (Arduino MEGA) la mémoire est de 4 Koctets soit : 16 fois plus.

De plus le nombre de cycle d'effacement et d'écriture est limité dans la mémoire :
• Pour un microcontrôleur Atméga elle est de 100000 cycles (cent mille),
• Pour une 24LC512 elle est de 1000000 (1 million).

Autres caractéristiques
• Consommation :
    • 400 µA en fonctionnement,
    • 100 nA en standby,
• Temps d’accès en écriture : 5ms max,
• Fonctionnement entre 2,5V et 5,5V,
• Protection contre l’écriture via la mise à l'état haut d'une broche du circuit (La lecture reste possible),
• 8 mémoires de types 24LC512 peuvent être installées sur un même montage.

Le BUS I2C
La mémoire 24LC512 fonctionnant avec une interface I2C permet de commander le composant avec simplement deux fils :
SCL : représente le signal d'horloge,
SDA : représente le signal des données.

L'utilisation du bus I2C permet d'avoir un composant de seulement 8 broches ce qui facilite son intégration dans un montage.
Sur un bus I2C on peut brancher 127 composants. Comme ces composants sont tous branchés sur le même fil de données, ils recoivent tous les informations qui circulent sur ce fil.

Pour pouvoir commander un composant et un seul, chaque composant est doté d'une adresse unique sur le fil de données.
Ainsi lorsque l'on souhaite accéder à un composant, en lecture ou en écriture, il faut impérativement faire précéder cette demande de l'adresse du composant qui est sollicité.

Pour ce faire chaque composant à la norme I2C est muni de broches permettant de fixer une adresse unique.
Cette adresse est codée sur 7 bits (127 possibilités).

Pour une mémoire 24LC512, une partie de la mémoire est fixée par le constructeur par câblage interne au composant, elle a pour valeur : 1010.
La position des 3 autres bits (A0, A1, A2) sont à la disposition de l'utilisateur, qui peut ainsi choisir une adresse parmi 8, pour permettre de ne choisir qu'une seule adresse unique sur le bus I2C.
Comme seulement 3 bits sont accessible par l'utilisateur, cela explique pourquoi on ne peut brancher sur un même bus I2C que 8 mémoires 24LC512.

BROCHES de la 24LC512
La mémoire 24LC512 est contenu dans un boitier 8 broches rendu possible grâce à l'interface I2C.
• A0 permet de fixer l'adresse du composant sur le bus I2C,
• A1 permet de fixer l'adresse du composant sur le bus I2C,
• A2 permet de fixer l'adresse du composant sur le bus I2C,

• VSS : Masse,
• VCC : Alimentation,
• WP : Broche de protection à l'écriture,
• SCL : Signal d'horloge du bus I2C,
• SDA : Signal de données du bus I2C.

branchement 24lc512
Distribution des broches sur une 24LC512
MISE en OEUVRE MATÉRIELLE de la 24LC512
Réglage de l'adresse de la mémoire
La mémoire utilisant le bus I2C il faut commencer par lui attribuer une adresse pour pouvoir accéder à cette seule mémoire.

Le nombre de circuits que l'on peut brancher sur un bus I2C est de 127. Il faut donc leur attribuer une adresse sur 7 bits.
 
Sur une 24LC512, une partie de l'adresse est fixée par le constructeur.
• Les 4 premiers bits représentent : Le code de contrôle : 1010.

• 
Les 3 suivants choisis par l'utilisateur représentent  : Les bits de sélection du composant : A2, A1, A0 représentant les bits les plus significatifs de l'adresse.
   • On peut par cette méthode brancher 8 mémoires 24LC512 sur le même bus I2C et porter la capacité mémoire à (512Kb * 8) = 4096 Kb ou 512 Koctets.

adresse esclave 24lc512
Adresse esclave 24LC512

Les bits de sélection du composant sont réglables par l'utilisateur par l'intermédiaire des broches :
• A2 branché au VCC (+) cela fixe un 1, branché au VSS(-) cela fixe un 0,
• A1 branché au VCC (+) cela fixe un 1, branché au VSS(-) cela fixe un 0,
• A0 branché au VCC (+) cela fixe un 1, branché au VSS(-) cela fixe un 0.

Les 3 bits de sélection du composant permettent de choisir parmi 8 adresses :
• 1010 000 en binaire : 80 en décimal ou 0x50 en hexadécimal,
• 1010 001 en binaire : 81 en décimal ou 0x51 en hexadécimal,
• 1010 010 en binaire : 82 en décimal ou 0x52 en hexadécimal,
• 1010 011 en binaire : 83 en décimal ou 0x53 en hexadécimal,
• 1010 100 en binaire : 84 en décimal ou 0x54 en hexadécimal,
• 1010 101 en binaire : 85 en décimal ou 0x55 en hexadécimal,
• 1010 110 en binaire : 86 en décimal ou 0x56 en hexadécimal,
• 1010 111 en binaire : 87 en décimal ou 0x57 en hexadécimal.

Exemple : si les 3 broches A2, A1, A0, sont reliés au VSS (-) l'adresse du composant sera : 1010 000 en binaire : 80 en décimal ou 0x50 en hexadécimal.
C'est cette adresse qu'il faudra indiquer lorsque l'on souhaitera accéder à ce composant.

• VSS : Masse de l'alimentation du composant,

• SDA : Broche de données du bus I2C, elle doit être reliée à la connexion SDA de la platine Arduino. Il n'est pas nécessaire de rajouter de résistance de tirage au + 5v pour le fonctionnement du bus I2C,
• SCL : Broche d'horloge du bus I2C, elle doit être reliée à la connexion SCL de la platine Arduino. Il n'est pas nécessaire de rajouter de résistance de tirage au + 5v pour le fonctionnement du bus I2C.

WP : Broche de protection :
   • Etat haut (+2,5 à +5,5v), écriture impossible, la lecture reste possible,
   • Etat bas (0v), écriture et lecture possible.

• VCC : Alimentation du composant. Pour une 24LC512 elle doit être comprise entre 2,5 à 5,5 volts.

Le raccordement d'une mémoire 24LC512 est très simple :
• Choisir une adresse unique sur le bus I2C : Ici les trois broches A2, A1, A0 sont à la masse, l'adresse est donc : 1010 000 en binaire : 80 en décimal ou 0x50 en hexadécimal.
• Connecter la broche SCL de la platine arduino à la broche SCL de la 24LC512,
• Connecter la broche SDA de la platine arduino à la broche SDA de la 24LC512,
• Connecter la broche WP (Write Protect) à la masse pour permettre l'écriture et la lecture de la mémoire,
   • On peut connecter cette broche à une sortie de l'arduino pour contrôler la broche WP en commandant un Etat Haut ou un Etat Bas,
• Brancher la broche VSS à la masse,
• Brancher la broche VCC sur une tension comprise entre 2,5 à 5,5 v.

branchement type d'une 24lc512
Branchement type d'une 24LC512
MISE en OEUVRE LOGICIELLE de la 24LC512
Lorsque la mémoire 24LC512 est raccordé à la platine Arduino il faut maintenant écrire ou lire dans cette mémoire.

Pour effectuer cela on va utiliser la bibliothèque "Wire" présente dans l'IDE Arduino ce qui facilite grandement le travail.

Pour le développement d'un programme on utilise l'IDE arduino. 
Après installation et lancement du logiciel on peut commencer à développer notre programme. Il se présente sous la forme :


//Déclaration des variables du programme


void setup()

{ 
//Instructions exécutées une fois.
} 
 
void loop()

//Instructions exécutées en boucle.
 }
Structure de programmation de l'IDE Arduino

Chargement de la bibliothèque
Pour pouvoir lire et écrire dans la mémoire 24LC512 il faut respecter le protocole I2C.
La bibliothèque "wire.h" nous évite de maitriser le protocole I2C.
On peut se contenter d'utiliser les instructions de cette bibliothèque pour piloter notre mémoire.

Pour pouvoir utiliser la bibliothèque il faut l'importer dans notre sketch par la commande : 
#include <Wire.h>

On déclare ensuite l'adresse de la mémoire par la commande : 
#define 24LC512_ADRESSE 0x50 (Si les broches A2, A1, A0 ont été reliées à la masse).

chargement bibliotheque et declaration de l'adresse
Chargement bibliothèque et déclaration de l'adresse

Setup
Dans le protocole I2C il y a un maître (en général) et des esclaves.
La platine Arduino gère par l'intermédiaire du sketch les circuits branchés sur le bus I2C, elle sera donc : le MAÎTRE.

La mémoire branchée sur le bus I2C sera un ESCLAVE.

Il faut déclarer la platine Arduino en tant que MAÎTRE par la commande :
• Wire.begin () ;

arduino en maitre
Arduino en maître
Ecriture
Il est préférable d'insérer ce code dans une fonction pour éviter d'épuiser la mémoire au niveau du nombre de cycles d'enregistrement possible (1 million).

Pour stocker une donnée dans la mémoire il faut respecter un ordre de succession d'instructions :
1). Indiquer à quelle périphérique l'on s'adresse :
Wire.beginTransmission (24LC512_ADRESSE); //Adresse 24LC512

2). Indiquer à quelle adresse de la mémoire on veut stocker la donnée. La 24LC512 a une capacité de 64 koctets il est nécessaire de coder cette adresse sur 2 octets :
Wire.write (adresse >> 8); //Position adresse 24LC512 : Octet le plus significatif,
Wire.write (adresse &0xFF); //Position adresse 24LC512 : Octet le moins significatif.

3). Stocker la donnée à l'adresse sélectionnée :
Wire.write (donnée);//La valeur de la donnée stockée ne doit pas dépasser 255 (8 bits).

4). Indiquer la fin de transmission :
Wire.endTransmission ();

void ecriture 24lc512
Void ecriture 24LC512

Lecture
Pour lire une donnée dans la mémoire il faut également respecter un ordre de succession d'instructions :

1). Indiquer à quelle périphérique l'on s'adresse :
Wire.beginTransmission (24LC512_ADRESSE); //Adresse 24LC512.

2). Indiquer quelle est l'adresse de la mémoire que l'on veut lire. La 24LC512 a une capacité de 64 koctets il est nécessaire de coder cette adresse sur 2 octets :
Wire.write (adresse >> 8); //Position adresse 24LC512 : Octet le plus significatif,
Wire.write (adresse &0xFF); //Position adresse 24LC512 : Octet le moins significatif.

3). Indiquer la fin de transmission :
Wire.endTransmission ();

4). Interroger la mémoire :
Wire.requestFrom (24LC512_ADRESSE, 1); //Adresse et quantité 1 octet

5). Stocker la donnée dans une variable :
• adresse_stockage_donnee = Wire.read ();

6). Indiquer la fin de transmission :
Wire.endTransmission ();

La donnée est stockée dans la variable " adresse_stockage_donnee " (déclarée au préalable par un int), et peut ensuite être utilisée dans le sketch.

void lecture 24lc512
Void lecture 24LC512
ADRESSAGE PARTICULIER de PLUSIEURS 24LC512
Sur une 24LC512 une partie de l'adresse est fixée par le constructeur.
• Les 4 premiers bits représentent : Le code de contrôle : 1010.

• 
Les 3 suivants choisis par l'utilisateur représentent  : Les bits de sélection du composant : A2, A1, A0 représentant les bits les plus significatifs de l'adresse.
   • On peut par cette méthode brancher 8 mémoires 24LC512 sur le même bus I2C et porter la capacité mémoire à (512Kb * 8) = 4096 Kb ou 512 Koctets.

adresse esclave 24lc512
Adresse esclave 24LC512

Les bits de sélection de puce A2, A1 et A0 peuvent être utilisés pour étendre l'espace d'adressage contigu.

En utilisant 8 mémoires 24LC512 sur le même bus I2C on peut adresser jusqu'à 512 Koctets.

Dans ce cas, on utilise :
• Le bit A0 comme bit d'adresse A16,
• Le bit A1 comme bit d'adresse A17,
• Le bit A2 comme bit d'adresse A18.

Dans ce mode on utilise les mémoires comme si elles n'en formaient qu'une seule.