Potrzebujesz nieulotnej pamięci IC z prawie nieograniczonymi możliwościami odczytu / zapisu

12

Potrzebuję rozwiązania pamięci, które będzie wykorzystywane do śledzenia skumulowanej liczby projektów opartych na mikrokontrolerach.

Przez skumulowaną liczbę mam na myśli to, że mikrokontroler używa tej lokalizacji pamięci do prowadzenia zliczania wystąpienia zdarzenia. Licznik musi być zachowany podczas przerw w dostawie prądu, stąd potrzeba pamięci NIEOBCIĄŻNEJ.

Również częste występowanie inkrementacji jest częste, dlatego w pamięci będzie dużo zapisów, dlatego waham się przed użyciem pamięci EEPROM.

Preferowanym interfejsem komunikacyjnym będzie I2C, ale inne alternatywy są mile widziane.

Z czubka głowy wyobrażam sobie układ pamięci lotnej SRAM o niskiej mocy z opcją zasilania z rezerwowej baterii, takiej jak ogniwo monety po wyłączeniu zasilania.

Cerezo
źródło
15
Chcesz F-RAM.
Hearth
3
... i jakie jest pytanie?
Curd
2
Co zrobisz, jeśli zasilanie zacznie zanikać w trakcie operacji zapisu I2C? Jak możesz być pewien, że nie zepsujesz liczby? Ten problem jest trudniejszy, niż myślisz, chyba że możesz wykryć nieuchronną utratę zasilania, aw takim przypadku możesz po prostu skopiować licznik bazy pamięci RAM do typowej pamięci EEPROM.
Elliot Alderson
5
Jak często występuje „częstość”? W przypadku jednej zmiennej nawet niewielka pamięć EEPROM miałaby dość głupio wysoką wytrzymałość. Będziesz mieć również kopię zapasową ostatnich x zliczeń na wypadek, gdyby twój ostatni zapis się nie powiódł.
hekete
Pamiętam, że niektóre wspomnienia w innym stylu niż FLASH EE obiecały 100 milionów cykli.
analogsystemsrf

Odpowiedzi:

21

Trzy typy pamięci nieulotnej odpowiadają twoim potrzebom, w kolejności dostępnego rozmiaru:

  • Zużycie wyrównane EEPROM / FLASH.
  • Zasilanie bateryjne SRAM.
  • FRAM.

Pod względem kosztów FRAM jest najlepsza. Wszystko, czego potrzebujesz, to wnętrze układu, w tym kondensatory zapasowe do ukończenia zapisu. Dostępne rozmiary są jednak niskie.
Zasilanie bateryjne SRAM jest duże i kosztowne materiałowo.
EEPROM z wyrównaniem zużycia wymaga oprogramowania wewnętrznego do obsługi wyrównywania zużycia.

Jeroen3
źródło
1
Dzięki. Sprawdziłem FRAM zgodnie z sugestią @Hearth i myślę, że najlepiej odpowiada moim potrzebom. Mam tylko nadzieję, że uda mi się znaleźć wariant I2C. Również zmienna akumulatora musi mieć tylko 32 bity. Więc rozmiar nie jest tak naprawdę dużym problemem.
Cerezo
3
@GH_eng I²C FRAM chips . Z biegiem czasu pamięć jest dość droga (jest to stosunkowo nowa technologia), ale dla tego, czego potrzebujesz, alternatywy prawdopodobnie kosztowałyby więcej.
Hearth
3
Jest także MRAM
DKNguyen
1
@GH_pl TI MSP430FR * mają wbudowaną pamięć FRAM. Chociaż możesz już być ograniczony co do MCU.
detly
21

Oto, co zrobiłem z produktem, który wciąż jest produkowany seryjnie.

  • Zachowaj wszystkie parametry i liczniki w pamięci RAM
  • Podłączyć linię przerwania do detektora progu napięcia zasilania
  • Po uruchomieniu przerwania wyłącz wszystko, co zużywa energię (większość urządzeń peryferyjnych, diody LED itp.), I wykonaj kopię zapasową całej pamięci RAM, aby flashować.

Okazuje się, że między wyzwalaczem niskiego napięcia a czasem, gdy układ zarządzania energią uruchomił i zamknął wszystko (w uporządkowany sposób), upłynęło około 10-20 ms. To, czy to działa, czy nie, zależy od magazynowania energii w twoim zasilaczu, ale nawet niewielki zasilacz może spowolnić to na tyle, abyś mógł niezawodnie zapisać mały zestaw danych.

Hilmar
źródło
1
@Hilmer To całkiem sprytne! Dobrze wiedzieć. Prawdopodobnie zbiornik CAP umieszczony przed wejściami EEPROM i MCU dodatkowo zwiększy opóźnienie czasowe. Jedynym minusem jest prawdopodobnie więcej elementów na płytce drukowanej.
Cerezo,
W tym czasie było to zdecydowanie najtańsze rozwiązanie obejmujące nieruchomości na PCB. Oczywiście zależy to od twoich szczegółów: mieliśmy zapasowy mieliśmy zapasową linię GPIO, więc to było darmowe. Reszta to tylko kilka żelków (małe niedrogie części SMD)
Hilmar
Prawdopodobnie możesz rozciągnąć to 10-20 ms, jeśli naprawdę musisz, umieszczając elcap w zapasie wystarczająco dużym, aby pomóc, i nie za dużym, aby mieć kłopotliwe skutki uboczne.
Mast
@Mast: prawdopodobnie byłoby to zbyt drogie i może być lepiej z alternatywnym rozwiązaniem
Hilmar
5

