Probleme mit SD-Karte

Gast #1474377
Hallo zusammen,

bei der Benutzung einer SD-Karte ist bei mir ein seltsamer Fehler 
aufgetreten. Ich habe eine größere Menge Daten auf die Karte 
geschrieben, was auch funktioniert hat. Heute hab ich einen einzelnen 
Block geschrieben, dabei gab es keine Fehlermeldung. Das Lesen hat 
zunächst auch (mehrere Male) funktioniert. Allerdings, nachdem ich die 
Versorgung ausgeschalten habe, waren die neuen Daten weg und nur die, 
die ich davor geschrieben hatte, auf den Speicherplätzen. Solang ich 
einen Reset über den Programmer gemacht habe, waren alle Daten da.

Kennt jemand dieses Verhalten?
Hab ich vielleicht etwas übersehen/vergessen?

Danke für eure Hilfe!
Gast #1474707
Controller ist ein Atmega32 programmiert in Assembler.
Fertige Library hab ich nicht verwendet.

Fehler in der Schaltung kann ich weitgehend ausschließen, da die 
Initialisierung einwandfrei funktioniert und auch beim Lesen/Schreiben 
keine Fehlermeldungungen angegeben werden(Responce=0).
(Firma: Raich Gerätebau & Entwicklung) #1474775
Ja, so ein Problem hatte ich auch schon. Bei mir lags daran, daß ich 
nach dem Schreiben die busy-phase der Karte nicht gepollt habe, sondern 
erst beim nächsten command.Bei manchen karten hat's nix gemacht, bei 
anderen(billigen) war dann der letzte Schreibvorgang nicht auf der 
Karte.Manche Karten können offenbar die Daten nur dann aufs Flash 
schreiben, wenn es einen Clock gibt.

Grüße
Gast #1474884
Hallo Gebhard,

deinen Vorschlag habe ich jetzt umgesetzt. Aber das Problem bleibt das 
Gleiche.
Muss man die Karte auf eine bestimmte Weise abschalten, den Master 
abmelden? Ich habe in der Richtung nichts im Datenblatt gefunden und 
gehe davon aus, dass man einfach den Strom wegnehmen darf.
(Firma: Raich Gerätebau & Entwicklung) #1474897
Gast schrieb:
> Muss man die Karte auf eine bestimmte Weise abschalten, den Master
> abmelden? Ich habe in der Richtung nichts im Datenblatt gefunden und
> gehe davon aus, dass man einfach den Strom wegnehmen darf.

Hmm... Ich hab immer nur die karte nach dem letzten Schreibvorgang aus 
dem bestromten Sockel gezogen, das war nie ein Problem.
Was noch dein Problem verursachen könnte ist die CS Leitung.Bei mir 
haben alle Kartentypen funktioniert, wenn ich bei jedem Byte das CS 
gesetzt/gelöscht habe. Beim blockweise Setzen/löschen von CS gabs bei 
manchen Karten Probleme.

Grüße
Gast #1474914
Ja, dass mit dem CS was sein kann, dachte ich mir auch. Nur was mir 
völlig unerklärlich ist, ist dass die Daten solange lesbar sind (da 
sind), solange die Versorgung nicht unterbrochen war.

Ich probier mal den Chip Select nach jedem Byte aus und melde mich dann 
wieder.
(Firma: TravelRec.) Persönliche Seite #1474923
Das mit dem ChipSelect nach jedem Byte ist Unsinn. Es gibt klare 
Spezifikationen, wie mit dem ChipSelect bei den verschiedenen Commands 
umzugehen ist. Das Command selbst wird mit aktivem /CS gegeben, 
Responses werden bei aktivem /CS gelesen, dann wird das /CS gelöscht und 
wieder aktiviert, damit die Daten gelesen oder geschrieben werden 
können. Während Block-Operationen ist das /CS die gesamte Zeit aktiv.
Gast #1474950
Das hab ich im Datenblatt jetzt auch nachgelesen. Probiert hab ichs 
trotzdem. Die Karte scheint auch einfach weiterzuarbeiten.Zumindest gibt 
sie ein Null-Responce. Allerdings könnte das ja auch ein Busy-Token 
sein. Danach kann ich ja auch wieder lesen, das heißt, an der 
Übertragung kann es kaum liegen.
Gast #1475133
Busy kann ja erst auftreten, wenn die Daten schon gesendet sind. Vor dem 
Senden eines Commands frag ich auch BUSY ab. Nach dem Rat von Gebhard 
frag ich es auch nach dem Empfang des Data-Response ab bis die Karte 
bereit ist.
Gast #1475200
Naja, das Problem ist, dass ich den Block nicht fest speichern kann. Den 
SPI hab ich nicht mitgeloggt, hab keine Möglichkeit dazu.

