mikrocontroller.net

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


Autor: Benny (Gast)
Datum:

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

Autor: MicroMann (Gast)
Datum:

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

Autor: Benny (Gast)
Datum:

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

Autor: MicroMann (Gast)
Datum:

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

Autor: Benny (Gast)
Datum:

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

Autor: Benny (Gast)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Autor: Benny (Gast)
Datum:

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

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal ganz neugierig gefragt:

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

Autor: Benny (Gast)
Datum:

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

Autor: Karoly Kovacs (Gast)
Datum:

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

Autor: Benny (Gast)
Datum:

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

Autor: Karoly Kovacs (Gast)
Datum:

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

Autor: Benny (Gast)
Datum:

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

Autor: Benny (Gast)
Datum:

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

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.