Selon certains, l'ESP8286 ne possède pas de mémoire EEPROM
D'autres programment l'EEPROM de l'ESP8286 et recommandent même de ne pas le répéter trop souvent car le nombre d'écritures est limité.
Comment s'y retrouver ?
J'ai compris que le fimware émulait de la mémoire eeprom en mémoire flash et dans ce cas, le nombre d'écritures n'est donc pas celui des EEPROMs mais celles des mémoires flash (SPIFFS) ?
Pour écrire ou lire en mémoire "non effaçable", octet par octet, les commandes EEPROM.write(... et EEPROM.read(.. sont possibles.
Je pense que dans ce cas, l'écriture et la lecture se font directement en mémoire flash ? sans passer par un buffer en RAM.
Que fait exactement commande EEPROM.commit(); ? Je ne trouve pas d'explications claires.
(à priori on recharge la partie "eeprom" à partir du buffer modifié en RAM)
Les commandes EEPROM.put(.. et EEPROM.get(... ne sont utilisables que lorsqu'une partie de la mémoire flash et utilisée pour émuler de la mémoire eeprom mais dans ce cas, le "travail" s'effectue d'abord sur une copie de l"eeprom" en RAM.
Ai-je bien compris ?
Merci d'avance pour des explications ou des liens "sérieux".
Selon certains, l'ESP8286 ne possède pas de mémoire EEPROM
C'est l'avis de son fabriquant !!
La Data Sheet des ESP8266 est claire et formelle, pas d'EEPROM dans l'ESP8266 (... ni d'ailleurs de Flash, seulement de la RAM et de la ROM)
Une librairie pour l'IDE Arduino permet de réserver un secteur de mémoire Flash pour émuler une EEPROM
Quelle mémoire Flash ? Celle, externe, (raccordée en SPI) qui accompagne nécessairement tout ESP8266.
Les contraintes d'écriture/effacement dans la mémoire Flash externe (=effacement et écriture par secteur, pas par octet, usure...) s'appliquent donc à l'usage de cette 'pseudo EEPROM'
Un buffer est géré par la librairie chargée de l'émulation d'EEPROM en Flash externe pour ESP8266 (idem pour ESP32)
Cette librairie ne fait pas de 'répartition d'usure' ('wear levelling') contrairement à SPIFFS ou LittleFS.
Une écriture trop fréquente dans cette 'pseudo EEPROM' fatigue donc rapidement le secteur de Flash externe utilisé.
Le nombre garanti de cycles d'effacement/écriture se trouve dans la Data Sheet de la mémoire Flash SPI (souvent une W25Q32 de la marque Winbond, 100.000 cycles d'effacement/écriture)
EEPROM.commit() réalise l'effacement + l'écriture effective d'un secteur en Flash à partir du buffer en RAM
N.B Les choses s'éclaircissent si on se réfère aux sources et non aux infos de seconde main glanées ici et là !!
Merci pour cette réponse très claire. Chapeau !
Y compris les 2 derniers liens que je conserve "sous le coude". Le 1er je l'avais déjà vu.
En 1) effectivement de parlait de la flash externe (W25Q32)
Tout me semble plus clair maintenant.
Mes problèmes/questions viennent surtout du fait que je ne sais pas lire l'anglais.
Même en utilisant la traduction, ça reste souvent incompréhensible dans le détail.
Trop de "foromeux", bien intentionnés par ailleurs, tentent d'expliquer mais ne savent pas s'y prendre.
( ou alors je vieillis ? ) Dur-dur de trier.
Merci pour ces informations complémentaires.
Je n'en suis pas encore là mais peut-être qu'un jour, ... ?
Question en prime :
Serial.println(F("... ")); mémorise le texte en flash. (tout comme le programme !)
Quel est donc l'intérêt d'utiliser Serial.println(F("... ")); ?
Comme je suppose qu'il y en a un quand même, (économiser de la RAM), quel est le "mécanisme" utilisé ?