Éviter l'usure de l'EEPROM
Résumé: Si vous mettez à jour périodiquement une valeur dans l'EEPROM toutes les quelques minutes (ou plusieurs secondes), vous pouvez rencontrer le problème de l'usure des cellules EEPROM. Pour éviter cela, vous devez réduire la fréquence des entrées dans la cellule. Pour certains types d'EEPROM, même des vitesses d'enregistrement plus d'une fois par heure peuvent poser problème.Lorsque vous enregistrez des données, le temps passe vite
L'EEPROM est universellement utilisée pour enregistrer les paramètres et les journaux d'opérations dans les systèmes embarqués. Par exemple, vous pouvez souhaiter que la fonction de boîte noire enregistre les dernières données au moment d'un accident ou d'une panne de courant. J'ai vu des spécifications nécessitant l'enregistrement de ces données toutes les quelques secondes.Mais le problème est que l'EEPROM a une ressource de nombre record d'enregistrement. Après 100 000 ou un million d'enregistrements (selon la puce spécifique), certains de vos systèmes commenceront à rencontrer des problèmes de défaillance d'EEPROM. (Regardez dans la fiche technique pour un nombre spécifique. Si vous voulez libérer un grand nombre d'appareils, le «pire des cas» est probablement plus important que le «typique»). Un million d'enregistrements semble être un grand nombre, mais en fait, cela se terminera très rapidement. Regardons un exemple, en supposant que nous devons stocker la tension mesurée dans une cellule toutes les 15 secondes.1 000 000 d'enregistrements avec un enregistrement en 15 secondes donnent des enregistrements par minute:1 000 000 / (4 * 60 minutes / heure * 24 heures / jour) = 173,6 jours.En d'autres termes, votre EEPROM manquera de réserves d'un million d'enregistrements en moins de 6 mois.Ci-dessous est un graphique montrant le temps de porter (en années) basé sur la période de mise à jour d'une cellule EEPROM spécifique. La limite pour un produit avec une espérance de vie de 10 ans est une mise à jour toutes les 5 minutes 15 secondes pour une puce avec une ressource de 1 million d'enregistrements. Pour une EEPROM avec une ressource 100K, vous pouvez mettre à jour une cellule spécifique pas plus d'une fois toutes les 52 minutes. Cela signifie que vous ne devez pas espérer mettre à jour la cellule toutes les quelques secondes si vous voulez que votre produit fonctionne pendant des années, pas des mois. Les échelles ci-dessus linéairement, cependant, dans cet appareil, il existe également des facteurs secondaires, tels que la température et le mode d'accès.
Diminuer la fréquence
La façon la plus simple de résoudre le problème est d'écrire simplement les données moins souvent. Dans certains cas, la configuration système requise le permet. Ou vous ne pouvez enregistrer qu'avec des changements majeurs. Cependant, avec une entrée liée à un événement, soyez conscient d'un scénario possible dans lequel la valeur fluctuera constamment et déclenchera un flux d'événements qui entraînera l'usure de l'EEPROM.(Ce sera bien si vous pouvez déterminer combien de fois une EEPROM a été enregistrée. Mais cela nécessitera un compteur qui sera stocké dans l'EEPROM ... et le problème se transformera en un problème d'usure du compteur.)Interruption de la réduction de la nutrition
Certains processeurs ont une interruption de faible puissance qui peut être utilisée pour écrire la dernière valeur dans l'EEPROM, tandis que le système s'arrête en raison d'une perte de puissance. En général, vous stockez la valeur d'intérêt dans la RAM et l'enregistrez dans l'EEPROM uniquement lorsque l'alimentation est coupée. Ou peut-être écrivez-vous de temps en temps l'EEPROM et écrivez-en une autre dans le cadre de la procédure d'arrêt pour vous assurer que les données les plus récentes sont écrites.Il est important de s'assurer qu'il existe un grand condensateur de puissance qui maintiendra une tension suffisante pour programmer l'EEPROM pendant une durée suffisamment longue. Cela peut fonctionner si vous devez écrire une ou deux valeurs, mais pas un grand bloc de données. Attention, il y a beaucoup de place pour l'erreur!Tampon en anneau
La solution classique au problème d'usure consiste à utiliser le tampon d'anneau FIFO contenant N dernières entrées de valeur. Vous devez également enregistrer un pointeur à la fin du tampon dans l'EEPROM. Cela réduit l'usure de l'EEPROM d'une valeur proportionnelle au nombre de copies dans ce tampon. Par exemple, si un tampon passe par 10 adresses différentes pour enregistrer une seule valeur, chaque cellule particulière est modifiée 10 fois moins et la ressource d'écriture augmente 10 fois. Vous aurez également besoin d'un compteur ou d'un horodatage distinct pour chacune des 10 copies, afin de pouvoir déterminer laquelle est la dernière au moment de l'arrêt. En d'autres termes, vous avez besoin de deux tampons, un pour la valeur et un pour le compteur. (Si vous enregistrez le compteur à la même adresse, cela entraînera sa détérioration, car il devrait augmenter à chaque cycle d'enregistrement.) L'inconvénient de cette méthode estque vous avez besoin de 10 fois plus d'espace pour obtenir une durée de vie 10 fois plus longue. Vous pouvez être intelligent et emballer le compteur avec les données. Si vous écrivez une grande quantité de données, l'ajout de quelques octets au compteur n'est pas un gros problème. Mais dans tous les cas, vous aurez besoin de beaucoup d'EEPROM.Atmel a préparé une note contenant tous les détails sanglants:AVR-101: Stockage EEPROM haute endurance: www.atmel.com/images/doc2526.pdfUn cas particulier pour le compteur du nombre d'enregistrements
Parfois, vous devez enregistrer le compteur, pas les valeurs elles-mêmes. Par exemple, vous souhaiterez peut-être connaître le nombre de fois que l'appareil a été allumé ou la durée de fonctionnement de votre appareil. Le pire des compteurs est qu'ils changent constamment le bit le moins significatif, usant plus rapidement les cellules EEPROM inférieures. Mais ici, il est possible d'appliquer quelques astuces. Il existe plusieurs idées intelligentes dans l'applet de Microchip, telles que l'utilisation d'un code Gray de sorte qu'un seul bit d'un compteur multi-octets change lorsque la valeur du compteur change. Ils recommandent également l'utilisation de codes correctifs pour compenser l'usure. (Je ne sais pas dans quelle mesure l'utilisation de tels codes sera efficace, car cela dépendra de l'indépendance des erreurs dans les bits des octets du compteur, utilisez à vos propres risques, environ Auteur). Voir l'annexe:ww1.microchip.com/downloads/en/AppNotes/01449A.pdfRemarque: pour ceux qui souhaitent en savoir plus, Microchip a préparé un document contenant des informations détaillées sur la disposition des cellules EEPROM et leur usure avec des diagrammes:ftp.microchip.com/tools /memory/total50/tutorial.htmlFaites-moi savoir si vous avez des idées intéressantes sur la façon de traiter l'usure des EEPROM.Source: Phil Koopman, Better Embedded System SWBetterembsw.blogspot.ru/2015/07/avoiding-eeprom-wearout.htmlNote du traducteur: ces dernières années, les puces EEPROM sont apparues avec une organisation d'effacement des pages (similaire aux puces FLASH), où il est possible d'adresser logiquement les cellules (lire, écrire et effacer) octet par bye, mais la puce efface la page entière de manière invisible pour l'utilisateur et la remplace par de nouvelles données. Ceux. Après avoir effacé les cellules à l'adresse 0, nous avons réellement effacé et réécrit les cellules avec les adresses 0 ... 255 (avec une taille de page de 256 octets), donc une astuce de tampon ne sera pas utile dans ce cas. Lorsque la ressource d'enregistrement d'un tel microcircuit est épuisée, pas une cellule ne tombe en panne, mais la page entière. Dans les fiches techniques de ces microcircuits, la ressource d'enregistrement est indiquée pour la page et non pour une cellule spécifique. Voir, par exemple, la fiche technique sur 25LC1024 de Microchip. Source: https://habr.com/ru/post/fr385213/
All Articles