Goto page 1, 2, 3 Next
EM
Guest
Sun Nov 16, 2008 2:11 pm
Witam
Robię projekt w którym pamięć EEPROM będzie narażona na częste
przepisywanie.
Ogólnie trwałość jest określona jako 10.000 - to niedużo jak na moje
zastosowanie.
Pomijając techniki zwiększania ilości zapisów stosując kolejne komórki
do zapisu mam pewne pytanie.
Potrzbuję zapisać do 8 stanów w jednej komórce. Czy zamiast zapisywać
jako kolejną liczbę, będę stosował zapis typu b'11111110' b'11111101'
tzn, zawsze będzie tylko jedno zero w bajcie, zwiększę ilość możliwych
zapisów?
Wydaje mi się, że komórka się zużywa zapisując 0 na danej pozycji. Czy
dobrze myślę? Może ktoś to potwierdzić?
--
Pozdrawiam
EM
Virus_7
Guest
Sun Nov 16, 2008 2:25 pm
EM pisze:
Quote:
Robię projekt w którym pamięć EEPROM będzie narażona na częste
przepisywanie.
Czy chcesz się zabezpieczyć przed utratą prądu?
Madz
Guest
Sun Nov 16, 2008 2:31 pm
Dnia Sun, 16 Nov 2008 14:11:49 +0100, EM napisał(a):
Quote:
Witam
Robię projekt w którym pamięć EEPROM będzie narażona na częste
przepisywanie.
Ogólnie trwałość jest określona jako 10.000 - to niedużo jak na moje
zastosowanie.
10 tysiecy cykli jest dla pamieci programu. EEPROM ma np. w atmegach na
pewno 100 tys cykli - nie wiem czy to cos dla Ciebie zmienia, ale jednak to
10 razy wiecej.
m.
EM
Guest
Sun Nov 16, 2008 2:37 pm
Madz pisze:
Quote:
Dnia Sun, 16 Nov 2008 14:11:49 +0100, EM napisał(a):
Witam
Robię projekt w którym pamięć EEPROM będzie narażona na częste
przepisywanie.
Ogólnie trwałość jest określona jako 10.000 - to niedużo jak na moje
zastosowanie.
10 tysiecy cykli jest dla pamieci programu. EEPROM ma np. w atmegach na
pewno 100 tys cykli - nie wiem czy to cos dla Ciebie zmienia, ale jednak to
10 razy wiecej.
m.
No racja, 100tyś. Ale to i tak nie za dużo. Dla porównania w PICach jest
1 milion, co prawda jest jeszcze kwestia co to oznacza.
Tak czy inaczej pozostaje kwestia pytania:
Quote:
Czy zamiast zapisywać jako kolejną liczbę, będę stosował zapis typu
b'11111110' b'11111101'
tzn, zawsze będzie tylko jedno zero w bajcie, zwiększę ilość możliwych
zapisów?
--
Pozdr
EM
Mirek
Guest
Sun Nov 16, 2008 2:57 pm
EM wrote:
Quote:
Czy zamiast zapisywać jako kolejną liczbę, będę stosował zapis typu
b'11111110' b'11111101'
Po prostu nie zapisuj, jeśli dana do zapisania się nie zmieniła.
Nie wiem co robisz, ale jeżeli potrzebujesz pamiętać szybko zmieniający
się parametr na wypadek zaniku zasilania, to albo weź większą pamięć
(np.24c512) i zapisuj kolejne komórki, albo zasilaj AVR-a z małego
akumulatorka (goldcap-a?) i zapisuj dopiero po wykryciu zaniku tego
głównego zasilania.
Osobiście miałem do czynienia z padniętą pamięcią w telewizorze, ale nie
miało to raczej znaczenia, która komórka ile razy była zapisywana - co
prawda najpierw nie dało się zapisać 1 programu, ale w krótkim czasie
nie dało się już żadnego.
Mirek.
EM
Guest
Sun Nov 16, 2008 3:22 pm
irek pisze:
Quote:
EM wrote:
Czy zamiast zapisywać jako kolejną liczbę, będę stosował zapis typu
b'11111110' b'11111101'
Po prostu nie zapisuj, jeśli dana do zapisania się nie zmieniła.
Nie wiem co robisz, ale jeżeli potrzebujesz pamiętać szybko zmieniający
się parametr na wypadek zaniku zasilania, to albo weź większą pamięć
(np.24c512) i zapisuj kolejne komórki, albo zasilaj AVR-a z małego
akumulatorka (goldcap-a?) i zapisuj dopiero po wykryciu zaniku tego
głównego zasilania.
Osobiście miałem do czynienia z padniętą pamięcią w telewizorze, ale nie
miało to raczej znaczenia, która komórka ile razy była zapisywana - co
prawda najpierw nie dało się zapisać 1 programu, ale w krótkim czasie
nie dało się już żadnego.
Nie chciałby podawać szczegółów projektu, ale jest kilka kryteriów.
1. Zapisywane jest za każdym razem co innego - sprawa oszczędzania
zapisuje, jeśli byłoby to samo do zapisania jest oczywista.
2. Nie ma miejsca na podtrzymanie zasilania, ani na zewnętrzną pamięć.
Na procek jest mało miejsca

