Table des matières:

Lecture et écriture de données sur une EEPROM externe à l'aide d'Arduino : 5 étapes
Lecture et écriture de données sur une EEPROM externe à l'aide d'Arduino : 5 étapes

Vidéo: Lecture et écriture de données sur une EEPROM externe à l'aide d'Arduino : 5 étapes

Vidéo: Lecture et écriture de données sur une EEPROM externe à l'aide d'Arduino : 5 étapes
Vidéo: Sauvegarder des Données dans l'Arduino avec l'EEPROM - ARDUINO #3 2024, Juillet
Anonim
Lecture et écriture de données sur une EEPROM externe à l'aide d'Arduino
Lecture et écriture de données sur une EEPROM externe à l'aide d'Arduino

EEPROM signifie mémoire morte programmable effaçable électriquement.

L'EEPROM est très importante et utile car il s'agit d'une forme de mémoire non volatile. Cela signifie que même lorsque la carte est hors tension, la puce EEPROM conserve toujours le programme qui y a été écrit. Ainsi, lorsque vous éteignez la carte puis la rallumez, le programme qui a été écrit dans l'EEPROM peut être exécuté. Donc, fondamentalement, l'EEPROM stocke et exécute un programme quoi qu'il arrive. Cela signifie que vous pouvez éteindre un appareil, le garder éteint pendant 3 jours, puis le rallumer et il peut toujours exécuter le programme qui y a été programmé. C'est ainsi que fonctionnent la plupart des appareils électroniques grand public.

Ce projet est parrainé par le LCSC. J'utilise des composants électroniques de LCSC.com. LCSC s'est fermement engagé à offrir une large sélection de composants électroniques authentiques de haute qualité au meilleur prix avec un réseau d'expédition mondial dans plus de 200 pays. Inscrivez-vous aujourd'hui et obtenez 8 $ de rabais sur votre première commande.

L'EEPROM est également très efficace dans la mesure où les octets individuels d'une EEPROM traditionnelle peuvent être lus, effacés et réécrits indépendamment. Dans la plupart des autres types de mémoire non volatile, cela ne peut pas être fait. Les appareils EEPROM série comme l'EEPROM Microchip série 24 vous permettent d'ajouter plus de mémoire à n'importe quel appareil capable de parler I²C.

Fournitures

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. Cristal 16 MHz
  4. Planche à pain
  5. Résistance 4.7k Ohm x 2
  6. Condensateur 22 pF x 2

Étape 1: les bases de l'EEPROM

Bases de l'EEPROM
Bases de l'EEPROM

La puce Microchip 24LC2512 peut être achetée dans un boîtier DIP à 8 broches. Les broches du 24LC512 sont assez simples et se composent de l'alimentation (8), du GND (4), de la protection en écriture (7), du SCL/SDA (6, 5) et de trois broches d'adresse (1, 2, 3).

Une brève histoire du ROM

Les premiers ordinateurs de type "Programme stocké" - tels que les calculatrices de bureau et les interprètes à clavier - ont commencé à utiliser la ROM sous la forme de Diode Matrix ROM. Il s'agissait d'une mémoire composée de diodes semi-conductrices discrètes placées sur un PCB spécialement organisé. Cela a cédé la place à Mask ROM avec l'avènement des circuits intégrés. Mask ROM ressemblait beaucoup à Diode Matrix ROM, sauf qu'il était implémenté à une échelle beaucoup plus petite. Cela signifiait, cependant, que vous ne pouviez pas simplement déplacer quelques diodes avec un fer à souder et les reprogrammer. La ROM du masque devait être programmée par le fabricant et n'était par la suite pas modifiable.

Malheureusement, Mask ROM coûtait cher et prenait beaucoup de temps à produire car chaque nouveau programme nécessitait la fabrication d'un tout nouvel appareil par une fonderie. En 1956, cependant, ce problème a été résolu avec l'invention de la PROM (ROM programmable) qui a permis aux développeurs de programmer les puces eux-mêmes. Cela signifiait que les fabricants pouvaient produire des millions du même appareil non programmé, ce qui le rendait moins cher et plus pratique. La PROM, cependant, ne pouvait être écrite qu'une seule fois à l'aide d'un appareil de programmation haute tension. Après la programmation d'un appareil PROM, il n'y avait aucun moyen de remettre l'appareil dans son état non programmé.

