Organizacja danych w EEPROM

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
W pewnym urządzeniu muszę zapisywać do 512 zdarzeń do pamięci EEPROM. Z tym
urządzeniem będzie się  
komunikować drugie, które kolejno będzie te dane odczytywać. Potrzebuję
więc dodatkowo zapisywać dwa  
wskaźniki zapisu i odczytu danych. EEPROM ma 1mln cykli zapisu, więc przy
standardowym zapisie (dane  
i wskaźniki zawsze pod tym samym adresem) zapiszę 1mln zdarzeń. Chciałbym
zwiększyć tą liczbę.  
EEPROMy są bardzo tanie, więc wykombinowałem że dam np. taki 8kB = 256 stron
* 32 bajty.
Dane (zdarzenia) zapisywałbym powiedzmy na 254 stronach a wskaźniki na dwóch
ostatnich stronach. No  
i pojawia się problem zapisu wskaźników. Najprostsze rozwiązanie jakie
przychodzi mi do głowy to na  
początku wyzerować całą stronę przeznaczoną na wskaźnik, i w momencie
zapisu/odczytu zapisywać  
wskaźnik po kolei w pamięci, a po dojściu do końca pamięci zerować całą
stronę i zapisywać od  
początku. Żeby odczytać wskaźniki, trzeba by szukać "wartownika" w postaci
0x0000 (adres 16 bitowy).  
Czas nie jest tu elementem krytycznych, ponieważ minimalny czas pomiędzy
wystąpieniem zdarzeń to  
400ms. Czy macie jakieś inne pomysły?

Re: Organizacja danych w EEPROM

Quoted text here. Click to load it
tym  
Quoted text here. Click to load it
wykombinowałem  
Quoted text here. Click to load it
odczytać  
Quoted text here. Click to load it

Sprawdź FRAM.
Nigdy nie używałem, ale o ile wiem to różnica jest taka:
EEPROM - zapisy go zużywają, czytać można dowolną ilość razy.
FRAM - zarówno zapisy jak i odczyty go zużywają, ale ilość tych zapisów  
odczytów jest ileś (nie wiem ile) razy większa od EEPROMów. Zapis jest chyba
 
tak samo szybki jak do RAM.
Jeszcze przed rokiem 2000 na targach Elektronika w Monachium widziałem taki  
pokaz że razem były męczone EEPROM i FRAM. EEPROM wysiadał chyba po  
kilkunastu minutach, a FRAM wytrzymywał cały dzień. Ale może wtedy to  
EEPROMy były gorsze niż teraz.
P.G.  


Re: Organizacja danych w EEPROM
W dniu 2013-06-06 12:35, Piotr Gałka pisze:
Quoted text here. Click to load it

FRAM to dobry trop. Zdecydowanie droższe rozwiązanie, ale w tym projekcie
mogę sobie na to pozwolić.  
Widzę że są F-RAMy z interfejsem I2C pinowo zgodne z AT24Cxx. W dokumentacji
FM24CL64 widnieje  
"Unlimited Read/Write Cycles". Trochę mnie to zaskoczyło.



Re: Organizacja danych w EEPROM

Quoted text here. Click to load it
tym  
Quoted text here. Click to load it
wykombinowałem  
Quoted text here. Click to load it
odczytać  
Quoted text here. Click to load it

Nie wiele to da ale może tak - zastosować pośrednie wskaźniki i lepiej  
wykorzystać pamięć.
Podzielić całą pamięć na umowne strony np. po 584 bajtów co daje 14
obszarów  
"umownych stron" i zajmuje 8176 bajtów
Pozostaje 16 poza stronami i w nich umieszczasz główny wskaźnik do umownej  
strony (Wskaźniki w przypadku rozjechania odczytu i zapisu między stronami)
Na początku każdej umownej strony masz 72 bajty na wskazniki w obszarze  
strony i licznik przepełnienia strony
Ja bym wpakował w pierwszych 4 bajtach strony dwa wskażniki "pośrednie" do  
miejsca zapisu i odczytu w obszarzes danej strony,
w następnych zależnie od przyjętej ilości zapisów jakie wytrzyma wskaznik  
tyle bajtów bym przeznaczył na zapisanie licznika przepełnien strony strony.  
Po określonej liczbie obiegów strony, zwiękaszamy wskaźnik główny  
jednocześnie przesuwamy sie ze wskażnikami o 4 pozycje w "prawo".  
Zostawiając po "lewej stronie zużyte komórki wskaźników pośrednich" i  
wykorzystujemy na wskaźniki pośrednie komórki dotychczas wykorzystywane na  
zapis licznika przepełnienia  strony
Znów po określonej liczbie obiegów strony powatarzamy zabieg zmiany w  
głównym wskaźniku i przesuwanie pośrednich wskażników w prawo i tak długo
aż  
uzamy że obszar strony nie nadaje się do użycia.

Po kolejnym zwiększeniu głównego wskaźnika przeskakujemy na następną
stronę  
i znów "uśmercamy" komórki w kolejnej umownej stronie.


Przyjmująć 1 mln cykli zapisu komórek jako górną granicę żywotności,
żeby  
każdą komórkę w obszarze strony zapisać 1 mln razy liczniki zapisały by
się  
512 mln razy.

A w tym wykonaniu, mając 72 bajty na liczniki, z czego  4 bajty na wskaźnik  
w obszarze strony i 3 lub 4 bajty na licznik przepełnienia stron możemy  
przesuwac się z licznikami 17 razy w prawą stronę, i zawsze mieć licznik  
zapisywany w miare świeżej komórce.

Wychodzi że każdą stronę można zapisać 1mln / 512 * 17 czyli około 33
tyś  
razy.

Można zmniejszyć ilość stron jednoćześnie zwiększajac obszar na liczniki
i  
uzyskac większą ilość zapisów.

Zostajew jeszcze drobny szczegół jeżeli zapis dochodzi do końca "żwywotu"  
strony to należy zadbać żeby odczyt nastąpił z właściwej strony. Może
trzeba  
by zastosować osobne zestawy wskaźników do zapisu i odczytu.

Cała idea polega na tym żeby przesuwac się ze wskaźnikami do coraz to nowych
 
komórek a położenie tych wskaźników wyliczać na podstawie jednego lub 2  
wskaźników głównych które będa na tyle rzadko zapisywane że nie powinny
się  
uszkodzić.

Z wyliczeń widać że ilość zapisów samych danych ni jak się ma do
maksymalnej  
wytrzymałości komórek. Wychodzi na to że należało by na wskaźniki  
przesnaczyć praktycznie cały obszar pamięci :/ pozostawiając jedna stronę
na  
same dane.

Tutaj masz wszystko wyliczane na podstawie odczytu kilku komórek z czego 2  
lub 4 pierwsze, któe musimy odzytać, znajdują się w stałym miejscu, a
reszta  
to dodawania i mnożenie.

Ale elaborat wysmarowałem ;) Myślę że nie walnąłem się w założeniach.

Pozdr. Gejzero




Re: Organizacja danych w EEPROM
W dniu 2013-06-06 15:01, Gejzero SQ3OGX pisze:
Quoted text here. Click to load it

Dziękuję! Ciekawy pomysł.




Re: Organizacja danych w EEPROM
W dniu 2013-06-06 10:49, Bool pisze:
Quoted text here. Click to load it
odczytać
Quoted text here. Click to load it

A zamiast używać wskaźników nie lepiej w danych trzymać informację, czy  
dany wpis był już odczytany? EEPROM można chyba przeprogramowywać z 1 na  
0 bez wywoływania wbudowanego mechanizmu kasowania, więc nie powinno to  
dodatkowo obciążać komórek. Żeby przyśpieszyć wyszukiwanie  
nieodczytanych wpisów wystarczy zbudować indeks/mapę (jednobitową) w  
RAMie procka po każdym starcie i pilnować, żeby był zsynchronizowany z  
danymi w trakcie pracy urządzenia.
Dodatkowo bloki danych możesz kolejno numerować, żeby wiedzieć który  
blok jest najstarszy i w pierwszej kolejności użyć go do zapisu nowych  
danych.




Re: Organizacja danych w EEPROM
W dniu 2013-06-06 15:29, Zbych pisze:
Quoted text here. Click to load it
dany wpis był już odczytany?
Quoted text here. Click to load it
mechanizmu kasowania, więc
Quoted text here. Click to load it
wyszukiwanie nieodczytanych wpisów
Quoted text here. Click to load it
starcie i pilnować, żeby był
Quoted text here. Click to load it
jest najstarszy i w
Quoted text here. Click to load it

Bardzo ciekawa koncepcja. Tym bardziej że ja potrzebuje tylko 4 bitów (mam 16
kanałów) żeby zapisać  
zdarzenie i pozostałe 4 się marnują (pakować danych nie mogę, muszę
zapisywać na bieżąco). Jeden bit  
mogę przeznaczyć na zapis odczytany/nie odczytany.


Site Timeline