Hallo,
ich arbeite gerade an einer Initialisierungsroutine für SD-Karten.
Als Basis verwende ich das Dokument "Simplified Physical Layer Spec" der
SD Card Association http://www.sdcard.org/about/memory_card/pls/.
Nach dem Power-UP sende ich zunächst ein Reset (CMD0), dann CMD8, um
auch High capacity Karten initialisieren zu können. Meine Karte
unterstützt dies aber noch nicht. Dann schicke ich ACMD41 (genauer
gesagt CMD55 und dann CMD41), und die Karte antwortet mir mit dem OCR -
Register. Der CRC stimmt nicht, ds scheint aber laut Spec wohl so
richtig zu sein. Leider ist das Busy Bit (Bit 31) bei mir immer LOW, was
laut Spec bedeutet, dass die Karte noch mit der Initialisierung
beschäftigt ist. In Kapitel 4.2.3
steht nämlich:
> The busy bit in the OCR is used by the card to inform the host that> initialization of ACMD41 is completed. Setting the busy bit to 0> indicates that the card is still initializing. Setting the busy bit to 1 >
indicates completion of initialization. The host repeatedly issues
> ACMD41 until the busy bit is set to 1.
Das Bit will aber partout nicht 1 werden, solange ich auch warte. Die
sonstigen OCR- Werte scheinen plausibel.
Da ich hier nicht weiterkomme, habe ich mir eine ältere Spezifikation
von Sandisk angeschaut :
http://www.sandisk.com/Assets/File/OEM/Manuals/ProdManiNANDAbr1.1.pdf.
Dort steht:
> Besides the operation voltage profile of the modules, the response to> ACMD41 contains a busy flag, indicating that the module is still working > on
its power-up procedure and is not ready for identification. This bit > informs the
host that the module is not ready. The host has to wait (and > continue to poll
the modules, each one on his turn) until this bit is
> cleared.
Hier steht also genau das Gegenteil von oben. Bit 0 heisst Karte ist
bereit. Was ist denn nun richtig? Hat sich die Spezifikation geändert
oder macht jeder Kartenhersteller was er will? Wie soll ich dann
herausbekommen, was meine Karte nun tut?
Wenn irgendjemand im Forum bereits mit diesem Problem konfrontiert
wurde, ich wäre ihm für Hinweise sehr dankbar.
MfG
Walter
Sorry, ein Problem mit der Zitierfunktion. Jetzt soll's besser lesbar
sein
Hallo,
ich arbeite gerade an einer Initialisierungsroutine für SD-Karten.
Als Basis verwende ich das Dokument "Simplified Physical Layer Spec" der
SD Card Association http://www.sdcard.org/about/memory_card/pls/.
Nach dem Power-UP sende ich zunächst ein Reset (CMD0), dann CMD8, um
auch High capacity Karten initialisieren zu können. Meine Karte
unterstützt dies aber noch nicht. Dann schicke ich ACMD41 (genauer
gesagt CMD55 und dann CMD41), und die Karte antwortet mir mit dem OCR -
Register. Der CRC stimmt nicht, ds scheint aber laut Spec wohl so
richtig zu sein. Leider ist das Busy Bit (Bit 31) bei mir immer LOW, was
laut Spec bedeutet, dass die Karte noch mit der Initialisierung
beschäftigt ist. In Kapitel 4.2.3
steht nämlich:
> The busy bit in the OCR is used by the card to inform the host that> initialization of ACMD41 is completed. Setting the busy bit to 0> indicates that the card is still initializing. Setting the busy bit to 1 >
indicates completion of initialization. The host repeatedly issues
> ACMD41 until the busy bit is set to 1.
Das Bit will aber partout nicht 1 werden, solange ich auch warte. Die
sonstigen OCR- Werte scheinen plausibel.
Da ich hier nicht weiterkomme, habe ich mir eine ältere Spezifikation
von Sandisk angeschaut :
http://www.sandisk.com/Assets/File/OEM/Manuals/ProdManiNANDAbr1.1.pdf
Dort steht:
> Besides the operation voltage profile of the modules, the response to> ACMD41 contains a busy flag, indicating that the module is still working > on
its power-up procedure and is not ready for identification. This bit > informs the
host that the module is not ready. The host has to wait (and > continue to poll
the modules, each one on his turn) until this bit is
> cleared.
Hier steht also genau das Gegenteil von oben. Bit 0 heisst Karte ist
bereit. Was ist denn nun richtig? Hat sich die Spezifikation geändert
oder macht jeder Kartenhersteller was er will? Wie soll ich dann
herausbekommen, was meine Karte nun tut?
Wenn irgendjemand im Forum bereits mit diesem Problem konfrontiert
wurde, ich wäre ihm für Hinweise sehr dankbar.
MfG
Walter
Klappt leider nicht mit dem Formatieren, in der Vorschau wirds richtig
angezeigt, aber dann... Dher nochmal der Link zu sandisk in 2 Zeilen:
http://www.sandisk.com/Assets/File/OEM/
Manuals/ProdManiNANDAbr1.1.pdf
Gruss
Walter
Hallo,
ich habe es durch langes Probieren endlich herausgefunden:
BUSY ist tatsächlich aktiv LOW, d.h. die Karte ist beschäftigt, wenn
dieses Bit 0 ist. Nach einiger Wartezeit wird es dann 1, d.h. inaktiv.
In der SD Spec steht's richtig, im Sandisk Datenblatt ist es etwas
unglücklich formuliert:
Clear busy flag heisst in diesem Zusammenhang Übergang von 0 nach 1.
Gemeint ist wohl, dass der Busy Status gelöscht wird.
Was die SDHC Karten betrifft, ist der wesentliche Unterschied die
Adressierung, die hier blockweise (512 byte) anstelle von byteweise
erfolgt. Bis jetzt konnte ich noch nicht damit experimentieren, da mir
eine entsprechende Karte fehlt. Bin gerade dabei, die Unterscheidung
MMC/SD Karte zu programmieren. Da gibt es feine, aber entscheidende
Unterschiede: Z.B. erzeugt die SD Karte die RCA Adresse selbst, während
man der MMC Karte ihre Adresse zusenden muss.
Gruss
Walter
Eine eigene Frage?
Dieser Thread ist über 19 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.