mercredi 25 mars 2015

Mémoire I2c - 24AA1026 - Compatible Arduino, Pic

Introduction :

Voici une mémoire I2c 1 Mbits (128Koctets), elle est compatible avec tous les micro-contrôleurs disposant d'un bus I2c (dont Arduino).

Description:


Bus I2c : max 400Khz (Si Vcc < 2.5V alors 100Khz)
Alimentation : 1.75V à 5.5V
Taille des pages : 128 octets
Boitier : DIP, SOIJ, SOIC, TSSOP
Cascade : Oui, permet d'utiliser jusqu’à 4 mémoires sur le même bus.



La broche WP doit être connecté à la masse pour pouvoir écrire dans la mémoire.

Adresse I2c :

 Les bits A2 et A1 sont des broches du composant.

Si vous connectez une seule mémoire et que A1 et A2 = GND alors l'adresse sera

1 0 1 0 0 0 B0 R/W

Si vous voulez utiliser les quatre mémoires sur le même bus, il faut :

N° mémoire A2 A1 Adresse I2c
1 0 0 101000 B0 R/W
2 0 1 101001 B0 R/W
3 1 0 101010 B0 R/W
4 1 1 101011 B0 R/W

Le bit B0 est utilisé pour sélectionner le bloc, en effet la mémoire est séparée en deux.
Si B0 = 0, sélection de l'espace mémoire 0x0000 à 0xFFFF
Si B0 = 1, sélection de l'espace mémoire 0x10000 à 0x1FFFF

Le bit R/W permet d'indiquer si on veut lire ou écrire dans la mémoire.

Trame I2c typique :
 
A15 à A0 définit l'adresse de la case mémoire.

Écriture d'un octet :

 

Exemple avec Arduino :
#include "wire .h"

void setup()
{
         Wire.begin();                                            // Configuration du bus I2c
}

byte data = 5;

void loop()
{
         Wire.beginTransmission(0b10100000);    // Adresse I2c
         Wire.write(0x00);                                      // Adresse Haute de la case mémoire
         Wire.write(0x00);                                      // Adresse Basse de la case mémoire
         Wire.write(data);                                       // Donnée à sauvegarder
         Wire.endTransmission();                           // La transmission est terminée

         delay(5000);                                              // Attente de 5 secondes
}

Écriture de la valeur 5 dans la case 0x0000.


Écriture d'une page (128 octets) :

 
#include "wire .h"

void setup()
{
         Wire.begin();                                             // Configuration du bus I2c
}

byte data = 5;

void loop()
{
         Wire.beginTransmission(0b10100000);    // Adresse I2c
         Wire.write(0x00);                                      // Adresse Haute de la case mémoire
         Wire.write(0x00);                                      // Adresse Basse de la case mémoire
         for(int i = 0; i < 128; i++){
                  Wire.write(data);                              // Donnée à écrire
         }
         Wire.endTransmission();                           // La transmission est terminée

         delay(5000);                                              // Attente de 5 secondes
}

Écriture de la valeur 5 dans les cases 0x0000 à 0x0080 grâce à la boucle for.



Lecture de l'adresse courante :

 
#include "wire .h"

void setup()
{
         Wire.begin();                                             // Configuration du bus I2c
}

void loop()
{
         Wire.requestFrom(0b10100001, 1);         // Lecture d'un octet
         char data = Wire.read();                           // Lecture de l'octet

         delay(5000);                                             // Attente de 5 secondes                                       
}

La variable data contiendra la valeur lue dans la mémoire.

Lecture d'un octet :

 
#include "wire .h"

void setup()
{
         Wire.begin();                                             // Configuration du bus I2c
}

void loop()
{
         Wire.beginTransmission(0b10100000);    // Adresse I2c
         Wire.write(0x00);                                      // Adresse Haute de la case mémoire
         Wire.write(0x00);                                      // Adresse Basse de la case mémoire

         Wire.requestFrom(0b10100001, 1);          // Lecture d'un octet
         char data = Wire.read();                            // Lecture de l'octet

         delay(5000);                                              // Attente de 5 secondes     
}

Lecture d'une page :

#include "wire .h"

void setup()
{
         Wire.begin();                                             // Configuration du bus I2c
}

char data[128];                                                   // Tableau de données
int i = 0;                                                              // Variable de déplacement

void loop()
{
         Wire.beginTransmission(0b10100000);    // Adresse I2c
         Wire.write(0x00);                                      // Adresse Haute de la case mémoire
         Wire.write(0x00);                                      // Adresse Basse de la case mémoire
         Wire.endTransmission();                           // La transmission est terminée

         Wire.requestFrom(0b10100001, 128);     // Lecture d'une page de 128 octets

         while(Wire.available())                            // Boucle si des octets sont présents sur le bus
         {
                  data[i] = Wire.read();                      // Copie de l'octet dans le tableau
                  i = i +1;                                           // Incrémente la variable i
         }

         delay(5000);                                             // Attente de 5 secondes
}



Achat Mémoire i2c

Aucun commentaire:

Enregistrer un commentaire

Sponsors