- Vote on answer
- posted
17 years ago
MMC zapis 1 bajtu
- Vote on answer
- posted
17 years ago
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
- Vote on answer
- posted
17 years ago
Zgadzam sie z toba ze paranoja, dorzucac 51 jako mastera :-)
J.
- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
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
- Vote on answer
- posted
17 years ago
A nie prosciej uzyc pamieci flash np. AT45DB081B ?
- Vote on answer
- posted
17 years ago
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.
- Vote on answer
- posted
17 years ago
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.
- Vote on answer
- posted
17 years ago
Spinacz biurowy, DEXTER snipped-for-privacy@wppp.pl!
To może być bolesne dla eeproma. Już ktoś proponował - użyj FRAM.
- Vote on answer
- posted
17 years ago
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.
- Vote on answer
- posted
17 years ago
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.
- Vote on answer
- posted
17 years ago
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.
- Vote on answer
- posted
17 years ago
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).- Vote on answer
- posted
17 years ago
- Vote on answer
- posted
17 years ago
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.
- Vote on answer
- posted
17 years ago
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.
- Vote on answer
- posted
17 years ago