Besoin d'un circuit intégré de mémoire non volatile avec une capacité d'opérations de lecture / écriture presque illimitées

12

J'ai besoin d'une solution de mémoire qui va être utilisée pour garder une trace du nombre accumulé sur un projet basé sur un microcontrôleur.

Par comptage accumulé, je veux dire que le microcontrôleur utilise cet emplacement de mémoire pour compter le nombre d'occurrences d'un événement. Le comptage doit être conservé pendant les coupures de courant, d'où la nécessité d'une mémoire NON VOLATILE.

De plus, l'occurrence de l'événement d'incrémentation de comptage est fréquente, d'où de nombreuses écritures dans la mémoire, d'où mon hésitation à utiliser l'EEPROM.

L'interface de communication préférée sera I2C, mais d'autres alternatives sont les bienvenues.

Du haut de ma tête, j'imagine un circuit intégré de mémoire volatile à faible puissance SRAM avec la possibilité d'être alimenté par une batterie de secours comme une pile bouton lors des coupures de courant.

Cerezo
la source
15
Vous voulez une F-RAM.
Hearth
3
... et quelle est la question?
Curd
2
Que ferez-vous si l'alimentation tombe en panne au milieu d'une opération d'écriture I2C? Comment pouvez-vous être sûr de ne pas corrompre le décompte? Ce problème est plus difficile que vous ne le pensez, sauf si vous pouvez détecter une perte de puissance imminente, et dans ce cas, vous pouvez simplement copier votre compteur de base RAM dans une EEPROM typique.
Elliot Alderson
5
Quelle est la fréquence? Pour une seule variable, même une EEPROM de petite taille aurait une endurance assez stupide. Vous auriez également une sauvegarde des derniers décomptes x au cas où votre dernière écriture aurait échoué.
hekete
Je me souviens de certaines mémoires non FLASH EE à l'ancienne, promises à 100 millions de cycles.
analogsystemsrf

Réponses:

21

Trois types de mémoire non volatile correspondent à vos besoins, par ordre de taille disponible:

  • Usure EEPROM / FLASH nivelée.
  • Batterie de secours SRAM.
  • FRAM.

En termes de coût, FRAM est le meilleur. Tout ce dont vous avez besoin est à l'intérieur de la puce, y compris des condensateurs de sauvegarde pour terminer l'écriture. Cependant, les tailles disponibles sont faibles.
La batterie de secours SRAM est volumineuse et coûteuse en matériaux.
L'EEPROM avec niveau d'usure nécessite un micrologiciel pour gérer le niveau d'usure.

Jeroen3
la source
1
Merci. J'ai vérifié FRAM comme suggéré par @Hearth et je pense qu'il convient le mieux à mes besoins. J'espère juste que je peux trouver une variante I2C. De plus, la variable d'accumulateur ne doit avoir qu'une longueur de 32 bits. La taille n'est donc pas vraiment un gros problème.
Cerezo
3
@GH_eng I²C FRAM chips . Au fur et à mesure que la mémoire disparaît, c'est assez cher (étant une technologie relativement nouvelle), mais pour ce dont vous avez besoin, les alternatives coûteraient probablement plus cher.
Hearth
3
Il y a aussi MRAM
DKNguyen
1
@GH_eng La TI MSP430FR * a construit dans FRAM je pense. Bien que vous soyez peut-être déjà contraint quant à votre MCU.
detly
21

Voici ce que j'ai fait sur un produit encore en production de masse.

  • Conservez tous les paramètres et compteurs dans la RAM
  • Raccordez une ligne d'interruption à un détecteur de seuil de tension d'alimentation
  • Lorsque l'interruption se déclenche, éteignez tout ce qui consomme de l'énergie (la plupart des périphériques, LED, etc.) et sauvegardez toute la RAM pour la flasher.

Il s'est avéré qu'il y avait environ 10 à 20 ms de temps entre le déclencheur à basse tension et le moment où le circuit intégré de gestion de l'alimentation s'est déclenché et a tout arrêté (de manière ordonnée). Que cela fonctionne ou non dépend du stockage d'énergie dans votre alimentation électrique, mais même une petite alimentation peut ralentir suffisamment cela pour que vous puissiez écrire un petit ensemble de données de manière fiable.

Hilmar
la source
1
@ Hilmer C'est assez intelligent! Bon à savoir. Probablement un réservoir CAP placé avant les entrées d'EEPROM et MCU augmentera encore la latence temporelle. Seul inconvénient est probablement plus de composants sur le PCB.
Cerezo
À l'époque, c'était clairement la solution la moins chère, y compris l'immobilier PCB. Bien sûr, cela dépend de vos spécificités: nous avions une réserve, une ligne GPIO de rechange, donc c'était gratuit. Le reste n'était que quelques fèves à la gelée (petites pièces SMD peu coûteuses)
Hilmar
Vous pouvez probablement étirer ces 10-20 ms si vous en avez vraiment besoin en mettant un elcap dans la fourniture juste assez grand pour aider et pas trop gros pour avoir des effets secondaires gênants.
Mât
@Mast: ce serait probablement trop cher et vous pourriez être mieux avec une solution alternative
Hilmar
5

