Forum: Mikrocontroller und Digitale Elektronik SD Karte Sektor auslesen unzuverlässig


von Martin (Gast) (Gast)


Lesenswert?

Hallöchen, hab folgendes Problem:

Controller Freescale MC9S12X,
über SPI an SD-Karte (Toshiba 16MB oder SanDisk 128MB),
Initialisierung und OCR, CSD, CID Register auslesen kein Problem.
Taktrate 40kHz ... 4MHz alles soweit ok ...

Ich lasse zyklisch (alle 5 sek) immer den gleichen Sektor auslesen:

Beim Auslesen (512Byte) passiert es vielleicht jedes dritte mal, dass 
die ersten 10 Byte des Sektors falsch sind (stattdessen werden 10 Byte 
aus der Mitte des Sektors übertragen). Die restlichen 502 Byte sind dann 
in Ordnung.

Was auch ab und zu vorkommt:
Vor dem eigentlichen Sektor (512Byte) sollen ja zuerst mal so 60 bis 70 
"FF"- Bytes und dann das Startbyte "FE" und danach die 512 Byte Daten 
kommen. Manchmal fehlt aber das Startbyte einfach ohne Erklärung, die 
"FF"s sind da und die empfangenen Daten sind auch korrekt - nur das 
Startbyte fehlt. Wie kann das sein? Arbeiten die Karten derart 
unzuverlässig oder was ist da los?

Hat Jemand schon mal ähnliche Erfahrung gemacht? Probiere schon den 
ganzen Tag rum und bin kurz vorm verzweifeln ...

von srb (Gast)


Lesenswert?

Hallo,
ich habe schonmal ähnliches gehabt. Vor allem hatte ich Probleme mit 
SD-Karten, aber nicht mit MMC. Nach langem gesuche bin ich 
dahintergekommen, daß mein SPI ganz einfach zu schnell war...

von antworter (Gast)


Lesenswert?

Meine Erfahrung bezüglich Geschwindigkeit:

habe auch eine SD-Karte am laufen (allerdings an einem ARM7) - das geht 
problemlos bis 18,43 MBit SPI-Geschwindigkeit.

Das ganze funktioniert mit Standardlitze (max. 6cm Kabellänge).

Habe die SD-Karte direkt an den I/O-Pins (keine Widerstände).

Der Kartenhalter stammt aus einem alten Kartenlesegerät.



Fazit: Sind Deine Parameter in diesen Grenzen, sollte es eigentlich 
nicht an der SPI-Geschwindigkeit liegen.

von Martin (Gast) (Gast)


Lesenswert?

Das mit der SPI-Geschwindigkeit hatte ich mir auch schon überlegt, aber 
selbst bei 40kHZ ist das Problem aufgetreten. Langsamer kann der 
Controller gar nicht g

Verdrahtet hab ich das System mit Fädeldraht, je ca. 5cm Draht, dann an 
den SPI-Pins nochmal 5cm Litze für die Oszi-Tastköpfe ... die 
Kontaktiereinrichtung ist gänzlich neu (von Farnell). Bauteile hängen 
keine zischen Controller und Karte, bis auf 470nF Kondensator zwischen 
+3,3V und GND.

Frage an srb(Gast): Wenn Du die SPI langsamer gemacht hast, war das 
Problem dann beseitigt? Wie schnell war denn Deine SPI? und Bei welcher 
Taktrate war dann die Grenze?

Was mir grad einfällt: Viele Codes für SD-Karten bedienen den 
"SlaveSelect"-Pin manuell durch Bit setzen/rücksetzen an einem I/O Port. 
Bei mir wird das automatisch über die SPI-Schnittstelle gemacht? -sieht 
auf dem Oszi auch ganz ok aus. Meint Ihr, das könnte ein Problem sein?

Frage an antworter(Gast): Ich verwende die einfachsten SD-Karten - also 
nix mit Ultra oder Highspeed oder so. Laut CSD-Register ist der 
Standardwert mit 25MHz eingetragen - gilt das aber auch für die SPI oder 
nur für den SD-Mode?

Hach, ich hab immer noch keine Idee, warum s net funktioniert :-(

von antworter (Gast)


Lesenswert?

@Martin:

Ich benutze eine noname-SD-Karte (256MB). Da ich noch am implementieren 
bin, ist das Auslesen/Setzen der Register noch nicht enthalten.

Die Karte spreche ich von Anfang an mit hoher SPI-Geschwindigkeit (18 
MHz) an - geht wunderbar.

Meine Befehlsfolge zum Initialisieren:

CMD0 (go idle)
CMD1 (activate) (nicht ACMD41)

Anschließend kann ich die Karte ganz normal benutzen (bis jetzt: 
SetBlockSize & BlockRead implementiert).

Noch ein Tip: Richtig verläßlich lief es erst, nachdem ich die 
Timeout-Werte für die Operationen sehr hoch angesetzt habe (++100) - 
dies dürfte der hohen SPI-Geschwindigkeit geschuldet sein.



Viel Spaß & Erfolg :-)


P.S.: Der Abblockkondensator (100nF) hängt in 2-3cm Entfernung von den 
SD-Pins.

von srb (Gast)


Lesenswert?

@Martin
Ich hatte meinen SPI mit 16MHz betrieben. Hab dann auf 12MHz 
runtergeschraubt und seither funktioniert es mit bisher allen mir zur 
Verfügung stehenden SD- und MMC-Karten.

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.