Ich verwende die folgende Befehlsfolge bei 250 kHz SPI, um SD-Karten zu initialisieren:
Natürlich CMD55-ACMD41 wiederholen, bis der Ruhezustand verlassen wird. Die CRCs sind korrekt (sie werden mit dem entsprechenden Algorithmus berechnet). Chip Select wird nach jedem Befehl (einschließlich zwischen CMD55 und ACMD41) mit acht nachlaufenden Takten freigegeben.
Diese Sequenz funktioniert gut für drei SDSC-Karten, die ich habe; Ich kann Daten von ihnen nach Abschluss der Initialisierung lesen. Allerdings scheitern die beiden SDHC-Karten, die ich habe, daran.
Beide schreiten ordnungsgemäß bis CMD55 fort (einschließlich einer 0x01 R1-Antwort von CMD8), dann reagieren sie auf CMD55 wie folgt:
Maxell X Series SDHC Class 4 8 GB (S708G1249 TP2T0M2B49059): Kein R1, selbst nach dem Empfang von 256 0xFF Stuff Bytes.
PQI SDHC Class 4 4 GB (BH1013316030G): 0xC2 kommt nach 5 0xFF Stuff-Bytes, bei denen Bit 7 gesetzt ist (bei einem R1 sollte dieses Bit nicht gesetzt sein), sonst ist nicht einmal Bit 0 gesetzt (Idle). sollte sein.
Das Ausgeben von ACMD41 danach auf einer der beiden Karten führt zu einem R1 von 0x05 (unzulässiger Befehl + Leerlauf). Was jetzt? Ich habe noch nicht versucht, sie mit CMD1 zu initialisieren (aber da sie SDHC sind, sollten sie darauf nicht reagieren).
(Beide Karten funktionieren normal, wenn von einem PC oder in einer Digitalkamera, die ich habe, darauf zugegriffen wird.)
Ich habe versucht, andere Befehle auszugeben; sie scheitern auch auf diese Weise. Es scheint also eher so, als wäre die Karte nach CMD8 trotz gültigem R1 irgendwie völlig unzugänglich geworden.
Ich habe es endlich gefunden.
Sie müssen das vollständige R7 von CMD8 lesen, sonst scheinen SDHC-Karten in irgendeiner Weise blockiert zu sein, sodass sie überhaupt nicht mehr zugänglich sind (ich habe versehentlich das Lesen über R1 hinaus ausgelassen).
Calvin WallenIV
Calvin WallenIV
Jubatisch
Jubatisch