MMC zapis 1 bajtu

Loading thread data ...

DEXTER napisał(a):

Co do EEPROMa to się zgodzę, ale co to za kostka FRAM, która ma tyle samo cykli co EEPROM?? Ja używałem FM24CL64 (2,7-3,6V) i w .pdf pisze jak byk "unlimited write cycles". Wersja 5-cio woltowa ma 1 Trylion cykli.... PH

Reply to
Paweł Hadam

Zgadzam sie z toba ze paranoja, dorzucac 51 jako mastera :-)

J.

Reply to
J.F.

Zrób minimalnie większy bufor. Ja w swoim loggerze do gps-a mam przeznaczone jakieś 640B na bufor cykliczny. Jak się uzbiera 512B 'brudnych' bajtów to zapisuję to i przestawiam wskaźnik pierwszego 'brudnego'. W międzyczasie na przerwaniach cały czas są dopisywane bajty pobrane z rs-a do bufora. Mam już gigabajty logów i nic mi się na razie nie zgubiło (oprócz błędów na samym rs-ie).

Nie znam się na 51, ale policz sobie. Bajty przepychasz po SPI, nawet najwolniejsza karta będzie szybsza niż Ty będziesz w stanie wysyłać dane, więc jedynym ograniczeniem jest procek. Dolicz kilka bajtów na nagłówki i potwierdzenie i będziesz miał prędkość (z karty dostajesz potwierdzenie czy zapis się udał, więc możesz w przypadku błedu powtórzyć). Ewentualnie inicjacja karty i może sam rozkaz zapisu (już nie pamiętam dokładnie - poszukaj w datasheetach) musi być z mniejszą prędkością (chyba coś koło 400kHz, ale głowy nie dam).

Rozwiązanie problemu z brakiem zasilania, to Ci Janko podał: wystarczy kondensator i układ wykrywający.

pozdrawiam

majek

Reply to
Marek Wodzinski

A nie prosciej uzyc pamieci flash np. AT45DB081B ?

Reply to
Taddy

Spinacz biurowy, DEXTER snipped-for-privacy@wppp.pl!

IMO nie zrozumiałeś.

Po prostu dzielisz sektor na część użyteczną i zmarnowaną i piszesz procedurę, która np. dostaje 128 bajtowy bufor i zapisuje go jako sektor, zerując (albo jeszcze lepiej, powielając) resztę. Na przykład 128 bajtów zapisując w jednym sektorze czterokrotnie.

Drogie toto... W porównaniu z MMC 32 MB z Allegro bardzo drogie.

A o przerwaniach słyszał? :) W końcu właśnie po to zostały wymyślone. Jak przyjdzie transmisja to przerywasz zapisywanie i buforujesz znak.

IMO zostaw to 51 w cholerę i zainteresuj się AVR.

Reply to
Adam Wysocki

Spinacz biurowy, DEXTER snipped-for-privacy@wppp.pl!

Sprawdź. Podejrzewam że tak. Ale nie za agresywnie, mi podczas zapisu (z komputera, normalnie, przerzucając pliki przez czytnik) wypadła wtyczka z USB i karta przestała być widziana.

To upraszcza budowę kart.

Reply to
Adam Wysocki

Spinacz biurowy, DEXTER snipped-for-privacy@wppp.pl!

To może być bolesne dla eeproma. Już ktoś proponował - użyj FRAM.

Reply to
Adam Wysocki

Spinacz biurowy, DEXTER snipped-for-privacy@wppp.pl!

To zacznij pisać w C i zajmij się AVRami. Spokojnie dasz radę.

Jeżeli możesz dopuścić taką redukcję pojemności karty to tak będzie najprościej.

Reply to
Adam Wysocki

Spinacz biurowy, DEXTER snipped-for-privacy@wppp.pl!

IMO nie zrozumiałeś.

Po prostu dzielisz sektor na część użyteczną i zmarnowaną i piszesz procedurę, która np. dostaje 128 bajtowy bufor i zapisuje go jako sektor, zerując (albo jeszcze lepiej, powielając) resztę. Na przykład 128 bajtów zapisując w jednym sektorze czterokrotnie.

Drogie toto... W porównaniu z MMC 32 MB z Allegro bardzo drogie.

A o przerwaniach słyszał? :) W końcu właśnie po to zostały wymyślone. Jak przyjdzie transmisja to przerywasz zapisywanie i buforujesz znak, a procesor pomaga ci w tym sprzętowo.

IMO zostaw to 51 w cholerę i zainteresuj się AVR.

Reply to
Adam Wysocki

DEXTER napisał(a):

Teoretyzuje, ale... Daj 2 pamieci po 512, w jedna zbierasz dane, a zawartosc drugiej w tym czasie wysylasz na MMC. Jak sie zapelni pierwsza to z niej wysylasz a zbierasz dane na druga. Jak dasz podtrzymanie zasialnia to masz zawsze w pamieci jeszcze backup poprzedniego sektora WR(J)C.

Reply to
Marcin Gala

Taddy napisał(a):

A co to da? I tak musisz programować pamięć całymi stronami (po AFAIR

264 bajty) tylko dane zbierasz najpierw w buforze RAM w układzie pamięci. Jeżeli zasilanie padnie zanim przepiszesz bufor RAM do Flasha, podobnie tracisz zebraną zawartość tak jakbyś robił to prosto z RAMu. Już ktoś tu podał metodę z wooolnym zegarem transmisji do karty MMC i to było najskuteczniejsze rozwiązanie. Wręcz można taktować wysyłanie każdego bajtu oddzielnie cały czas trzymając aktywny chipselect karty (w trybie SPI).
Reply to
Adam Dybkowski

ano. Najprościej to zasilanie przez diodę i opornik na kondensator klasy Supercap (jeśli układ bierze niedużo prądu - masz wtedy minuty a nawet godziny pracy) albo na zwykłe coś typu 4700uF (jak prądu potrzebujesz więcej, ale za to musisz się cholernie spieszyć). Przez drugą diodę podajesz to samo zasilanie na nogę proca, pulldown rzędu 1k. Jak zasilanie padnie to na nodze masz zbocze opadające i przerwanie, ale zasilanie z kondensatora nie zwieje do zasilacza, więc masz czas na zapis. Wysyłasz komendę zapisu i cześć pracy.

Możesz też zrobić bezpieczniej: podeprzeć supercap'em jakiś kawałke szeregowego RAMu. Wtedy przerwanie zasilania nie robi Ci różnicy, jak wraca zasilanie to piszesz dalej do tego RAMu i tyle, jak się zapełni, to przepisujesz do bufora karty i każesz zaprogramować. Zasilanie podpierasz kondensatorem takim, żeby utrzymał 2x maksymalny czas zapisu sektora MMC i masz spokój - nawet jeśli szlag trafi zasilanie w momencie, jak wyślesz komendę zapisu, to i tak zapis się dokońćzy bezpiecznie i jeszcze zdążysz zweryfikować go i skasować RAM.

Reply to
Marek Lewandowski

No to chyba zbyt duze uproszczenie zastosowales. Ta kostka ma 2 bufory RAM gdzie mozna wsadzac dane a potem w stosownym momencie wpisywac je do falsha. Zalety:

- prosta komunikacja z ukladem

- nie trzeba nic kombinowac z dodatkowym RAM

- niska cena

- duza pojemnosc

Po wykryciu spadku zasilania wykonac rozkaz zapisu do flasha i tyle. Stosowny kondensator podtrzyma zasilanie.

Reply to
Taddy

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.