EEPROM 24C256 - Lecture des valeurs jusqu'à de la dernière entrée

Bonjour,

Je cherche comment déterminer la dernière adresse utilisée dans un EEPROM MicroChip 24Cxx (peu importe le modèle 32, 64, 128, 256, 512)

Je comprends très bien comment écrire et lire des valeurs sur un principe séquentiel. Par exemple, un 24C256 contient une taille de stockage de 256 kbits (32 kilo-octets / 32768 emplacements de 8 bits).

D'après la documentation de MicroChip disponible ici:

Il est possible d'avoir le "Current Address" sauf que cette information se perd lorsque la puce n'est plus alimentée électriquement. Ce n'est donc pas ce que je veux.

Bref, ce que je veux savoir est comment déterminer l'adresse de la dernière écriture. Je sais que par défaut toutes les cellules mémoires non utilisées sont à un état 0xFF (255), mais cela n'est pas nécessairement une indication lors d'une lecture de dire: "Hey, dès que je rencontre 0xFF c'est fini... Car techniquement je pourrais avoir besoin d'écrire une valeur de 0xFF dans une cellule ? Ou bien c'est impossible d'écrire 0xFF (255) et nous pouvons seulement écrire de 0x0 à 0xFE (254) ??"

Je ne peux pas imaginer que je dois lire la totalité du stockage pour ensuite dire "Ok, à partir de l'adresse 0x451B jusqu'à 0X7FFF je trouve uniquement de valeurs 0xFF... donc je considère que mes cellules mémoires utilisées sont de 0x0000 à 0x451A ?" Ce qui consommerait beaucoup de temps/ressources pour déterminer la fin des valeurs.

Tout ça c'est pour être en mesure de ne pas écraser les données en mémoire lors d'une panne électrique afin de reprendre où j'étais rendu dans un contexte d'enregistrement séquentiel (LOG, voice recorder, etc.)

Tu conserves l’adresse désirée … dans l’EEPROM, à l’adresse 0 (au début) par exemple.
Bien sûr il faut que ton prog. sache quelle est cette adresse, mais comme c’est lui qui écrit dans l’EEPROM, il a moyen de le savoir.

Il n’y a aucun mécanisme dans les EEPROM pour connaitre l’emplacement de la dernière écriture. C’est à toi de gérer ce genre de problème comme le suggère biggil

Je ne peux pas imaginer que je dois lire la totalité du stockage pour ensuite dire "Ok, à partir de l'adresse 0x451B jusqu'à 0X7FFF je trouve uniquement de valeurs 0xFF... donc je considère que mes cellules mémoires utilisées sont de 0x0000 à 0x451A ?" Ce qui consommerait beaucoup de temps/ressources pour déterminer la fin des valeurs.

Il faut quand même noter que la taille est toujours une puissance de 2. Pour savoir ou est la fin, il suffit de tester la case 0b100000000000000000000000,
puis 0b10000000000000000000000,
puis 0b1000000000000000000000,
puis 0b100000000000000000000,
Jusqu'à en trouver une qui répond.

Bref, ce que je veux savoir est comment déterminer l'adresse de la dernière écriture

Dans le cas où c'est votre programme qui fait les écritures, il suffit juste d'écrire l'adresse de la dernière valeur dans les premiers octets de l'eeprom, ainsi vous savez combien de pages mémoire ont été utilisées. Ainsi, vous n'aurez pas besoin à chaque fois de parcourir la mémoire pour connaître la fin de la dernière adresse.

C'est un système qui peut s'appliquer à un tableau aussi.

Oui enfin avant de rentrer dans le détail du mécanisme, il faudrait connaitre un peu mieux le besoin.
Parce qu'écrire à une adresse fixe présente aussi des difficultés. On risque "d'user" cette partie de la mémoire avant le reste.

fdufnews:
On risque "d'user" cette partie de la mémoire avant le reste.

Dans la mesure où on envisage des dizaines de milliers d'accès.
J'ai un système où j'utilise l'EEPROM maxi 2fois par jour. Je ne vais trop l'user.

@biggil, désolé je viens de voir que j'ai zappé votre message bien au dessus du miens.