.
Oczywiście technika wykorzystywania kolejnych komórek pamięci wydaje się
odpowiednia. Po prostu w jednej komórce zapiszę adres komórki z daną.
Jeśli w trakcie weryfikacji otrzymam błąd więcej niż 1 raz, to
inkrementuję adres i po sprawie. Poza implementacją kwestia jeszcze
sprawdzenia takiego algorytmu.
Pozdr
EM
Mirek
Guest
Sun Nov 16, 2008 3:37 pm
EM wrote:
Quote:
Poza implementacją kwestia jeszcze
sprawdzenia takiego algorytmu.
Koniecznie. Trzeba więc "zamordować" jedną komórkę eeproma i sprawdzić,
czy nie ma to wpływu na następne.
Mirek.
J.F.
Guest
Sun Nov 16, 2008 4:21 pm
On Sun, 16 Nov 2008 14:11:49 +0100, EM wrote:
Quote:
Potrzbuję zapisać do 8 stanów w jednej komórce. Czy zamiast zapisywać
jako kolejną liczbę, będę stosował zapis typu b'11111110' b'11111101'
tzn, zawsze będzie tylko jedno zero w bajcie, zwiększę ilość możliwych
zapisów?
Wydaje mi się, że komórka się zużywa zapisując 0 na danej pozycji. Czy
dobrze myślę? Może ktoś to potwierdzić?
Troche powatpiewam. Zuzywa sie chyba tez w czasie kasowania.
W starej technice UV EPROM moglbys cos pokombinowac zeby do komorki
skasowanej [FF] wpisac jedno zero [FE], nastepnie bez kasowania
zaprogramowac kolejne zero [FD] - odczytaja sie juz dwa [FC].
I dopiero za 8-mym razem skasowac calosc.
Ale przeciez w AVR nie masz dostepu na takim poziomie..
J.
J.F.
Guest
Sun Nov 16, 2008 4:24 pm
On Sun, 16 Nov 2008 15:22:39 +0100, EM wrote:
Quote:
Oczywiście technika wykorzystywania kolejnych komórek pamięci wydaje się
odpowiednia. Po prostu w jednej komórce zapiszę adres komórki z daną.
Jeśli w trakcie weryfikacji otrzymam błąd więcej niż 1 raz, to
inkrementuję adres i po sprawie.
Mozesz miec problem ze weryfikacja przechodzi poprawnie,
a pozniejszy odczyt przy innym napieciu, temperaturze itp
juz nie.
Raczej od poczatku bym rozrzucal zapisy .. tylko ze wtedy nie mozna
w jednej komorce zapisywac ktory jest dobry :-)
J.
Jarosław Sokołowski
Guest
Sun Nov 16, 2008 6:46 pm
Pan J.F napisał:
Quote:
Oczywiście technika wykorzystywania kolejnych komórek pamięci wydaje się
odpowiednia. Po prostu w jednej komórce zapiszę adres komórki z daną.
Jeśli w trakcie weryfikacji otrzymam błąd więcej niż 1 raz, to
inkrementuję adres i po sprawie.
Mozesz miec problem ze weryfikacja przechodzi poprawnie,
a pozniejszy odczyt przy innym napieciu, temperaturze itp
juz nie.
Raczej od poczatku bym rozrzucal zapisy .. tylko ze wtedy nie mozna
w jednej komorce zapisywac ktory jest dobry
W praktyce rozwiązuje się to w ten sposób, że w komórkach tablicy
przeznaczonej do tego zapisu, jeden bit przeznacza się na wskaźnik
ważności danych. Komórka "dobra" to ta, która ma ten bit taki sam
jak w komórce pierwszej (zerowej) i jednocześnie najwyższy indeks
w tablicy. Rezerwując na przykład tablicę o rozmiarze 32, otrzymamy
32-krotny wzrost żywotności ustrojstwa. Kosztem wydłużenia dostępu
do danych w niekturych sytuacjach. Średnio 16 razy i maksymalnie
32 razy.
Dawno temu, z dziesięć lat albo i więcej, miałem do czynienia
z jakimiś pierwszymi wersjami procesorów z nieulotną pamięcią.
Ile cykli miały wytrzymywać, to nie było istotne, chodziło o zapis
danych kalibracyjnych urządzenia. Tyle że sam zapis im średnio
wychodził, bo raz na ileś przypadków dane były przekłamane. Stanęło
na tym, że ważność danych zostanie rozstrzygnięta demokratycnie
przez głosowanie. Koder dostał wytyczne, że ma zapisywać stałe
w kilku komórkach, a przy odczycie porównywać je ze sobą i brać
ten odczyt, który przeważa. Urządzenia działają do dzisiaj.
--
Jarek
T.M.F.
Guest
Sun Nov 16, 2008 7:48 pm
Quote:
Potrzbuję zapisać do 8 stanów w jednej komórce. Czy zamiast zapisywać
jako kolejną liczbę, będę stosował zapis typu b'11111110' b'11111101'
tzn, zawsze będzie tylko jedno zero w bajcie, zwiększę ilość możliwych
zapisów?
Wydaje mi się, że komórka się zużywa zapisując 0 na danej pozycji. Czy
dobrze myślę? Może ktoś to potwierdzić?
Troche powatpiewam. Zuzywa sie chyba tez w czasie kasowania.
W starej technice UV EPROM moglbys cos pokombinowac zeby do komorki
skasowanej [FF] wpisac jedno zero [FE], nastepnie bez kasowania
zaprogramowac kolejne zero [FD] - odczytaja sie juz dwa [FC].
I dopiero za 8-mym razem skasowac calosc.
Ale przeciez w AVR nie masz dostepu na takim poziomie..
Ten myk dziala w AVR rowniez. Kolejne zerowania bitow bez kasowania w
miedzyczasie komorki traktowane sa jako jeden zapis.
--
Inteligentny dom -
http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.
Artur M. Piwko
Guest
Sun Nov 16, 2008 10:46 pm
In the darkest hour on Sun, 16 Nov 2008 14:37:19 +0100,
EM <edim123@poczta.onet.pl> screamed:
Quote:
10 tysiecy cykli jest dla pamieci programu. EEPROM ma np. w atmegach na
pewno 100 tys cykli - nie wiem czy to cos dla Ciebie zmienia, ale jednak to
10 razy wiecej.
No racja, 100tyś. Ale to i tak nie za dużo. Dla porównania w PICach jest
1 milion, co prawda jest jeszcze kwestia co to oznacza.
Zawsze możesz użyć FRAM. 10^12 cykli.
--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:219B ]
[ 21:50:40 user up 11893 days, 9:45, 1 user, load average: 0.75, 0.00, 0.80 ]
Don't hit the keys so hard, it hurts.
Tom
Guest
Sun Nov 16, 2008 11:14 pm
EM wrote:
.........
Quote:
Oczywiście technika wykorzystywania kolejnych komórek pamięci wydaje się
odpowiednia. Po prostu w jednej komórce zapiszę adres komórki z daną.
Jeśli w trakcie weryfikacji otrzymam błąd więcej niż 1 raz, to
inkrementuję adres i po sprawie. Poza implementacją kwestia jeszcze
sprawdzenia takiego algorytmu.
W ten sposob ubijesz najszybciej ta komorke co pamieta adres. Ja bym po
prostu zapisywal kazdy nowy bajt do nastepnej komorki, przy czytaniu
czytalbym az do FF i wtedy wiadomo ze w poprzedniej byl najbardziej
aktualnuy bajt. Jak dojdziesz do konca to kasujesz calego EEPROMA i
zaczynasz od poczatku.
Tomek
Konop
Guest
Sun Nov 16, 2008 11:52 pm
Quote:
Oczywiście technika wykorzystywania kolejnych komórek pamięci wydaje
się odpowiednia. Po prostu w jednej komórce zapiszę adres komórki z
daną. Jeśli w trakcie weryfikacji otrzymam błąd więcej niż 1 raz, to
W ten sposob ubijesz najszybciej ta komorke co pamieta adres. Ja bym po
Pomyśl... komórka "z adresem poprawnej danej" nie będzie zapamiętywana
CO CHWILĘ, tylko w momencie zmiany starej komórki na nową... jak stara
komórka "padnie", to wybierana jest nowa i adres tej nowej jest
zapisywany... przykładowo, dla pamięci o pojemności 256 bajtów pierwsza
komórka będzie zapisana 256 razy