Wygląda na to, że możesz po prostu użyć układu lub modułu zegara RTC. Mają one podtrzymanie bateryjne, dodatkową pamięć SRAM na dane użytkownika i są wyposażone w interfejs I2C.

Lub po prostu użyj MCU z zasilaną bateryjnie pamięcią SRAM, więc nie potrzebujesz żadnych zewnętrznych komponentów.

Tylko ja
źródło
Na przykład DS1307, DS1338.
filo
1
Niestety RTCC zastosowany na płycie to DS3231M. Taka sama konfiguracja pinów jak DS1307 RTCC, ale bez wewnętrznych rejestrów zapasowych danych. Wybierz to ze względu na zintegrowany oscylator. Wyczuwam pełną recenzję obwodu :(!
Cerezo
5

Cypress robi to, co nazywają nieulotną SRAM . Jest to standardowa pamięć SRAM, która automatycznie wykonuje kopię zapasową w przypadku awarii zasilania. Ponieważ zapisuje tylko w pamięci nieulotnej w przypadku awarii zasilania, ma potencjalnie znacznie większą trwałość. Występuje w wersjach szeregowych i równoległych. Może to być nieco przesada, ponieważ najmniejsza to 64 KB.

Podczas normalnej pracy nvSRAM zachowuje się jak konwencjonalna asynchroniczna SRAM przy użyciu standardowych sygnałów i taktowania. nvSRAM wykonuje równoległe odczyty losowego dostępu i zapisuje tak szybko, jak 20 ns.

W przypadku awarii zasilania nvSRAM automatycznie zapisuje kopię danych SRAM w nieulotnej pamięci, gdzie dane są chronione przez ponad 20 lat. Transfer między pamięcią SRAM a pamięcią nieulotną jest całkowicie równoległy, co pozwala na zakończenie operacji w ciągu 8 ms lub mniej bez interwencji użytkownika.

Po włączeniu nvSRAM zwraca dane z powrotem do SRAM, a system kontynuuje pracę od miejsca, w którym został przerwany. nvSRAM udostępnia również sterowane przez użytkownika polecenia STORE i RECALL inicjacji, a także sterowane przez użytkownika sprzętowe STORE w większości wersji.

Schemat blokowy NVSRAM

crj11
źródło
2
Microchip ma podobne produkty.
duskwuff -inactive-
te rzeczy są genialne!
Tomachi
4

Dla pojedynczej zmiennej 4-bajtowej pamięć EEPROM byłaby całkowicie w porządku.

Powiedzmy, że piszesz do niego raz na sekundę i masz typową pamięć EEPROM o pojemności 32 KB, a my zachowujemy konserwatywną wytrzymałość wynoszącą 100 000 cykli zapisu.

Możesz napisać 4 bajty 8000 razy, zanim będziesz musiał wyczyścić. Powinno to być 800 milionów razy, że można to napisać nawet przy użyciu ostrożnych szacunków.

Teraz jest tylko 31,5 miliona sekund w ciągu roku, więc po napisaniu sekundy zajęłoby 25 lat, aby osiągnąć najniższy poziom wytrzymałości EEPROM.

hekete
źródło
1
Oczywiście pisanie do EEPROM jest dość powolne (milisekundy), więc „częste zapisywanie” OP może wymagać szybszego rozwiązania ... zakładałeś, że raz na sekundę, ale OP pozostawił nas w tej kwestii w ciemności. A „wyczyszczenie” pamięci EEPROM zajmie naprawdę bardzo, bardzo długo (sekundy). Przypuszczam, że możesz po prostu zastąpić stare wartości zamiast kasować, ale jeśli wartości liczenia nie są ściśle sekwencyjne, trudno byłoby ustalić, która wartość była ostatnią zapisaną wartością.
Elliot Alderson
@ElliotAlderson Prawdopodobnie możesz założyć, że najwyższa wartość byłaby ostatnią. Oczywiście nie ma pojęcia, czy w tym przypadku raz na sekundę liczy się jako „częste”, czy też nie. Po prostu wskazując, że dla częstotliwości zapisu w odstępie dłuższym niż 1 sekunda, EEPROM jest nadal całkowicie opłacalny.
hekete
0

Jest tu wiele opcji, ale prawdziwym problemem jest powstrzymanie danych przed uszkodzeniem. Utrata zasilania podczas zapisu może uszkodzić dane. I2C jest dobrą opcją, aby tego uniknąć, ponieważ np. W SPI można zauważyć, że pojawia się zapis (z punktu widzenia pamięci) w celu ukończenia w połowie aktualizacji np. 4 bajtów 32-bitowego słowa. I2C jest trochę bardziej solidny, ale tylko trochę.

Radzę przechowywać 4 kopie tej wartości. W ten sposób, nawet jeśli zapis zostanie przerwany, dwa zawsze będą pasować.

FRAM lub podobny jest prawdopodobnie najlepszą opcją.

użytkownik
źródło