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


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 Nils H. (nilsho)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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!

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.

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