Fråga:
Behöver en icke-flyktig minnes-IC med nästan obegränsad läs- / skrivfunktion
Cerezo
2019-07-05 18:28:31 UTC
view on stackexchange narkive permalink

Jag behöver en minneslösning som ska användas för att hålla reda på en ackumulerad räkning på ett mikrokontrollerbaserat projekt.

Med ackumulerad räkning menar jag att mikrokontrollern använder denna minnesplats för att hålla räkningen av förekomsten av en händelse.Räkningen måste bevaras under strömavbrott, därav behovet av icke-flyktigt minne.

Även förekomsten av händelsen för räkningsökningen är frekvent, därför kommer det att finnas många skrivningar i minnet, därför tvekar jag att använda EEPROM.

Det föredragna kommunikationsgränssnittet är I2C, men andra alternativ är välkomna.

Från toppen av mitt huvud ser jag för mig en SRAM-flyktig minnes-IC med låg effekt med möjlighet att drivas av ett reservbatteri som en myntcell vid avstängningar.

Du vill ha F-RAM.
... och vad är frågan?
Vad gör du om strömmen börjar misslyckas mitt i en I2C-skrivoperation?Hur kan du vara säker på att du inte skadar räkningen?Det här problemet är svårare än du tror, såvida du inte kan upptäcka överhängande strömförlust, och i så fall kan du bara kopiera din RAM-basräknare till en typisk EEPROM.
Hur "frekvent" är frekvent?För en enda variabel skulle även en liten EEPROM ha ganska dumt hög uthållighet.Du skulle också ha en säkerhetskopia av de senaste x-räkningarna om din senaste skrivning misslyckades.
Jag minns några gamla stil som inte är FLASH EE lovade 100 miljoner cykler.
@analogsystemsrf Det kanske inte är så mycket.Att uppdateringarna är "frekventa" kan innebära 10000 uppdateringar per sekund eller så.Året cirka 31 miljoner sekunder.Tre år kanske inte räcker.
Sju svar:
Jeroen3
2019-07-05 18:36:46 UTC
view on stackexchange narkive permalink

Tre icke-flyktiga minnestyper matchar dina behov, i ordning efter tillgänglig storlek:

  • Slitnivå EEPROM / FLASH.
  • Batteribackup SRAM.
  • FRAM.

När det gäller kostnad är FRAM bäst.Allt du behöver är inuti chipet, inklusive reservkondensatorer för att slutföra skrivningen.Men tillgängliga storlekar är låga.
Batteribackup SRAM är stort och kostsamt i material.
Slitnivå EEPROM kräver firmware för att hantera slitnivelleringen.

