Forum: Mikrocontroller und Digitale Elektronik MMC-Ansteuerung: fat_open schlägt fehl (roland riegel)


von mulax (Gast)


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

von hm (Gast)


Lesenswert?


von mulax (Gast)


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.

von hm (Gast)


Lesenswert?

Klingt nach falscher Anwendung...

von mulax (Gast)


Lesenswert?

hm schrieb:
> Klingt nach falscher Anwendung...

So erkläre er mir was er damit meint ;)

von mulax (Gast)


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

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.