Forum: Mikrocontroller und Digitale Elektronik SDIO SD-Karte ACMD41 immer busy


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von M. H. (bambel2)


Bewertung
1 lesenswert
nicht lesenswert
Hallo,

ich versuche eine SD-Karte am STM32F407 ohne die HAL Libraries zu 
betreiben.

Ich sende zuerst CMD0 => klappt.
Dann CMD8. Die Karte antwortet spezifikationsgemäß und akzeptiert meine 
Spannung.

Dann sende ich ACMD41 (CMD55 + CMD41). Das CMD55 wird akzeptiert und die 
KArte ist im Application Mode (Durch Antwort von CMD55) verifiziert.

auf das anschließende ACMD41 antwortet die Karte immer mit "0x00ff8000"
Das ist soweit auch korrekt. Nur ist das BUSY bit nicht gesetzt und das 
CCS auch nicht. ich wiederhole das ACMD41 momentan in einer 
Dauerschleife, die erst unterbrochen wird, wenn die Karte anzeigt, dass 
sie bereit ist (BUSY=1 und CCS=1, da 16 GB Karte).

Das CMD55 sende ich mit RCA=0, da noch keine zugeteilt ist.
ACMD41 wird mit HCS=1 gesendet, da CMD8 erfolgreich war.

Leider antwortet die Karte immer nur mit "0x00ff8000". Auch nach 
mehreren zehntausend Abfragen.

Ich habe daraufhin ein wenig mit der Clock gespielt. Momentan ist sie 
auf knapp 100 kHz. Davor war kanpp unter 400 kHz. Ebenso habe ich 
mehrere verschiedene Karte ausprobiert. Keine geht.

Wie gesagt, CMD8 funktioniert einwandfrei. Somit gehe ich davon aus, 
dass die Kommunikation geht. Woran könnte es noch liegen?

Ich habe ebenfalls Pull-ups an allen Leitungen zur SD-Karte.

von M. H. (bambel2)


Bewertung
0 lesenswert
nicht lesenswert
Ich glaube ich habe den Fehler selbst gefunden:

Followings are general rules of the argument of ACMD41:
(1) If the voltage window field (bit 23-0) in the argument is set to 
zero, it is called "inquiry CMD41" that
does not start initialization and is use for getting OCR. The inquiry 
ACMD41 shall ignore the other
field (bit 31-24) in the argument.
(2) If the voltage window field (bit 23-0) in the argument is set to 
non-zero at the first time, it is called
"first ACMD41" that starts initialization. The other field (bit 31-24) 
in the argument is effective.
(3) The argument of following ACMD41 shall be the same as that of the 
first ACMD41.

Ich habe mein Argument von ACMD41 falsch gesetzt. ich werde das gelich 
mal probieren.

von Bernhard S. (bernhard)


Bewertung
0 lesenswert
nicht lesenswert
Ich sitze gerade vor dem gleichen Problem

CMD8 funktioniert:

Send: 0x48 0x00 0x00 0x01 0xAA 0x87
Recv: 0x01 0x00 0x00 0x01 0xAA

Wie sendest Du ACMD41 ?

von Bernhard S. (bernhard)


Bewertung
0 lesenswert
nicht lesenswert
Initialisierung einer SDHC Card:

Send: 0x48 0x00 0x00 0x01 0xAA 0x87 (CMD8)
Recv: 0x01 0x00 0x00 0x01 0xAA


SCHLEIFE:

Send: 0x77 0x00 0x00 0x00 0x00 0x01 (CMD55, das "Prefix" für ein ACMD); 
Recv: 0x01 (R1-noch "In Idle State")
Send: 0x69 0x40 0x00 0x00 0x00 0x01 (ACMD41)
Recv: 0x01 (R1-noch "In Idle State")

Send: 0x77 0x00 0x00 0x00 0x00 0x01 (CMD55)
Recv: 0x01 oder 0x00
Send: 0x69 0x40 0x00 0x00 0x00 0x01(ACMD41)
Recv: 0x00 (R1-Antwort, jetzt ohne "In Idle State")

GOTO SCHLEIFE

von M. H. (bambel2)


Bewertung
0 lesenswert
nicht lesenswert
Ich möchte hier noch kurz die finale "Lösung" meines Problems 
publizieren:

Die Karte scheint nach dem Powerup etwas eigen zu sein. Vermutlich steht 
das in der Spezifikation, wenn ich diese komplett gelesen hätte...

Sobald ich der Karte direkt nach dem Powerup CMD0 + CMD8 + ACMD41 sende, 
initialisiert sie sich nie. Auch nach Minuten. Selbst wenn man CMD0 
wiederholt.

Die Lösung: Nach dem poweron einige ms warten. Dann klappt alles. (Ich 
warte gegenwärtig 250 ms)

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.