Tack.Jag kollade ut FRAM som @Hearth föreslog och jag tycker att det bäst passar mina behov.Hoppas bara att jag kan hitta en I2C-variant.Ackumulatorvariabeln behöver också bara vara 32 bitar lång.Så storlek är egentligen inte ett stort problem.
@GH_eng [I²C FRAM-chips] (https://www.digikey.com/products/en/integrated-circuits-ics/memory/774?k=&pkeyword=&sv=0&pv2043=2&sf=1&FV=ffe00306%2Cf040013&quantort=&0= 1 & sidstorlek = 25).Som minne går är det ganska dyrt (att vara en relativt ny teknik), men för vad du behöver skulle alternativen förmodligen kosta mer.
Det finns också MRAM
@GH_eng TI MSP430FR * har inbyggt FRAM tror jag.Även om du kanske redan är begränsad till din MCU.
Hilmar
2019-07-05 20:56:40 UTC
view on stackexchange narkive permalink

Här är vad jag gjorde på en produkt som fortfarande är i massproduktion.

  • Behåll alla parametrar och räknare i RAM
  • Anslut en avbrottsledning till en tröskeldetektor för strömförsörjning
  • När avbrottet utlöses, stäng av allt som förbrukar ström (de flesta kringutrustning, lysdioder osv.) och säkerhetskopiera allt RAM-minne för att blinka.

Det visade sig att det var ungefär 10-20 ms tid mellan lågspänningsutlösaren och den tid då strömhanterings-IC sparkade in och stängde av allt (på ett ordnat sätt).Oavsett om detta fungerar eller inte beror på energilagringen i din strömförsörjning, men även en liten leverans kan sakta ner detta så att du kan skriva en liten datamängd på ett tillförlitligt sätt.

@Hilmer Det är ganska smart!Bra att veta.Förmodligen kommer en reservoar CAP placerad före ingångarna till EEPROM och MCU att öka tidsfördröjningen ytterligare.Enda nackdelen är förmodligen fler komponenter på kretskortet.
Vid den tiden var det helt klart den billigaste lösningen inklusive PCB-fastigheter.Naturligtvis beror det på dina detaljer: vi hade ett reserv hade en reserv GPIO-linje, så det var gratis.Resten var bara några gelébönor (små billiga SMD-delar)
Du kan förmodligen sträcka 10-20ms om du verkligen måste genom att sätta en elcap i utbudet bara tillräckligt stor för att hjälpa och inte för stor för att ha besvärliga biverkningar.
@Mast: som förmodligen skulle vara för dyrt och det kan vara bättre med en alternativ lösning
Joseph Sible-Reinstate Monica
2019-07-06 07:51:47 UTC
view on stackexchange narkive permalink

Toggle MRAM (magnetoresistivt RAM) påstås ha en effektiv oändlig skrivhållfasthet (de är inte medvetna om någon mekanism som skulle få skrivet att slita ut det).Jag känner dock inte till några sådana marker som talar I2C, så du måste nöja dig med SPI.Här är en sådan del: https://www.digikey.com/product-detail/en/everspin-technologies-inc/MR25H256ACDF/819-1064-ND/8286370

Justme
2019-07-05 18:49:38 UTC
view on stackexchange narkive permalink

Det låter som om du bara kan använda ett RTC-klockchip eller -modul.Dessa har backup av batteri, extra SRAM för användardata och levereras med I2C-gränssnitt.

Eller använd bara en MCU med batteribaserad SRAM till att börja med, så inga externa komponenter behövs.

Till exempel DS1307, DS1338.
Tyvärr är RTCC som används på kortet en DS3231M.Samma stiftkonfiguration som DS1307 RTCC men utan interna reservdataregister.Välj detta på grund av dess integrerade oscillator.Jag känner en komplett kretsgranskning :(!
crj11
2019-07-06 05:33:20 UTC
view on stackexchange narkive permalink

Cypress gör vad de kallar Nonvolatile SRAM. Det är standard SRAM som automatiskt säkerhetskopieras när strömmen går sönder. Eftersom det bara skriver till det icke-flyktiga minnet om strömavbrott har det potentiellt mycket större hållbarhet. Den finns i serie- och parallellversioner. Det kan vara lite överdrivet, eftersom den minsta är 64 kB.

Under normal drift beter sig nvSRAM som en konventionell asynkron SRAM med standardsignaler och timing. nvSRAM utför parallella slumpmässiga läsningar och skriver så snabbt som 20 ns.

Vid strömavbrott sparar nvSRAM automatiskt en kopia av SRAM-data i icke-flyktigt minne, där data skyddas i över 20 år. Överföringen mellan SRAM och det icke-flyktiga minnet är helt parallellt, vilket gör att operationen kan slutföras på 8 ms eller mindre, utan användarens ingripande.

Vid uppstart returnerar nvSRAM data tillbaka till SRAM och systemdriften fortsätter från den plats där den slutade. nvSRAM tillhandahåller också användarkontrollerade programvarukommandon STORE och RECALL samt ett användarkontrollerat hårdvarukommando i de flesta versioner.

NVSRAM Block Diagram

[Microchip har några liknande produkter.] (Https://www.microchip.com/design-centers/memory/serial-sram-serial-nvsram)
de sakerna är lysande!
hekete
2019-07-05 20:36:45 UTC
view on stackexchange narkive permalink

För en enda variabel med 4 byte skulle EEPROM vara helt bra.

Låt oss säga att du skriver till det en gång per sekund och att du har en typisk 32Kb EEPROM och vi går med en konservativ uthållighet på 100.000 skrivcykler.

Du kan skriva dina 4 byte 8000 gånger innan du behöver göra en rensning.Så det borde vara 800 miljoner gånger att du kan skriva det även med en försiktig uppskattning.

Nu är det bara 31,5 miljoner sekunder på ett år, så på en skriv en sekund kommer det att ta 25 år att nå den slutliga uppskattningen av EEPROM-uthållighet.

Naturligtvis är det ganska långsamt att skriva till EEPROM (millisekunder) så OP: s "frekventa skrivningar" kan behöva en snabbare lösning ... du har antagit en gång per sekund men OP lämnade oss i mörkret på den punkten.Och att "rensa" EEPROM tar verkligen mycket, mycket lång tid (sekunder).Jag antar att du bara kunde skriva över gamla värden istället för att radera, men om räknarvärdena inte är strikt sekventiella skulle det vara svårt att räkna ut vilket värde som var det senast skrivna värdet.
@ElliotAlderson Du kan antagligen anta att det som någonsin var det högsta värdet skulle vara det sista.Uppenbarligen ingen aning om en gång per sekund räknas som "frekvent" eller inte i det här fallet.Bara påpekar att för skrivfrekvenser med mer än 1 sekunders mellanrum är EEPROM fortfarande helt livskraftigt.
user
2019-07-09 21:20:53 UTC
view on stackexchange narkive permalink

Det finns gott om alternativ här, men det verkliga problemet är att förhindra att data blir skadade.Strömförlust under en skrivning kan skada data.I2C är ett bra alternativ för att undvika detta, eftersom t.ex.med SPI kan du upptäcka att en skrivning visas (ur minnets synvinkel) för att slutföra halvvägs genom att uppdatera säg 4 byte av ett 32-bitars ord.I2C är lite mer robust men bara lite.

Mitt råd skulle vara att lagra 4 exemplar av värdet.Även om skrivningen avbryts kommer två alltid att matcha.

FRAM eller liknande är förmodligen det bästa alternativet.



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 4.0-licensen som det distribueras under.
Loading...