MMC-Ansteuerung: fat_open schlägt fehl (roland riegel)

Gast #1880118
Lesenswert?
• ▲
▼
Hallo,

wie schon im Betreff angesprochen habe ich ein Problem mit der 
fat_open() Funktion aus Roland Riegel's FAT-Implementation. Folgender 
Aufbau:

ATmega16 mit 16Mhz an Labornetzteil-3,3V (funktioniert und die Pegel 
sind auch an der SD-Karte vorhanden. Andere Testprogramme laufen 
ebenfalls einwandfrei bei den 3,3V). Ich nutze außerdem eine 1GB-MicroSD 
Karte mit Adapter, zeitweise auch eine 32MB-MicroSD.

Die Initialisierung funktioniert einwandfrei, somit fällt ein Fehler in 
der Schaltung ja eigentlich raus, oder? Ich nutze folgenden Code mit 
der Roland-Riegel-FAT/MMC-Implementation:
1
if (!sd_raw_init()) {
2
    continue;
3
}
4

5
partition = partition_open(sd_raw_read,
6
        sd_raw_read_interval, sd_raw_write, sd_raw_write_interval, 0);
7

8
if (!partition) {
9
    partition = partition_open(sd_raw_read, sd_raw_read_interval,
10
            sd_raw_write, sd_raw_write_interval, -1);
11
    if (!partition) {
12
        continue;
13
    }
14
}
15

16
fs = fat_open(partition);
17
if (!fs) {
18
    continue;
19
}

und am fat_open() scheitert es. fat_open gibt immer 0 zurück.

Bislang liefen meine "Debugging"-Versuche mit einer Blinkenden LED, aber 
ich bin mir sicher, dass es an der Stelle hakt. Davor läuft alles 
wunderbar.

Ein weiterer Versuch, die SD-Karte "roh" auszulesen, war erfolgreich; 
Die Ausgabe erfolgt über einen Lautsprecher, und ich hatte vorher auf 
der SD-Karte eine WAV-Datei erstellt. Die wird auch nach einigem Piepsen 
und Rauschen abgespielt, die Daten kommen also irgendwie beim uC an aber 
das Dateisystem will nicht so wie ich es will.

Ich habe bereits mit Linux (fdisk, ist das die richtige vorgehensweise?) 
und Windows formatiert - kein Erfolg. Auch ein wechsel von FAT16 auf 
FAT32 brachte nichts - was mache ich falsch bzw. was könnte ich noch 
ausprobieren?

Für alle Ideen bin ich dankbar.

Gruß mulax
Gast #1880125
Lesenswert?
• ▲
▼
Danke, das hatte ich auch schonmal ausprobiert. Hier habe ich allerdings 
das Problem gehabt, dass das Dateisystem der Karte überschrieben wurde?? 
Anstatt eine Datei zu lesen, hat das Ding mir die selbe Datei nochmal 
ins Verzeichnis geschrieben. Die Schreiboperationen haben allerdings 
funktioniert! Unter Windows lagen dann tatsächlich 2mal die selbe Datei 
im Root-Verzeichnis, daher bin ich zu Roland Riegel gewechselt. Ich 
werde es aber nichtsdestotrotz nochmal ausprobieren.
Gast #1880322
Lesenswert?
• ▲
▼
So, es funktioniert! Zwar nicht so wie ich anfangs gedacht hatte mit der 
Implementation von Roland Riegel, aber mit der AVR-FAT32-lib.
Lösung: Im betreffenden Thread wurde einmal kurz das Thema mehrere 
Sektoren pro Cluster angesprochen. Ich habe die SD-Karte nun unter Linux 
formatiert und - siehe da - es funktioniert! Verwendeter Befehl:
mkdosfs -s 4 -F 32 -I /dev/sdb

Dankeschön! Gruß mulax

Antwort schreiben

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.

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.