eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaOrganizacja danych w EEPROM
Ilość wypowiedzi w tym wątku: 7

  • 1. Data: 2013-06-06 10:49:32
    Temat: Organizacja danych w EEPROM
    Od: Bool <n...@n...com>

    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?


  • 2. Data: 2013-06-06 12:35:13
    Temat: Re: Organizacja danych w EEPROM
    Od: Piotr Gałka <p...@c...pl>


    Użytkownik "Bool" <n...@n...com> napisał w wiadomości
    news:51b04d1f$0$1255$65785112@news.neostrada.pl...
    >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?

    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.


  • 3. Data: 2013-06-06 12:51:25
    Temat: Re: Organizacja danych w EEPROM
    Od: Bool <n...@n...com>

    W dniu 2013-06-06 12:35, Piotr Gałka pisze:
    > Sprawdź FRAM.

    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.



  • 4. Data: 2013-06-06 15:01:50
    Temat: Re: Organizacja danych w EEPROM
    Od: "Gejzero SQ3OGX" <g...@p...onet.pl>


    Użytkownik "Bool" <n...@n...com> napisał w wiadomości
    news:51b04d1f$0$1255$65785112@news.neostrada.pl...
    >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?

    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




  • 5. Data: 2013-06-06 15:09:23
    Temat: Re: Organizacja danych w EEPROM
    Od: Bool <n...@n...com>

    W dniu 2013-06-06 15:01, Gejzero SQ3OGX pisze:
    > Ale elaborat wysmarowałem

    Dziękuję! Ciekawy pomysł.




  • 6. Data: 2013-06-06 15:29:43
    Temat: Re: Organizacja danych w EEPROM
    Od: Zbych <a...@o...pl>

    W dniu 2013-06-06 10:49, Bool pisze:
    > 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?

    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.




  • 7. Data: 2013-06-06 15:52:27
    Temat: Re: Organizacja danych w EEPROM
    Od: Bool <n...@n...com>

    W dniu 2013-06-06 15:29, Zbych pisze:
    > 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.

    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.

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: