Forum: Mikrocontroller und Digitale Elektronik SDIO 4bit mode STM32F407. Immer CRC Fehler


von M. Н. (Gast)


Lesenswert?

Guten Abend,

ich habe, dank der Hilfe hier im Forum, eine SD Karte am STM32F407 in 
Betrieb nehmen können. Bis jetzt läuft alles noch im 1bit Modus. Ich 
will aber den 4 bit Modus verwenden. Das ganze tut leider nicht.

Ich habe das SDIO Modul auf 4 bit umgestellt und die Karte mittels 
ACMD6.
Die Karte liefert keinen Fehler zurück.

Leider empfange ich beim Lesen von der Karte nur Müll. Am Ende wird dann 
das DCRCFAIL: Data block sent/received (CRC check failed) Bit gesetzt.

Ich habe bereits die Verbindungen überprüft. Wenn eine Datenleitung 
nicht angeschlossen ist, dann leifert das SDIO Modul den STBITERR 
Fehler. Somit gehe ich davon aus, dass die Hardware in Ordnung ist. Die 
Clock ist gleich wie bei der Initialisierung ~400kHz.

Hat jemand eine Ahnung, warum nur falsche Daten gelesen werden?
Eine Idee wäre, dass die Datenleitungen vertauscht sind. Das sind sie 
jedoch nicht. Habe ich mehrfach überprüft.

Kann mir jemand einen Tipp geben, auf was man sonst noch achten muss?

von M. Н. (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe nun einmal den Speicher der SD Karte mit den gelesenen Daten 
verglichen (siehe Bild).

Es fällt auf, dass sich die Daten irgendwie um ein halbes Byte 
verschoben haben. Ich habe zuerst gedacht, es läge daran, dass ich das 
CMD17 (Read Block) sende und dann erst den Read im SDIO konfiguriere. 
Habe das mal vertauscht. Liefert immernoch das selbe Ergebnis.

Hat jemand eine Idee?
Eigentlich hat SDIO doch eine Art Präambel mit Startbit usw., oder?

von M. Н. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe den Lesevorgang nun aufgenommen und die Bilder angehängt. Die 
Karte sendet tatsächlich die falschen Daten.
Das erste Bild zeigt den Lesevorgang im Überblick. Man sieht das CMD17 
und im Anschluss die Folge von Daten auf allen 4 Leitungen.

Das zweite Bild zeigt das Startbit und das erste Byte das von der SD 
Karte kommt. Die Karte überträgt immer zuerst die höherwertigen 4 bit. 
in diesem Fall: Startbit (4 mal 0) und dann 0xF und 0xB. So empfängt der 
Controller das auch. Aber das ist einfach falsch. Die Daten sollten so 
aussehen wie im 2. Post gezeigt.

Hat jemand irgendeine Idee? So langsam habe ich keine Ahnung mehr, woran 
es liegen könnte.

EDIT: Als Erinnerung: Im 1bit Modus geht alles. Und ich habe auch schon 
mehrere andere Karten versucht. Alle Karten sind von verschiedenen 
Herstellern  und weisen auch teilweise unterschiedliche Größen auf.

von M. Н. (Gast)


Lesenswert?

Ich pushe den Thread mal nochmal :)

Ich habe nocheinmal einiges an Debugging investiert und kam zu folgendem 
Ergebnis: nichts...

Ich verstehe das ganze nicht. Im 1bit Modus klappt alles soweit. Nur 
sobald man die Karte auf 4bit umschaltet, spinnen die Daten.

Wie gesagt, das Problem tritt bei allen Karten auf, die ich besitze und 
alle funktionieren am PC oder in anderen Geräten. Da die Karte aber 
trotzdem falsche Daten sendet muss es ein Konfigurationsfehler sein.

Hat jemand eine Idee, was man verkonfiguriert haben könnte, dass die 
Karte so etwas tut?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin,

Bei deinen Daten sieht man doch das Problem:
FA B8 ... auf der Karte wird als FB 80 gelesen. Dir fehlt also nur das 
A.
Deine Karte sendet also das 1. Low Nibble nicht. bzw zu siehst es nicht.

Hast du mal Daten von einer Anderen Startaddresse gelesen? Vllt. ist an 
der Startadresse für den Lesevorgang etwas faul.

Gruß

Tec

: Bearbeitet durch User
von Pete K. (pete77)


Lesenswert?

Vielleicht hilft es, das Programm hier anzuhängen.

von M. Н. (Gast)


Lesenswert?

Tec N. schrieb:
> Bei deinen Daten sieht man doch das Problem:
> FA B8 ... auf der Karte wird als FB 80 gelesen. Dir fehlt also nur das
> A.
> Deine Karte sendet also das 1. Low Nibble nicht. bzw zu siehst es nicht.
>
> Hast du mal Daten von einer Anderen Startaddresse gelesen? Vllt. ist an
> der Startadresse für den Lesevorgang etwas faul.

Das habe ich auch bemerkt. Allerdings repariert sich das ganze nach 
einigen Bytes und die Daten sind korrekt.
Das ganze hat irgendwie nichts mit dem SDIO Modul zu tun, da ich mit dem 
Logicanalyser die Daten exakt gleich sehe.

Das Programm ist momentan nicht zur Hand, kann es frühestens heute Abend 
anhängen.

Mich wundert nur, dass das ganze offenbar zu funktionieren scheint. Die 
Karte sendet auch im 4 bit Modus. Und im 1 bit Modus klappt alles.

Das Lesen eines andren Sektors bringt nichts. Habe ich bereits versucht.
Das Ergebnis ist immer das gleiche.

Ich habe auch mehrere Karten versucht. Da die Kommunikation mit dem 
Logicanalyzer gleich aussieht, kommt meiner Meinung nach nur ein Fehler 
in der Konfiguration in Frage. Allerdings habe ich nichts gefunden, was 
ein solches Verhalten triggern könnte.

von grundschüler (Gast)


Lesenswert?

M. H. schrieb:
> Das Programm ist momentan nicht zur Hand, kann es frühestens heute Abend
> anhängen.

gibt es inzwischen Fortschritte und vielleicht sogar funktionsfähigen 
code den du zur Vefügung stellen möchtest?

(möchte mein stm-407-sdio in Betrieb nehmen.)

von Karl (Gast)


Lesenswert?

Treiber selbst geschrieben?
Die cubemx Variante läuft bei mir mit 24 MHz im 4 Bit Modus gut und das 
out of the box.
 Wie sieht deine Hardware aus? Platine geätzt oder Drähte?  Ich glaube 
microchip hat eine gute AN bzgl. Layout und timings.

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.