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.
Odpowiedzi:
Trzy typy pamięci nieulotnej odpowiadają twoim potrzebom, w kolejności dostępnego rozmiaru:
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.
źródło
Oto, co zrobiłem z produktem, który wciąż jest produkowany seryjnie.
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.
źródło
Twierdzenie, że Toggle MRAM (magnetooporowa pamięć RAM) ma efektywnie nieskończoną wytrzymałość na zapis (nie są świadomi żadnego mechanizmu, który spowodowałby, że zapis zużyłby się). Nie znam jednak takich układów, które mówią I2C, więc musisz zadowolić się SPI. Oto jedna taka część: https://www.digikey.com/product-detail/en/everspin-technologies-inc/MR25H256ACDF/819-1064-ND/8286370
źródło
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.
źródło
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.
źródło
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.
źródło
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ą.
źródło