On dirait que vous pouvez simplement utiliser une puce ou un module d'horloge RTC. Ceux-ci ont une batterie de secours, une SRAM supplémentaire pour les données utilisateur et sont livrés avec une interface I2C.

Ou utilisez simplement un MCU avec SRAM alimenté par batterie, donc aucun composant externe n'est nécessaire.

Juste moi
la source
Par exemple DS1307, DS1338.
filo
1
Malheureusement, le RTCC utilisé sur la carte est un DS3231M. Même configuration de broches que DS1307 RTCC mais sans registres de données de rechange internes. A choisi cela en raison de son oscillateur intégré. Je sens une revue complète du circuit :(!
Cerezo
5

Cypress fait ce qu'ils appellent SRAM non volatile . Il s'agit d'une mémoire SRAM standard qui sauvegarde automatiquement en cas de panne de courant. Puisqu'il n'écrit que dans la mémoire non volatile en cas de panne de courant, sa durabilité est potentiellement beaucoup plus élevée. Il est disponible en versions série et parallèle. Cela peut être un peu exagéré, car le plus petit fait 64 Ko.

En fonctionnement normal, la nvSRAM se comporte comme une SRAM asynchrone conventionnelle utilisant des signaux et une synchronisation standard. nvSRAM effectue des lectures et des écritures parallèles à accès aléatoire aussi rapidement que 20 ns.

En cas de panne de courant, nvSRAM enregistre automatiquement une copie des données SRAM dans une mémoire non volatile, où les données sont protégées pendant plus de 20 ans. Le transfert entre SRAM et mémoire non volatile est complètement parallèle, permettant à l'opération de se terminer en 8 ms ou moins, sans aucune intervention de l'utilisateur.

À la mise sous tension, nvSRAM renvoie les données à la SRAM et le fonctionnement du système se poursuit là où il s'était arrêté. nvSRAM fournit également des commandes d'initiation STORE et RECALL commandées par l'utilisateur, ainsi qu'une commande STORE matérielle contrôlée par l'utilisateur dans la plupart des versions.

Diagramme de bloc NVSRAM

crj11
la source
ce truc est génial!
Tomachi
4

Pour une seule variable de 4 octets, l'EEPROM conviendrait parfaitement.

Disons que vous y écrivez une fois par seconde et que vous avez une EEPROM typique de 32 Ko et que nous allons avec une endurance conservatrice de 100 000 cycles d'écriture.

Vous pouvez écrire vos 4 octets 8000 fois avant de devoir effacer. Cela devrait donc être 800 millions de fois que vous pouvez l'écrire même en utilisant une estimation prudente.

Maintenant, il n'y a que 31,5 millions de secondes par an, donc à une écriture par seconde, il faudrait 25 ans pour atteindre l'estimation bas de gamme de l'endurance EEPROM.

hekete
la source
1
Bien sûr, l'écriture dans l'EEPROM est assez lente (millisecondes) donc les "écritures fréquentes" de l'OP pourraient avoir besoin d'une solution plus rapide ... vous l'avez supposé une fois par seconde mais OP nous a laissé dans l'ignorance sur ce point. Et «nettoyer» l'EEPROM prendra en effet un temps très, très long (en secondes). Je suppose que vous pouvez simplement écraser les anciennes valeurs au lieu de les effacer, mais si les valeurs de comptage ne sont pas strictement séquentielles, il serait difficile de déterminer quelle valeur était la dernière valeur écrite.
Elliot Alderson
@ElliotAlderson Vous pourriez probablement supposer que la valeur la plus élevée a été la dernière. Évidemment, aucune idée si une fois par seconde compte comme «fréquent» ou non dans ce cas. Je précise simplement que pour les fréquences d'écriture espacées de plus d'une seconde, l'EEPROM est toujours entièrement viable.
hekete
0

Il y a beaucoup d'options ici, mais le vrai problème est d'empêcher les données d'être corrompues. Une perte de puissance pendant une écriture pourrait corrompre les données. I2C est une bonne option pour éviter cela, car par exemple avec SPI, vous pouvez constater qu'une écriture apparaît (du point de vue de la mémoire) pour terminer à mi-chemin de la mise à jour, disons 4 octets d'un mot de 32 bits. I2C est un peu plus robuste, mais seulement un peu.

Mon conseil serait de stocker 4 copies de la valeur. De cette façon, même si l'écriture est interrompue, deux correspondront toujours.

FRAM ou similaire est probablement la meilleure option.

utilisateur
la source