Présentation :
Le circuit 24C04 est une EEPROM série constituée de deux blocs de 256 Ko utilisant le protocole I2C.
Eléments constitutifs de la trame :
Octet d'identification (devsel) :
C'est le premier octet émis par le maître, il permet de sélectionner le circuit ainsi que la nature et le lieu des opérations à effectuer (R/W, bloc).
bits 7 à 2 : Identification du circuit constituée d'une partie fixe (bits 7 à 4) égale à 1010, et d'une partie variable (bits 3 et 2) fixée par les états logiques imposés sur les broches E2 et E1.
- bit 1 : Permet l'accès à un des deux blocs de 256 Ko.
- bit 0 : Sélectionne le mode lecture (1) ou écriture (0).
Exemple :
On désire écrire dans le bloc 0 d'un circuit 24C04 dont les pattes E2 et E1 sont connectées respectivement à 1 et à 0. Le premier mot à envoyer sera 10101000.
Octet d'adresse (addr) :
Ce mot indique l'adresse à laquelle doivent s'effectuer les opérations.
Octet de donnée(data):
Ce mot indique la donnée à inscrire.
Algorithme d'écriture
Les octets devsel, addr, data sont insérés dans la trame I2C (consulter les pages I2c). On distingue deux modes d'écriture.
mode direct :
La donnée est rangée à l'adresse spécifiée par l'octet addr, la trame envoyée par le circuit maître est la suivante :
Start |
devsel (R/W = 0) |
ack |
addr |
ack |
data |
ack |
stop |
Exemple :
Soit un circuit 24C04 dont les broches E2 et E1 sont reliées à la masse, on désire écrire la donnée $F9 à l'adresse $00 du bloc 0. La trame à envoyer sera la suivante :
Start |
$A0 |
ack |
$F9 |
ack |
stop |
mode séquentiel :
Une fois l'adresse spécifiée, les données sont inscrites aux adresses suivantes tant que la condition de stop n'est pas envoyée.
Start |
devsel (R/W = 0) |
ack |
addr |
ack |
data1 |
ack |
data2 |
ack |
data3 |
ack |
stop |
Exemple :
Soit un circuit 24C04 dont les broches E2 et E1 sont reliées à la masse, on désire écrire les données $F9, $E0, $12 respectivement aux adresses $10, $11, $12 du bloc 1. La trame à envoyer sera la suivante :
Start |
$A2 |
ack |
$10 |
ack |
$F9 |
ack |
$E0 |
ack |
$12 |
ack |
stop |
Remarque :
En mode écriture le maître positionne le bit ack à 1 et l'esclave répond par un 0 lui signifiant qu'il peut continuer la transmission.
Algorithme de lecture :
Pour effectuer une lecture il faut préalablement envoyer l'adresse au circuit en mode écriture. Puis repositionner le circuit en mode lecture afin d'obtenir la (les) donnée(s).
mode direct :
Start |
devsel(R/W = 0) |
ack |
addr |
ack |
Start |
devsel(R/W= 1) |
ack |
Data(out) |
ack=1 |
stop |
Exemple :
Soit un circuit 24C04 dont les broches E2 et E1 sont reliées à la masse, on désire lire la donnée présente à l'adresse $00 du bloc 0. La trame à envoyer sera la suivante :
Start |
$A0 |
ack |
$00 |
ack |
Start |
$A1 |
ack |
data(out) |
ack=1 |
stop |
Remarque :
Dans ce cas le maître positionne le bit ack à 1 pour l'acquittement des données. En fin de trame le maître positionne ack à 1 pour indiquer qu'il ne désire plus recevoir de données. Cet état est aussi appelé non-acquittement.
mode séquentiel :
En mode séquentiel, après réception d'une donnée, le bit ack est positionné à 0 par le maître lorsqu'il désire une nouvelle donnée.
Start |
devsel (R/W= 0) |
Start |
addr |
ack |
devsel (R/W = 1) |
ack |
data1(out) |
ack=0 |
data2(out) |
ack=1 |
stop |
Exemple :
Soit un circuit 24C04 dont les broches E2 et E1 sont reliées à la masse, on désire lire les données présentes aux adresses $10 et $11 du bloc 1. La trame à envoyer sera la suivante :
Start |
$A2 |
Start |
$10 |
ack |
$A3 |
ack |
data1(out) |
ack=0 |
data2(out) |
ack=1 |
stop |
cours memoire I2C 24C04 24CXX serie SDA SCL programmation
Révisé le :07-11-2017| © www.technologuepro.com