EEPROM 24C04 Algorithme de lecture et écriture

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.

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