... a właściwie 255 (bo tyle jest
komórek przeznaczonych na dane)
Pozdrawiam
Konop
Konop
Guest
Sun Nov 16, 2008 11:55 pm
Quote:
W praktyce rozwiązuje się to w ten sposób, że w komórkach tablicy
przeznaczonej do tego zapisu, jeden bit przeznacza się na wskaźnik
ważności danych. Komórka "dobra" to ta, która ma ten bit taki sam
jak w komórce pierwszej (zerowej) i jednocześnie najwyższy indeks
w tablicy. Rezerwując na przykład tablicę o rozmiarze 32, otrzymamy
32-krotny wzrost żywotności ustrojstwa. Kosztem wydłużenia dostępu
do danych w niekturych sytuacjach. Średnio 16 razy i maksymalnie
32 razy.
Ale uwzględniając to, że problem można rozwiązać tak, że w EEPROMie
tworzona jest tylko "kopia zapasowa" jakiś danych, to właściwą daną
trzymamy w RAMie i nie musimy nic z EEPROMa odczytywać!! Liczymy sobie
adres, inkrementujemy po każdym zapisie, a zapisujemy po jednym bajcie

... i tyle

... po restarcie faktycznie trzeba sięgnąć do EEPROMa,
ale skoro tylko po restarcie, to chyba nieco wydłużony czas nie gra roli

...
Pozdrawiam
Konop
Goto page 1, 2, 3 Next