Goto page Previous 1, 2, 3 Next
Konop
Guest
Sun Nov 16, 2008 11:57 pm
To ja tak powiem o jednym problemie... kiedyś pisali w notach
katalogowych o pewnym problemie, który występował przy zapisie do
EEPROMu... otóż zdarzało się, że w jeśli w czasie zapisu był problemy z
zasilaniem, to uszkadzana była zawartość komórki o adresie 0... sprawdź,
czy dalej coś takiego piszą, jeśli tak - to unikaj jak ognia tej komórki

...
Pozdrawiam
Konop
Konop
Guest
Mon Nov 17, 2008 12:16 am
Quote:
do danych w niekturych sytuacjach. Średnio 16 razy i maksymalnie
A niby dlaczego napisałem o "niektórych sytuacjach"? Te niektóre,
to na pewno restart. Ale inne, mniej oczywiste, też mogą się trafić.
A tak w ogóle, to problem czasu odczytu nie powinien być dokuczliwy.
Nie, Ty pisałeś o niekturych sytuacjach



...
Adam Dybkowski
Guest
Mon Nov 17, 2008 12:33 am
EM pisze:
Quote:
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.
Użyj zewnętrznej kostki pamięci NVRAM albo ferrytowej. Wystarczyłaby
jedna z tych:
http://www.ramtron.com/products/nonvolatile-memory/serial.aspx
Ceny są całkiem przystępne. Pamięć FRAM 4kb 3V w obudowie SO8 kosztuje
około 3zł. Ilość zapisów praktycznie nieograniczona, zawartość nie znika
po wyłączeniu zasilania:
http://www.tme.eu/pl/katalog/pamieci-fram_100424/?id_producer=125
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Jarosław Sokołowski
Guest
Mon Nov 17, 2008 12:46 am
Konop napisał:
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

...
A niby dlaczego napisałem o "niektórych sytuacjach"? Te niektóre,
to na pewno restart. Ale inne, mniej oczywiste, też mogą się trafić.
A tak w ogóle, to problem czasu odczytu nie powinien być dokuczliwy.
--
Jarek
Jaroslaw Berezowski
Guest
Mon Nov 17, 2008 1:35 am
Dnia Mon, 17 Nov 2008 00:33:24 +0100, Adam Dybkowski napisał(a):
Quote:
na ekstra kosci.
--
Jaroslaw "Jaros" Berezowski
EM
Guest
Mon Nov 17, 2008 8:01 am
Quote:
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.
Ciekawe spostrzeżenie, możesz coś rozwinąć temat, podać źródło informacji?
--
Pozdr
EM
EM
Guest
Mon Nov 17, 2008 8:05 am
Quote:
Właśnie. Sprawa miejsca jest bardzo ważna. Wcześniej stosowałem do tego
PIC10F w SOT23. Niestety on nie ma EEPROM, muszę się przesiąść na coś, co
ma. Padło na AVR, bo lepiej znam, mam kompilator, poza tym ten ma akurat
pomiar temperatury w sobie.
--
Pozdr
EM
EM
Guest
Mon Nov 17, 2008 8:08 am
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.
Tutaj pojawi się podobny problem
Quote:
Mozesz miec problem ze weryfikacja przechodzi poprawnie,
a pozniejszy odczyt przy innym napieciu, temperaturze itp
juz nie.
--
Pozdr
EM
EM
Guest
Mon Nov 17, 2008 8:17 am
Użytkownik "Konop" <konoppo@gazeta.pl> napisał w wiadomości
news:gfq8g1$gna$3@inews.gazeta.pl...
Quote:
To ja tak powiem o jednym problemie... kiedyś pisali w notach katalogowych
o pewnym problemie, który występował przy zapisie do EEPROMu... otóż
zdarzało się, że w jeśli w czasie zapisu był problemy z zasilaniem, to
uszkadzana była zawartość komórki o adresie 0... sprawdź, czy dalej coś
takiego piszą, jeśli tak - to unikaj jak ognia tej komórki

...
Pamiętam, gdy były o tym zapisy. Niedwano szukałem wzmianki o tym i nie
mogłem znaleźć, ale nadal komórki 00 nie używam.
Ciekaw jestem jeszcze jak objawia się uszkdzona komórka? Czy trudności
polegają na odczytaniu 1 zamiast zera, które było zapisane?
Ogólnie u mnie zapis nie jest jakiś super-krytyczny. To jest zapis
ostatniego stanu pracy, który ma być cykliczny po każdym załaczeniu
zasilania. Jeśli raz na tysiąc taka dana przepadnie nic się nie stanie, a
procedura wyzeruje ten stan. Po prostu przy kazdym załączeniu zapamiętuję
następny stan jaki ma nastąpić, ewentualnie w wyniku działania użytkownika,
jeszcze ten stan zmienić. Nie mam za bardzo miejsca na żadne sprawdzanie czy
zasilanie się nie wyłączyło, podtrzymanie kondensatorem, itp.
Wymagana trwałość - np. 2 miliony cykli.
--
Pozdr
EM
T.M.F.
Guest
Mon Nov 17, 2008 8:22 am
EM wrote:
Quote:
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.
Ciekawe spostrzeżenie, możesz coś rozwinąć temat, podać źródło informacji?
Zrodlem jest Atmel. Jest to chyba w ktorejs nocie, a jesli nie to
znajdziesz odpowiedni post na avrfreaks z cytatem z odpowiedzi Atmela.
Zreszta wynika to po prostu z zasady dzialania EEPROM. Programowane sa
tylacznie komorki, ktore zmieniaja zawartosc na 0, do pozostalych ine
jest przykladane HV, wiec nic zlego im sie nie dzieje.
--
Inteligentny dom -
http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.
EM
Guest
Mon Nov 17, 2008 10:42 am
Quote:
Zrodlem jest Atmel. Jest to chyba w ktorejs nocie, a jesli nie to
znajdziesz odpowiedni post na avrfreaks z cytatem z odpowiedzi Atmela.
Zreszta wynika to po prostu z zasady dzialania EEPROM. Programowane sa
tylacznie komorki, ktore zmieniaja zawartosc na 0, do pozostalych ine jest
przykladane HV, wiec nic zlego im sie nie dzieje.
Dzieki, czyli rozumiem, ze dobrym wyjscie powinno byc uzycie sekwencji
bitowych kolejnych zapisów typu:
11111110
11111100
11111000
itd
--
Pozdr
EM
Konop
Guest
Mon Nov 17, 2008 3:59 pm
EM pisze:
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.
Tutaj pojawi się podobny problem
No właśnie się nie pojawi

