MMC zapis 1 bajtu

Feb 05, 2007 36 Replies

czas tyka na moj± niekorzy¶c.

choæ tutaj pisz±:

formatting link
w datasheecie, ¿e to jest 1 mln cykli a to ju¿ 512 MB , czyli dwa razy wiêcej.

D.

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

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

J.

U¿ytkownik "DEXTER" snipped-for-privacy@wppp.pl napisa³ w wiadomo¶ci news:eqap0f$so7$ snipped-for-privacy@mx1.internetia.pl...

Te pamiêci du¿o cykli zapisu wytrzymuj±, szczególnie w temperaturach pokojowych Liczby okre¶laj± jaka¶ statystykê We¼ konkretny egzemplarz z szuflady, napisz krótki program ci±g³ego zapisu zliczaj , kiedy pojawi± siê b³êdy. Po miliardzie zapisów siê znudzisz:-)

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

A nie prosciej uzyc pamieci flash np. AT45DB081B ?

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.

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.

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

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

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.

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.

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.

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).

Adam, rozumiem, ¿e do tej metody jedynie co jest potrzebne to wykrycie zaniku zasilani, aby szybko dokoñczyc ramkê, przed zanikiem, aby Flash nie zgubi³a ca³ej ramki ? Czyli np. zasilanie wysterowuje np. wej¶cie przerwania i jak tylko zostanie zg³oszone przerwanie to z jakiego¶ licznika odczytaæ ile jeszcze mam wys³ac i walê $FF do koñca i koñcze transmisjê ?

D.

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.

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.

Masz racje, kolejny projekt bêdzie pod AVRy. Mam i kompilator i system uruchomieniowy ST500, ale jako¶ mi one nie podchodz±. Kwarce jakie¶ dziwne mam 3,86 MHz na tej p³ycie ST500. Trudno mi siê przyzwycziæ, ¿e porty s± DO i DI pod dwoma odersami w obszarze adresowym. Tyle lat praktyki w czym¶ innym zniechêca do robienie czego¶ po nowemu, ale widzê, ¿e siê nie da. Zastanawiam siê czy przyk³adac siê do AVRów czy znów zaraz to nie bêdzie prze¿ytek. Mo¿e od razu ARMy ? Mo¿e jaki¶ Ethernet wbudowany w procka od razu ?

Muszê siê zastanowiæ i olaæ w koñcu to '51.

D.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required