Próbujê u¿yæ karty SD 512MB z mikrokontrolerem. Umiem z niej odczytywaæ, a nie potrafiê do niej zapisywaæ. Po komendzie CMD24 odpowiada np. 3F 04 80 (b³êdy ?) , albo FF 00 00 00 (du¿o zer a¿ dojdzie znowu do FF) zamiast oczekiwanego FF 00 FF. Wymuszenie zapisu FE dane CRC nie skutkuje odpowiedzi± x5 00 00 00. Jest FF FF FF Próbowa³em z innymi kartami, bez sukcesu. Karty w PC-cie s± sprawne. Na ró¿nych forach internetowych wielu zg³asza taki sam problem: umie odczytaæ, ale nie zapisaæ. Czy kto¶ mo¿e mi pomóc rozwi±zaæ problem ? Gdzie szukaæ przyczyn ? W sprzêcie (pod³±czenie przez oporniki do 5V, d³ugie ¶cie¿ki , za szybki/wolny zegar (10MHz), ....) czy programie ? Czy dla zapisu bloku 512B oprócz CMD24 trzeba jeszcze jakie¶ komendy, (mo¿e one maj± blokadê przed zapisem, któr± trzeba wy³±czyæ) ?
SD SPI zapis
Oct 21, 2007
6 Replies
U¿ytkownik "lwh" snipped-for-privacy@vp.pl napisa³ w wiadomo¶ci news:ffg7lo$98j$ snipped-for-privacy@news.onet.pl...
Trochê OT. Wiesz mo¿e gdzie znale¼æ dobry opis dla kart SD? Mam dla MMC, a do SD nie uda³o mi siê znale¼æ.
Pozdrawiam
U¿ytkownik "Micha³" snipped-for-privacy@edwew.pl napisa³ w wiadomo¶ci news:ffg8he$1jm$ snipped-for-privacy@atlantis.news.tpi.pl...
Dobry ? Gdybym mia³ dobry, to bym wiedzia³ czemu mi nie dzia³a :-) Mam tylko tyle ile linków znalaz³em na forum elektrody , wikipedii i bezpo¶rednim szukaniem Wszystko co mam o SD to specyfikacja 1.9 i 2..2 i kilka przyk³adowych programów w ró¿nych jêzykach. O MMC te¿ mam podobnie ma³o. MMC mobile, plus te¿ mi nie dzia³aj±, albo dzia³aj± tak samo -nie potrafiê zapisaæ. Ponoæ s± kompatybilne, mimo, ¿e maj± mnóstwo "nóg". Na dodatek MMCPlus 512MB, jak± mam, ma "parszyw±" w³a¶ciwo¶æ, z siê blokuje (daje na wyj¶ciu stan niski) przy ponownej inicjalizacji. Trzeba wy³±czaæ zasilanie. "Zwyk³ej" MMC kupiæ nie umiem, zreszt± by³by to zabytek, a "modyfikacje" s± dostêpne wszêdzie. Ta strona po polsku wydaje siê ciekawa
formatting link
. Dziwi, mnie, ze o zapisie SD/MMC nic nie ma. Czego nie wiem ? Cos jest tajne, p³atne ? Wielu zrobi³o obs³ugê tych kart mikrokontrolerem z sukcesem.
Dlaczego oczekujesz FF00FF? Po CMD24 karta sobie zapisuje a ty czekasz na koniec sprawdzając najstarszy bit odpowiedzi (busy). Jak jest 0, to lecisz dalej z zapisem.
Zasilasz kartę poprawnym napięciem? Przy wysyłaniu CMD taktujesz spi zegarem max 400kHz (o ile dobrze pamiętam)? Podnieść f zegara możesz dopiero w fazie przesyłania danych. Podajesz początkowy adres do zapisu w bajtach?
Trzeba ustawić długość bloku w CMD16 na 512, ale to chyba masz. Wystarczy to zrobić raz, np. przy inicjalizacji karty.
U mnie działa na różnych SD (od 16MB do 2GB) i zwykłej MMC. Na innych nie sprawdzałem. Kod możesz sobie ściągnąć z mojego projektu (w sumie z niewielkimi przeróbkami jest to to samo co w yamppie)
formatting link
(procedury sd_write i sd_cmd).
pozdrawiam
majek
lwh wrote: > Próbuję użyć karty SD 512MB z mikrokontrolerem. > Umiem z niej odczytywać, a nie potrafię do niej zapisywać. > Po komendzie CMD24 odpowiada np. 3F 04 80 (błędy ?) , albo FF 00 00
00 (dużo zer aż dojdzie znowu do FF) zamiast oczekiwanego FF 00 FF.Dlaczego oczekujesz FF00FF? Po wysłaniu CMD24 karta coś sobie robi, a ty czekasz na koniec sprawdzając najstarszy bit odpowiedzi (busy). Jak jest 0, to lecisz dalej z zapisem.
Zasilasz kartę poprawnym napięciem? Przy wysyłaniu CMD taktujesz spi zegarem max 400kHz (o ile dobrze pamiętam)? Podnieść f zegara możesz dopiero w fazie przesyłania danych. Podajesz początkowy adres do zapisu w bajtach?
Trzeba ustawić długość bloku w CMD16 na 512, ale to chyba masz. Wystarczy to zrobić raz, np. przy inicjalizacji karty.
U mnie działa na różnych SD (od 16MB do 2GB) i zwykłej MMC. Na innych nie sprawdzałem. Kod możesz sobie ściągnąć z mojego projektu (w sumie z niewielkimi przeróbkami jest to to samo co w yamppie)
formatting link
(procedury sd_write i sd_cmd).
pozdrawiam
majek
U¿ytkownik "Marek Wodzinski" snipped-for-privacy@ODSPAMIACZ.mamy.to> napisa³ w wiadomo¶ci news:ffger9$604$ snipped-for-privacy@atena.e-wro.net...
Bo tak by³o na pewnym obrazku z przebiegami czasowymi
3F, 04,00 maj± najstarszy bit =0 Bez wzglêdu wymuszony na moment wys³ania FE, efektu brakCo do tego mam najwiêcej watpliwo¶ci. Mo¿e mój stabilizator 3V3 ma jaki¶ problem z odpowiedzi± dynamiczn±, je¶li ta karta pobiera³aby ogromny pr±d w impulsie?. Wydajno¶æ statyczna, zwarciowa mojego stabilizatora to 300mA i spada do 0,25A jak scalak robi siê gor±cy. Przy obci±¿eniu opornikiem 33 Omy jest 3,28V. Ja³owo 3,29V Przy obci±¿eniu opornikiem 10 Om, jest 2,87V. Mam stabilizator 50mA LP2980, bo wydawal mi siê odpowiedni (ma³y, tani, z ³apk± wy³±czenia) i widzê, ze on nie ma ogranicznika zaraz po znamionowym pr±dzie. Co to znaczy , ¿e karta jest dwunapiêciowa ? Przy zapisie trzeba jej dac mniej ni¿ 1,95V ? (mam nadziejê, ¿e nie trzeba, a mo¿na). Opcji dwóch napiêæ nie przewidzialem. Zasilam ciagle 3V3. OCR zg³asza kod napiêcia w MMCmobile
80 (dwunapiêciowa), w innych 00 (jednonapiêciowe).To testowa³em na ró¿ne sposoby od pojedyñczych Herców do 10MHz. To na nic nie ma wp³ywu (w kilku wypowiedziach na roznych forach spotkalem siê z t± sam± opini±.), a nawet jest gorzej przy obni¿onym do Hz taktowaniu. Wg tego co zrozumia³em z opisów, wymóg 400kHz dotyczy³ najstarszych kart MMC z open drain. Dzi¶ zosta³ zachowany jako kompatybilno¶æ w ty³. Wg mojej oceny jest zbêdny w nowych tajwañskich i chiñskich kartach, mimo, ¿e to ponoæ nie spe³nia standardu.. One s± przystosowane na zegar 26MHz, 52MHz. Ja umiem z mojego mikrokontrolera daæ co najwy¿ej 10MHz. Nie jest moim celem obs³uga kart 8MB. Najmniej dzi¶ do ³atwego kupienia to 512MB,a w zasadzie pospolite to od 1GB.
Oczywi¶cie. Umiem odczytaæ, to co wpisa³em pod windows i adres sprawdzi³em winhexem i podobnymi programami i staram siê to nadpisaæ. Bez wzglêdu na adres (czy 00 00 00 00 czy 10 00 00 00 czy jakikolwiek inny z koñcówk± xx0
00) nie umiem nic wpisaæ.Mam. Z CMD16 i bez tego bez zmian. Domy¶lnie ponoæ jest to ustawiane na 512B i nie ma innej opcji. Z kolejno¶ci± CMD1 , ACMD41 te¿ nie widzê ró¿nic. Wg mnie dobrze rozró¿nia MMC od SD.
Ten projekt te¿ ogl±da³em kilka dni temu.
Zmusiłeś mnie do odkopania dokumentacji:-) Po wysłaniu CMD24 możesz dostać od 1 do 8 razy FF zanim dostaniesz 1 bajt statusu R1. Nie wiem po co odczytujesz i sprawdzasz następny bajt. Jeżeli od razu po CMD24 dostajesz 3F..., to może masz jakieś problemy z transmisją z karty (kable?). Procesor zasilasz tym samym napięciem co kartę czy konwertujesz poziomy?
Jeżeli dostaniesz odpowiedź 00 (po iluśtam FF) to wysyłasz 1 FF, po nim FE i dane+CRC.
Karta nie powinna przekraczać 200mA (typowo o wiele mniej), więc tu powinno być ok. Sam używam na 3.3V i 2.9V bez problemu, natomiast stabilizatory mam na razie na 1A, chociaż planuję miniaturyzację na LP2951 - może się uda. Z resztą jakbyś chciał, to z CSR karty możesz odczytać ile karta wymaga prądu.
Tego niestety nie drążyłem. Jak się dowiesz, to daj znać:-)
Jeszcze z mojego projektu: też miałem na początku problemy z zapisem. 'Na stole' wszystko działało, ale jak zaczął dostawać prawdziwe dane (dużo), to czasem miałem błędy zapisu. Okazało się, że w którymś przerwaniu zapomniałem wrzucić rejestr flag na stos. Jak przyszło przerwanie w czasie zapisu karty, to się krzaczyło.
pozdrawiam
majek
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required