Cela a changé en 1971 avec l'invention de l'EPROM (Erasable Programmable ROM) qui - en plus d'ajouter une autre lettre à l'acronyme - a permis d'effacer l'appareil et de le ramener à un état "vierge" à l'aide d'une forte source de lumière UV. C'est vrai, vous deviez éclairer le circuit intégré pour le reprogrammer, c'est vraiment cool? Eh bien, il s'avère que c'est plutôt cool à moins que vous ne soyez un développeur travaillant sur un firmware, auquel cas vous aimeriez vraiment pouvoir reprogrammer l'appareil à l'aide de signaux électriques. Ceci est finalement devenu une réalité en 1983 avec le développement de l'EEPROM (Electrically Erasable Programmable ROM) et avec cela, nous arrivons à l'acronyme actuel peu maniable.

Étape 2: bizarreries de l'EEPROM

L'EEPROM présente deux inconvénients majeurs en tant que méthode de stockage de données. Dans la plupart des applications, les avantages l'emportent sur les inconvénients, mais vous devez les connaître avant d'intégrer l'EEPROM dans votre prochaine conception.

Tout d'abord, la technologie qui fait fonctionner l'EEPROM limite également le nombre de fois où elle peut être réécrite. Cela est dû au fait que les électrons sont piégés dans les transistors qui composent la ROM et s'accumulent jusqu'à ce que la différence de charge entre un "1" et un "0" soit méconnaissable. Mais ne vous inquiétez pas, la plupart des EEPROM ont un nombre de réécriture maximum de 1 million ou plus. Tant que vous n'écrivez pas en continu dans l'EEPROM, il est peu probable que vous atteigniez ce maximum. Deuxièmement, l'EEPROM ne sera pas effacée si vous la coupez, mais elle ne conservera pas vos données indéfiniment. Les électrons peuvent dériver hors des transistors et à travers l'isolant, effaçant efficacement l'EEPROM au fil du temps. Cela dit, cela se produit généralement au cours des années (bien qu'il puisse être accéléré par la chaleur). La plupart des fabricants disent que vos données sont en sécurité sur EEPROM pendant 10 ans ou plus à température ambiante. Et il y a encore une chose que vous devez garder à l'esprit lorsque vous sélectionnez un périphérique EEPROM pour votre projet. La capacité EEPROM est mesurée en bits et non en octets. Une EEPROM de 512 Ko contiendra 512 Ko de données, soit seulement 64 Ko.

Étape 3: branchement matériel Arduino

Branchement matériel Arduino
Branchement matériel Arduino
Raccordement matériel Arduino
Raccordement matériel Arduino

Bon, maintenant que nous savons ce qu'est l'EEPROM, connectons-en une et voyons ce qu'elle peut faire ! Pour faire parler notre appareil, nous devrons connecter l'alimentation ainsi que des lignes série I²C. Cet appareil, en particulier, fonctionne à 5VDC, nous allons donc le connecter à la sortie 5V de notre Arduino UNO. De plus, les lignes I²C auront besoin de résistances de rappel pour que la communication se déroule correctement. La valeur de ces résistances dépend de la capacité des lignes et de la fréquence à laquelle vous souhaitez la communiquer, mais une bonne règle de base pour les applications non critiques est de la maintenir dans la plage kΩ. Dans cet exemple, nous utiliserons des résistances de rappel de 4,7 kΩ.

Il y a trois broches sur cet appareil pour sélectionner l'adresse I²C, de cette façon vous pouvez avoir plus d'une EEPROM sur le bus et les adresser chacune différemment. Vous pouvez simplement tous les mettre à la terre, mais nous allons les câbler afin que nous puissions ajouter un appareil de plus grande capacité plus tard dans le didacticiel.

Nous utiliserons une maquette pour tout connecter ensemble. Le schéma ci-dessous montre le branchement correct pour la plupart des appareils EEPROM I²C, y compris l'EEPROM Microchip série 24 que nous vendons.

Étape 4: Lecture et écriture

La plupart du temps, lorsque vous utilisez une EEPROM avec un microcontrôleur, vous n'aurez pas besoin de voir tout le contenu de la mémoire en même temps. Vous allez simplement lire et écrire des octets ici et là selon vos besoins. Dans cet exemple, cependant, nous allons écrire un fichier entier dans l'EEPROM, puis le lire en entier afin de pouvoir le visualiser sur notre ordinateur. Cela devrait nous mettre à l'aise avec l'idée d'utiliser l'EEPROM et nous donner également une idée de la quantité de données pouvant réellement tenir sur un petit appareil.

Écris quelque chose

Notre exemple d'esquisse prendra simplement n'importe quel octet qui arrive sur le port série et l'écrira dans l'EEPROM, en gardant une trace du nombre d'octets que nous avons écrits dans la mémoire.

