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
Si vous voulez utiliser les quatre mémoires sur le même bus, il faut :
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 :
Écriture d'un octet :
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
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
Écriture de la valeur 5 dans les cases 0x0000 à 0x0080 grâce à la boucle for.
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
}
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
}
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
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 :
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.
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
}
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
Important !
RépondreSupprimerA noter que `Wire.requestFrom(0b10100001, 128);` ne fonctionne pas comme prévu. En effet, la librairie wire ne peut transmettre que 32 bytes à la fois, du coup on obtient que 1/4 des infos quand on fait le Wire.read() !!!!
Bonjour,
Supprimerje ne connaissais pas cette limitation. Je n'ai pas trouvé de solution qui semble fonctionner. Avez-vous une solution à proposer ? Que je puisse mettre à jour cet article avec des informations correctes.
Merci pour votre retour