Hallo,
ich versuche gerade, eine SD-Karte über SPI einzubinden. Das
funktioniert ganz gut, aber ich wundere mich über zwei Warteschleifen.
Die offizielle Spezifikation der SD Association gibt es ja zum
Herunterladen[1] in etwas abgespeckter Form. Daneben habe ich diverse
Projekte durchgesehen, etwa den Beispielcode von ElmChan[2] oder die
Beschreibung von LuckyResistor[3].
In all diesen Quellen finde ich immer wieder zwei Warteschleifen:
1. Nach dem aktivieren des Chipselect der SD-Karte wird solange 0xFF
gesendet, bis die Karte ihrerseits mit 0xFF antwortet.
2. Nach dem Senden eines Kommandos wird (maximal 10mal) 0xFF gesendet
und dabei darauf gewartet, dass die Karte mit einem Byte antwortet, bei
dem das oberste Bit nicht gesetzt ist.
Ich habe eine Quelle von ElmChan angehangen, dort ist das die Funktion
wait_ready ab Zeile 226 und in send_cmd ab Zeile 371.
Wo finde ich denn dazu etwas in der SD-Spezifikation?!
Es gibt dort zwar einen Abschnitt zum Antwort-Typ "R1b", in dem etwas
von einem Busy-Signal geschrieben wird:
1 | 7.3.2.2 Format R1b
|
2 | This response token is identical to the R1 format with the optional addition of the busy signal. The busy signal token can be any number of bytes. A zero value indicates card is busy. A non-zero value indicates
|
3 | the card is ready for the next command.
|
Aber das steht ja im Gegensatz zur Warteschleife Nr. 2, denn dort wird
ja gerade gewartet, bis nicht mehr alle Bits gesetzt sind.
Zur Warteschleife Nr. 1 nach dem Chipselect finde ich garnichts in der
Spezifikation.
Das ist irgendwie unbefriedigend. Was übersehe ich denn da?
Danke und Grüße,
N
[1] https://www.sdcard.org/downloads/pls/
[2] http://elm-chan.org/fsw/ff/ffsample.zip
[3] https://luckyresistor.me/cat-protector/software/sdcard-2/