Forum: Mikrocontroller und Digitale Elektronik STM32 - SD Karte im SPI Modus - Ncr Dauer


von Nils H. (nilsho)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche mit meinem STM32F103 via SPI auf eine Fat formatierte 
SD-Karte zu schreiben, dabei möchte ich aber vor allem keine 
vorgeferigten Bibliotheken verwenden.

Nun bin ich auf eine sehr hilfreiche Seite gestoßen:
https://www.kampis-elektroecke.de/2018/11/avr-mit-einer-sd-karte-erweitern-teil-1/

Dort ist auch ein Bild mit bei (befindet sich ebenfalls im Anhang), das 
zeigt, wie die Befehlsübertragung via SPI an die SD-Karte aufgebaut ist. 
Dort steht, dass es zwischen dem übermitteln des Befehls und dem 
erhalten einer Antwort der SD-Karte, eine sogenannte Ncr Zeit gibt, in 
der die SD Karte arbeitet.
Leider steht auf dieser Seite, dass das zwischen 0 und 8bytes für SD 
Karten dauern kann und ich währendessen immer 0xFF übermitteln soll. 
Leider finde ich nichts dazu wovon, die Länge des Ncr Zeitraums abhängig 
ist.

Ich habe nämlich die Sorge, die Antwort der SD Karte zu verpassen, wenn 
ich einfach immer 8mal 0xFF übertrage und die Ncr Dauer, aber 
beispielsweise nur 3bytes beträgt.

Wenn ihr also wisst, ob die benötigte Zeit vom Befehl, SD-Karte oder 
ähnlichem abhängt oder ihr eine ganz andere Idee habt, würde ich mich 
sehr über eure Antworten freuen.

Beste Grüße
Nils

von Kai F. (k-ozz)


Lesenswert?

Nach jedem geschriebenen 0xFF muss geprüft werden, was zurückgelesen 
wurde. Konkret ist das MSB interessant. ist das MSB noch '1', dann musst 
du noch einmal 0xFF schreiben, ist es '0', dann hast du den Response 
empfangen. Das kann bereits beim ersten Versuch der Fall sein, oder erst 
beim neunten.

: Bearbeitet durch User
von Philip S. (phs)


Lesenswert?

Ich hab' das vor langer Zeit mal gemacht (SD Karte im SPI Modus); kann 
sein, dass mein Gedächtnis schwächelt...

Grundsätzlich ist SPI ja bidirektional: Mit jedem SCLK Puls wird ein Bit 
auf MOSI in Richtung Device und gleichzeitig ein Bit über MISO vom 
Device zum Host geshiftet.

Du kannst also nach dem Schicken eines jeden "Wartebytes" prüfen, ob von 
der Karte was zurück kam. Wenn != xFF, dann hast Du lange genug 
gewartet.

von dummschwaetzer (Gast)


Lesenswert?

> dass das zwischen 0 und 8bytes für SD Karten dauern kann

das kann nach Schreibbefehlen auch mal deutlich länger dauern 
(4-Stellig)
Immer nach jedem Byte die Antwort auswerten!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.