Forum: Mikrocontroller und Digitale Elektronik SD-Karte speichert nach Lust und Laune


von Benny (Gast)


Lesenswert?

Hallo alle zusammen,

Ich bin gerade dabei mir ein GPS-Logger zu basteln. Ist eigentlich alles 
soweit fertig, blos hab ich jetzt ein Problem...

Also ich schalt ganz normal ein, Gerät wartet bis ich empfang hab, und 
schon gehts auch los mit einlesen und speichern. (hab atmega8 mit 16Mhz)
Am anfang initialisiere ich die Karte, les 6 Sätze (NMEA) ein und 
schreib die dann auf die Karte. Wenn ich dann ausschalte oder einfach 
die Karte ziehe, kann es sein dass ncihts gespeichert wurde. Ab und zu 
klappts, aber nich so oft...
Kann es vielleicht daran liegen, dass ich einfach Saft wegnimm während 
er speichern will und er dann halt alles auf 00 macht?
Wie könnt ich da was dagegen tun?

mfg Benny

von MicroMann (Gast)


Lesenswert?

Wenn ich mich recht entsinne speichert die SD-Karte einen Block von 512 
Bytes im internen Puffer und schreibt den erst auf die Karte wenn er 
voll ist. Wenn du also vorher den Saft wegnimmst, sind die Daten futsch.

von Benny (Gast)


Lesenswert?

Das is klar, aber wenn ich auch schon 15Blöcke geschrieben hab... dann 
ist nicht nur der aktuelle block futsch, sondern alles andere ist auch 
weg

von MicroMann (Gast)


Lesenswert?

Im Umkehrschluss ist also immer alles ok, wenn du ordnungsgemäß das 
Schreiben beendest ?

von Benny (Gast)


Lesenswert?

Ok das muss ich noch schnell testen. Weil ich seh ja nicht wenn er 
schreibt, aber ich schick jetzt mal an USART wenn er schreibt und wenn 
er schreiben beendet hat. wenn er fertig ist zieh ich stecker und gugg 
was los ist.

von Benny (Gast)


Lesenswert?

So habs getestet. Also es ist egal ob er grad schreibt oder nicht.
Kann mir das wirklich nicht erklären.

von Simon K. (simon) Benutzerseite


Lesenswert?

Das liegt vermutlich daran, dass deine FAT-Implementierung erst den 
FAT-Eintrag auf die erstellte Datei erstellt, wenn du die Datei 
schließt. Oder so ähnlich.

von Benny (Gast)


Lesenswert?

Nur benutz ich kein FATsystem^^
Ich schreib einfach direkt ab den ersetn sektor und schaus dann per 
Hexeditor an

von Ronny (Gast)


Lesenswert?

Mal ganz neugierig gefragt:

Unter welchen Umständen wird denn überhaupt was auf die Karte 
geschrieben?

von Benny (Gast)


Lesenswert?

Also ich lass n Satz einlesen und schreib den in data[512]. dann kommt 
der nächste usw.... bis 6 erreicht sind. (6 weil die Sätze max. 82 
zeichen lang sind und bei 512byte 6 am besten is). dann schreibt er 
data[512] auf die karte und beginnt dann wieder von vorne. Wolltest du 
das wissen?

von Karoly Kovacs (Gast)


Lesenswert?

Habe eine Idee, weiss nicht, ob es wirklich so ist.
(Ich schreibe auch SD-Karte, und bei mir geht es.)

Dein Beispiel war: 6-mal 82 byte = 492 byte. Es sind noch überhaupt 
nicht 512 byte!

Also, meine Meinung nach, man muss die Sektoren "komplettieren", 
ähnlich, wie hier:
Beispiel von MrMidi2 (siehe Suchfunktion!); Copyright: (c) Simon Lehmayr 
und K. John '2B|!2B' Crispin

void mmc_complete_write(void) {
  while (bufpos < 512) {
    MMC_get_sec_next();
    bufpos++;
  }
  MMC_get_sec_stop_w();
}

wo:

// stop write process of a sector
static void MMC_get_sec_stop_w(void){
  if (mmc_open) {
    // get the 2 CRC bytes
    spi_io(0xff);
    spi_io(0xff);
      // wait while card is busy
      while (spi_io(0xff) != 0xff);
    // give enough time
    MMC_cleanup();
    mmc_open = 0;
  }
};

// stops the MMC transmission and sends the clock cycles needed by the 
mmc for cleanup
static void MMC_cleanup(void){
  // deselect the MMC card
  MMC_CS_deselect();
  // pulse the SCK 16 times
  spi_io(0xff);
  spi_io(0xff);
};

und so weiter, siehe MrMidi2!

Bei mir geht es tadellos, wenn ich sogar die Karte beim Schreiben 
wegziehe, bleibt nur (natürlich) das letzte Block "falsch".

Karoly

von Benny (Gast)


Lesenswert?

also ich hab die restlichen bytes mit 00 auffüllen lassen. aber werde 
dass hier noch teste. Vielen Dank erstmal noch für eure Antworten !!!

mfg Benny

von Karoly Kovacs (Gast)


Lesenswert?

Es geht nicht nur zum Auffüllen, sondern (siehe die Funktionen!), den 
Datentransfer zur SD-Karte "ordentlich" schliessen!

Wünsche viel Erfolg damit!

Karoly

von Benny (Gast)


Lesenswert?

Ah ok ich hab die 16 clocks am ende nicht. mal guggen obs daran liegt.

von Benny (Gast)


Lesenswert?

Ok Also ich habs jetzt ungefähr 5 mal testen können (doofer empfang mit 
gps^^)
und es hat immer funktioniert. Also ich geh davon aus, dass es das war. 
Danke für eure Hilfe!

Gruß Benny

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.