Używam karty microSD w projekcie osadzonym. Karta jest podłączona do mikrokontrolera za pomocą interfejsu SPI. To sprawdziło się w przypadku wszystkich kart, z których korzystałem wcześniej, ale teraz moja nowa karta nie zostanie zainicjowana. Karta jest kartą microSD Transcend 2 GB (TS2GUSD).Inicjalizacja karty microSD za pomocą interfejsu SPI
Po wysłaniu początkowej zegara pociągu, aby przełączyć do trybu SPI, I wykonaj następujące czynności:
CMD0 (Argument 0, CRC 0x95) -> Response 0x01 -> OK
CMD8 (Argument 0x000001AA, CRC 0x87) -> Response 0x01 0x000001AA -> Oznacza to SDC V2 + karta, zakres napięcia 2,7 V - 3,6 V jest obsługiwana -> OK
Następnie powinienem wysłać polecenie ACMD41, ale podczas wysyłania CMD55 (argument 0, CRC 0), który musi poprzedzać CMD41, otrzymuję odpowiedź 0x05 -> Nielegalne polecenie. Próbowałem również wysłać CMD1 (dla kart MMC), ale daje to podobną odpowiedź o niezgodnym poleceniu. Kod działa dobrze z moją kartą microSD Sandisk 2 GB.
Jak naprawić ten problem?
fajnie! Dobrze, że wykopiesz problem! ... Jestem po prostu oszołomiony, ponieważ to szwy wskazują, że czytniki kart USB nie używają komend combo. Możesz/powinnaś zaznaczyć swoją odpowiedź jako poprawną. BTW, sandisk, transcent, etc nie mają odlewni półprzewodników ... oni kontrolują i cyfrowe usługi projektowania dla swoich produktów (po prostu w rzeczywistości nie wytwarzają chipów) – jpinto3912
Musiałem czekać 48 godzin, aby oznaczyć moją odpowiedź jako poprawną z jakiegoś powodu. Myślę, że czytniki kart USB będą używać interfejsu "rzeczywistego" protokołu karty pamięci SD (ma większe prędkości) .W tym trybie musisz użyć CRC i prawdopodobnie nie będzie problemu. – Ron
Czy kiedykolwiek otrzymałeś odpowiedź od Transcend? zgaduję, że wysłałeś cały ostatni bajt jako zera, powodując, że bit końcowy jest błędny, karta byłaby zgodna ze specyfikacją, a nawet kod błędu miałby sens. (Zostawiłem odpowiedź opisującą to nieco więcej, w Jeśli nadal interesujesz się sprawą po ... 4 latach) –