www.mikrocontroller.net

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


Autor: Martin (Gast) (Gast)
Datum:

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

Autor: srb (Gast)
Datum:

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

Autor: antworter (Gast)
Datum:

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

Autor: Martin (Gast) (Gast)
Datum:

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

Autor: antworter (Gast)
Datum:

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

Autor: srb (Gast)
Datum:

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

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.