Forum: Mikrocontroller und Digitale Elektronik SD Karte "Bitfehler" im Ordnernamen?


von Christian P. (peterfrosta)


Lesenswert?

Hallo Zusammen. Ich nutze für die Verwenung einer SD Karte mit einem 
Atmega2650 die Datein von Mikrocontroller.net
http://www.mikrocontroller.net/articles/AVR_FAT32

Eigentlich Funktioniert alles super.
Nur jetzt ist mir ein seltsamer Fehler aufgefallen.

In meiner main() wird vor der  while(1)  genau einmal folgendes 
ausgeführt:

  ffmkdir("Data");
  ffmkdir("Kunden");
  ffmkdir("Abrechnungen");

Der Ordner "Kunden" wird aber immer als "Kunddn" angelegt! Zumindest 
zeigt der Windows Explorer es so an.


Schreibe ich jetzt Folgendes, funktioniert es:

  ffmkdir("Data");
  ffmkdir("Kunde");
  ffmkdir("Abrechnungen");

Hier werden die 3 Order wie dem Parameter entsprechend angelegt

Auch wenn ich Folgendes an diese Stelle schreibe:

  ffmkdir("Data");
   ffcd("Data");
   ffcdLower();
  ffmkdir("Kunden");
  ffmkdir("Abrechnungen");

Werden alle 3 Ordner richtig im Root-Verzeichniss angelegt.
Aber das erste Beispiel sollte doch auch funktionieren?!

Was könnt dafür die Ursache sein? Schreibe ich die 3 Ordner zu schnell 
hintereinander?
DIe SPI Schnittstelle ist auf Fmax gesetzt.
Die SD Karte erlaubt ja für SPI Fmax 25 MHz?!
Ich nutze ein 16 MHz Quartz, kann also die SPI Schnittstelle höchstens 
mit 8MHz betreiben.
Das wird wohl nicht das Problem sein? ist eine kleine Wartezeit nötig?


Danke für Anregungen und Hilfen

Gruß

von foo (Gast)


Lesenswert?

Hast du das 1. Beispiel per Copy&Paste hierher gebracht, oder 
abgeschrieben?

Manchmal stehen ja undruckbare Zeichen im String, wie z.B. ein 
Backspace, oder etwas anderes bewirkt, dass man den Wald vor Bäumen 
nicht sieht.

Du kannst dir diese Strings auch mal im Hexdump des Sourcecodes und des 
Binarys anschauen.

von Joachim B. (jar)


Lesenswert?

foo schrieb:
> Manchmal stehen ja undruckbare Zeichen im String, wie z.B. ein
> Backspace, oder etwas anderes bewirkt, dass man den Wald vor Bäumen
> nicht sieht.

den "String" vorher durch/über isalpha() schicken wäre auch ne 
Möglichkeit oder parallel Zeichen für Zeichen auch seriell auszugeben 
als ASCII und HEX und DEZ

von Christian P. (peterfrosta)


Lesenswert?

foo schrieb:
> Hast du das 1. Beispiel per Copy&Paste hierher gebracht, oder
> abgeschrieben?

Habe das erste Beispiel aufjedenfall per copy&paste  rein gebracht.
Habe das auch mehrmals geändert und wieder zurück gestellt.
Ich wollte das zunächst auch nicht glauben und hab am nächsten Tag noch 
mal geschaut.

habe auch sowas wie

  ffmkdir("Data");
  ffmkdir("Kunden\0");
  ffmkdir("Abrechnungen");
versucht. Änderte aber Nichts.

foo schrieb:
> oder etwas anderes bewirkt, dass man den Wald vor Bäumen
> nicht sieht.
Das war auch meine Vermutung ;)

Joachim B. schrieb:
> den "String" vorher durch/über isalpha() schicken wäre auch ne
Kenn diese Funktion nicht - gucke ich mir an.

> Möglichkeit oder parallel Zeichen für Zeichen auch seriell auszugeben
> als ASCII und HEX und DEZ
Das habe ich bei eigenen Funktionen gemacht. Also bei solchen, bei denen 
ich den Datei- oder Ordnernamen in einer Variablen übergebe und dann 
Dateien auswerte oder Dergleichen.

Aber die Funktion  ffmkdir(dirname[]) funktioniert sont. Der Strin ist 
eigentlich auch bekannt. Da ich ja "Kunden" übergebe, sollte Atmel 
Studio den String hinter dem "n" vernünftig abschließen?!
Aber ich versuch den String vorher ordentlich in ein Array zu packen und 
übergebe den dann an ffmkdir().

Ein Versuch ist es wert.


Was nichts gebracht hat ist ein delay vor  ffmkdir("Kunden");
einzusbauen. BZW es brachte etwas falsches. Nämlich den Ordner:

"Keden". (Hier sinds mehr als ein Bit Fehler.

Ich bin mir nicht sicher ob der String der Schuldige ist. Dort macht 
ATmelStudio ja alles slebst.

Da das hier funktioniert:

  ffmkdir("Data");
   ffcd("Data");
   ffcdLower();
  ffmkdir("Kunden");
  ffmkdir("Abrechnungen");

vermute ich das vllt bei

   ffmkdir("Data");
etwas nicht zuende läuft? das durch
   ffcd("Data");
   ffcdLower();
egalisiert wird?!

eine waaaage These... ;)

lg und danke!

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.