Ich hab keine Erklärung für das Verhalten. Bin Ratlos...
Gast #1482797
Jetzt habe ich nochmals versucht das Problem einzugrenzen. Wenn ich die 
Karte bei laufendem Controller abziehe (Hot unplug) und anschließend den 
Controller über den Programmieradapter aus dem AVRStudio heraus resette, 
sind die Daten weg (Init der Karte dann auf Tasterdruck). Führe ich nur 
den Reset - ohne die Karte abzuziehen und wieder einzustecken - durch, 
so bleiben die Daten erhalten.


Ich habe hier im Forum mal gelesen, dass es ein Tool gibt, mit dem man 
eine unformatierte Karte auslesen kann. An den Namen erinnere ich mich 
nicht mehr. Könnt ihr mir ein solches empfehlen? Das würde ja auch eine 
Möglichkeit zur Fehlersuche bieten.
(Firma: Raich Gerätebau & Entwicklung) #1482803
So, laß uns festhalten: Die Daten auf der SD-Karte sind weg, wenn man 
die Versorgung unterbricht. D.H. die Daten wurden nicht geflasht, oder, 
was ich noch gar nicht nachgefragt habe,das Filesystem, so vorhanden 
,schließt das File nicht korrekt. Was für ein Filesystem verwendest du?.
Unabhängig davon könntest du mal probieren, nach den Daten noch einen 
dummy-block zu schreiben. Da sollten dann wohl die Daten drauf sein.

Grüße
Gast #1482820
Hallo Gebhard,

ich verwende kein Dateisystem. Bzw. nur ein sehr primitives lineares. 
Für diese Tests habe ich aber lediglich einen Block an einer bestimmten 
Adresse geschrieben und jeweils geschaut, wann die Werte gleich sind.
Dass die Daten nicht ins Flash geschrieben wurden, habe ich mir auch 
schon gedacht. Allerdings kann man das ja von außen nicht beeinflussen, 
d.h. wäre dies der Fall, dann wäre die Karte im Grunde kaputt.

Genau, die Daten auf der Karte sind weg, wenn (und nur wenn) ich
die Versorgung unterbreche. Dann könnte höchstens noch ein Fehler in der 
Initialisierung sein, der sich aber je nach Reset(Warmstart/Kaltstart) 
unterschiedlich verhalten müsste.
Gast #1482845
Was meinst du mit dummy block? So wie ich es gemacht habe, einfach einen 
Block (512Byte) auf die Karte schreiben, oder? Mittlerweile hab ich auch 
den Block als ganzen (ohne Routine, die auch Blöcke kleiner 512B 
verarbeitet) geschrieben und gelesen. Das Ergebnis war das gleiche.

Für heute mach ich Feierabend. Ich meld mich morgen wieder.

Danke für die Hilfe!

Grüße
Gast #1484941
Danke für die Infos.

Mit dem HxD-Editor hab ich mir jetzt die Speicherstelle angesehen, bei 
der das Problem immer aufgetreten ist. Das Verhalten war genau das 
gleiche wie in meiner Applikation! Solange die Karte eingesteckt war, 
hat das Byte gestimmt, so wie ich es eingetragen habe. Und auch dann, 
wenn ich das HxD-Fenster geschlossen habe und die Karte neu ausgelesen. 
Nur nach dem Abziehen waren wieder Nullen an besagter Stelle. Zur 
Kontrolle hab ich auch an einer anderen Stelle ein Byte 
geschrieben/verändert. Dieses war auch nach der Stromunterbrechung noch 
zu lesen.

So wie es aussieht, ist die Karte also an dieser Stelle kaputt oder hat 
einen Firmwarefehler.

Wenn an dieser Stelle ein Write Protect gesetzt wäre (ich weiß nicht, ob 
das bei dieser Karte überhaupt geht; ist eine Transcend 1GB), müsste 
beim Schreiben doch eine Fehlermeldung zurückgegeben werden, oder?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.