SD SPI zapis

Loading thread data ...

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

Reply to
Marek Wodzinski

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

Reply to
Marek Wodzinski

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

Reply to
Marek Wodzinski

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.