- posted
16 years ago
SD SPI zapis
- Vote on answer
- posted
16 years ago
- Vote on answer
- posted
16 years ago
- Vote on answer
- posted
16 years ago
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)
pozdrawiam
majek
- Vote on answer
- posted
16 years ago
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)
pozdrawiam
majek
- Vote on answer
- posted
16 years ago
- Vote on answer
- posted
16 years ago
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