.. ten algorytm nie polega na tym, że
używamy komórki "aż do śmierci", tylko to jest taki wear-leveling

...
Zapisujesz tę samą daną (tzn. po każdej jej zmianie

) za każdym razem
w następnej komórce... Gdy dojedziesz do końca, to zaczynasz kolejną
kolejkę i też jedziesz od początku pamięci... Ponieważ z reguły w
pamięci będziesz mieć część danych z poprzedniej kolejki, a część z
aktualnej - trzeba je jakoś rozróżnić i do tego służy ten bit

...
autor źle użył sformułowania "dobra komórka"... chodziło mu raczej o
"aktualną wartość"

... W tym wypadku uszkodzenie pamięci
(którejkolwiek komórki) dyskwalifikuje całą pamięć!! Ale to nie problem,
bo jeśli wszystkie komórki mają zbliżoną żywotność, to gdy padnie
jedna - padną kolejne... . Ale i tak, dla pamięci np. 256 bajtów
odpornych na 100 000 cykli zapisu, dostajesz 25 500 000 cykli zapisu dla
danych 7-bitowych

... Poprawa znaczna

... Zauważ też, że pierwsza
komórka (ta rozróżniająca czy kolejka jest parzysta czy nie) zużywa się
tak samo szybko, jak pozostałe

...
Pozdrawiam
Konop
EM
Guest
Mon Nov 17, 2008 5:35 pm
Konop pisze:
Quote:
EM pisze:
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.
Tutaj pojawi się podobny problem
No właśnie się nie pojawi

.. ten algorytm nie polega na tym, że
używamy komórki "aż do śmierci", tylko to jest taki wear-leveling

...
Zapisujesz tę samą daną (tzn. po każdej jej zmianie

) za każdym razem
w następnej komórce... Gdy dojedziesz do końca, to zaczynasz kolejną
kolejkę i też jedziesz od początku pamięci... Ponieważ z reguły w
pamięci będziesz mieć część danych z poprzedniej kolejki, a część z
aktualnej - trzeba je jakoś rozróżnić i do tego służy ten bit

...
autor źle użył sformułowania "dobra komórka"... chodziło mu raczej o
"aktualną wartość"

... W tym wypadku uszkodzenie pamięci
(którejkolwiek komórki) dyskwalifikuje całą pamięć!! Ale to nie problem,
bo jeśli wszystkie komórki mają zbliżoną żywotność, to gdy padnie jedna
- padną kolejne... . Ale i tak, dla pamięci np. 256 bajtów odpornych na
100 000 cykli zapisu, dostajesz 25 500 000 cykli zapisu dla danych
7-bitowych

... Poprawa znaczna

... Zauważ też, że pierwsza komórka
(ta rozróżniająca czy kolejka jest parzysta czy nie) zużywa się tak samo
szybko, jak pozostałe

...
Pozdrawiam
Konop
No i takie rozwiązanie mi się podoba. Pomyślę jak coś takiego
zaimplementować.
--
Pozdr
EM
T.M.F.
Guest
Mon Nov 17, 2008 6:32 pm
EM wrote:
Quote:
Zrodlem jest Atmel. Jest to chyba w ktorejs nocie, a jesli nie to
znajdziesz odpowiedni post na avrfreaks z cytatem z odpowiedzi Atmela.
Zreszta wynika to po prostu z zasady dzialania EEPROM. Programowane sa
tylacznie komorki, ktore zmieniaja zawartosc na 0, do pozostalych ine jest
przykladane HV, wiec nic zlego im sie nie dzieje.
Dzieki, czyli rozumiem, ze dobrym wyjscie powinno byc uzycie sekwencji
bitowych kolejnych zapisów typu:
11111110
11111100
11111000
itd
Dokladnie tak.
--
Inteligentny dom -
http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.
T.M.F.
Guest
Mon Nov 17, 2008 6:33 pm
Konop wrote:
Quote:
To ja tak powiem o jednym problemie... kiedyś pisali w notach
katalogowych o pewnym problemie, który występował przy zapisie do
EEPROMu... otóż zdarzało się, że w jeśli w czasie zapisu był problemy z
zasilaniem, to uszkadzana była zawartość komórki o adresie 0... sprawdź,
czy dalej coś takiego piszą, jeśli tak - to unikaj jak ognia tej komórki

...
Tez tak slyszalem, ale zastanawiam sie czy to po prostu nie wynikalo z
tego, ze na ta komorke wskazuje domyslnie rejstr adresowy EEPROM?
--
Inteligentny dom -
http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.
Goto page Previous 1, 2, 3 Next