L'écriture d'un octet de mémoire dans l'EEPROM se déroule généralement en trois étapes:

  1. Envoyez l'octet de poids fort de l'adresse mémoire à laquelle vous souhaitez écrire.
  2. Envoyez l'octet de poids faible de l'adresse mémoire à laquelle vous souhaitez écrire.
  3. Envoyez l'octet de données que vous souhaitez stocker à cet emplacement.

Il y a probablement quelques mots clés qui expliquent clairement:

Adresses mémoire

Si vous imaginez tous les octets d'une EEPROM de 512 Kbit sur une ligne de 0 à 64000 - parce qu'il y a 8 bits dans un octet et donc vous pouvez mettre 64000 octets sur une EEPROM de 512 Kbit - alors une adresse mémoire est l'endroit dans ligne où vous trouverez un octet particulier. Nous devons envoyer cette adresse à l'EEPROM afin qu'elle sache où mettre l'octet que nous envoyons.

Octets les plus significatifs et les moins significatifs

Parce qu'il y a 32 000 emplacements possibles dans une EEPROM de 256 Kbit - et parce que 255 est le plus grand nombre que vous pouvez encoder sur un octet - nous devons envoyer cette adresse sur deux octets. Tout d'abord, nous envoyons l'octet le plus significatif (MSB) - les 8 premiers bits dans ce cas. Ensuite, nous envoyons l'octet le moins significatif (LSB) - le second 8 bits. Pourquoi? Parce que c'est ainsi que l'appareil s'attend à les recevoir, c'est tout.

Rédaction de pages

Écrire un octet à la fois est bien, mais la plupart des périphériques EEPROM ont ce qu'on appelle un "tampon d'écriture de page" qui vous permet d'écrire plusieurs octets à la fois de la même manière que vous le feriez avec un seul octet. Nous en profiterons dans notre exemple de croquis. L'EEPROM utilise un compteur interne qui augmente automatiquement l'emplacement mémoire avec chaque octet de données suivant qu'il reçoit. Une fois qu'une adresse mémoire a été envoyée, nous pouvons la suivre avec jusqu'à 64 octets de données. L'EEPROM suppose (à juste titre) qu'une adresse de 312 suivie de 10 octets enregistrera l'octet 0 à l'adresse 312, l'octet 1 à l'adresse 313, l'octet 2 à l'adresse 314, et ainsi de suite.

Lire quelque chose

La lecture à partir de l'EEPROM suit fondamentalement le même processus en trois étapes que l'écriture dans l'EEPROM:

  1. Envoyez l'octet de poids fort de l'adresse mémoire à laquelle vous souhaitez écrire.
  2. Envoyez l'octet de poids faible de l'adresse mémoire à laquelle vous souhaitez écrire.
  3. Demandez l'octet de données à cet emplacement.

Étape 5: Schémas et code

Schémas et code
Schémas et code

Code:

#comprendre

#define eeprom 0x50 //définit l'adresse de base de l'EEPROM

void setup() {

Fil.begin(); //crée un objet Wire

Serial.begin(9600);

adresse int non signée = 0; //première adresse de l'EEPROM

Serial.println("Nous écrivons le code postal 22222, un code postal"); for(adresse = 0; adresse< 5; adresse++) writeEEPROM(eeprom, adresse, '2'); // Ecrit 22222 dans l'EEPROM

for(adresse = 0; adresse< 5; adresse++) { Serial.print(readEEPROM(eeprom, address), HEX); } }

boucle vide() {

/*il n'y a rien dans la fonction loop() car nous ne voulons pas que l'arduino écrive à plusieurs reprises la même chose dans l'EEPROM. Nous voulons juste une écriture unique, donc la fonction loop() est évitée avec les EEPROM.*/ }

//définit la fonction writeEEPROM

void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data) { Wire.beginTransmission(deviceaddress); Wire.write((int)(eeaddress >> 8)); // écrit le MSB Wire.write((int)(eeaddress & 0xFF)); // écrit le LSB Wire.write(data); Wire.endTransmission(); }

//définit la fonction readEEPROM

octet readEEPROM(int deviceaddress, unsigned int eeaddress) { octet rdata = 0xFF; Wire.beginTransmission(adresse de l'appareil); Wire.write((int)(eeaddress >> 8)); // écrit le MSB Wire.write((int)(eeaddress & 0xFF)); // écrit le LSB Wire.endTransmission(); Wire.requestFrom(adresse de l'appareil, 1); if (Wire.available()) rdata = Wire.read(); renvoyer rdata; }

Conseillé: