Hallo, ich habe ein Problem bei der Implementierung von FatFs. Meinen Code habe ich bereits als zip-File angehängt. Ich benutze einen ATMEGA1284P und einen 16MHz Quarz. Mein Evalboard versorge ich mit 3,3V damit die SD-Karte keine Probleme macht. Um ISP und SPI zu trennen habe ich 1k Widerstände vor die SD Karte gesetzt. Meine Fuses sind 0xFD, 0xD3, 0xFD Nun zu meinem Problem. Wenn ich das Programm starte läuft alles erst mal ganz gut. Ich kann die Karte initialisieren und mounten. Dann starte ich die Funktion f_open. Als Fehler rückgabe der Funktion bekomme ich FR_NO_FILESYSTEM. Daher überprüfte ich dich Funktion check_fs innerhalb der Funktion find_volume (ebenfalls in f_open). Dabei stellte ich fest, dass die boot record signature nicht erkannt wird. Also habe ich mit dem HexEditor mir mal die Signatur angesehen, die auf der SD Karte liegt. Meine SD Karte hatte ich zuvor FAT32 mit Sektorgröße 512 formatiert. Und in den ersten Sektoren sind die letzten Byte immer mit 0xAA55 belegt. Ein Fehler in der Formatierung liegt also nicht vor. Da ich keinen JTAG Programmer zur Hand habe sondern nur ISP kann ich leider nicht genau auslesen, was stattdessen eingelesen wird. Daher habe ich ein Digitaloszilloskop zur Hand genommen und mir die Übertragung angesehen. Dazu habe ich mir den die Funktion rcvr_datablock mit Portbits markiert um genau den Empfang der 512Byte am Oszi erkennen zu können. Und dabei stellte ich fest, dass das erste Byte (0xEB) noch stimmt. Das zweite jedoch schon nicht mehr (0x58 wird zu 0x20) und in etwa die letzten 32 Byte (kann auch sein, dass ich mich um 1-2 verzählt habe) sind 0xFF. Ich habe den Code durchgesehen und weiß langsam nicht mehr wo ich suchen soll. Es wäre schön, wenn jemand anderes meinen Code zumindest mal laufen lässt, und nachsieht ob bei ihm dasselbe Problem besteht. Oder mir einen Tipp gibt wo ich noch suchen kann, bzw. was ich sonst noch tun kann. Vielen Dank schon jetzt für die Hilfe!
DoBr schrieb: > Also habe ich mit dem HexEditor mir mal die Signatur angesehen, die auf > der SD Karte liegt. Mit welchem? Viele zeigen Dir nur den Inhalt der 1. Partition an, nicht aber die Partitionstabelle, weil das u.a. Admin Privilegien erfordert. Die Partitionstabelle und der 1. Sektor einer FAT Partition enden gemeinerweise beide auf 0x55 0xAA. DoBr schrieb: > Meine SD Karte hatte ich zuvor FAT32 mit Sektorgröße > 512 formatiert. Dadurch wird die FAT vergrößert und man muss viele zusätzliche Schreibzugriffe drauf machen. Solange man nicht entsetzlich viele kleine Dateien unterbringen möchte, sind 32 KB Cluster für µC Anwendungen wesentlich besser geeignet. Ist das eventuell eine SDHC Karte >= 16 GB? Die verwenden einen anderen Code in der Partitionstabelle, den manche FAT Implementierungen nicht kennen.
Hallo, danke für die schnelle Antwort. Ich verwende HxD mit Administratorrechten. Ich habe nur eine Partition. Die Sektoren 0-3 enden alle mit 0x55 0xAA. Es wird mit dem Code von FatFs jedoch Sektor 0 ausgelesen. Die Clustergröße habe ich verwendet, da Chan sie auf seiner Homepage als "übliche" Clustergröße bezeichnete und ich mir somit sicher sein konnte, dass er seinen Code damit getestet hat. Die SD Karte hat 512MB und ist somit keine SDHC Karte. FATFS würde sonst auch einen anderen Fehler melden, das habe ich aus Interesse schon vorher mal getestet.
@ DoBr (Gast) >ich habe ein Problem bei der Implementierung von FatFs. Du meinst das von ELMChan? >Ich benutze einen ATMEGA1284P und einen 16MHz Quarz. Mein Evalboard >versorge ich mit 3,3V damit die SD-Karte keine Probleme macht. Gut. >Um ISP und SPI zu trennen habe ich 1k Widerstände vor die SD Karte >gesetzt. SCHLECHT! Und unnütz! Pack einen Pull-Up an das Chip Select der SD-Karte und gut! KEINE Widerstände. Bei vollem SD-Takt holst du dir da ordentlich Probleme an den Hals! >Ich habe den Code durchgesehen und weiß langsam nicht mehr wo ich suchen >soll. Der Code ist OK! Der die seit Jahren im Umlauf und gut getestet! Das Problem liegt höchstwahrscheinlich an deinem Hardwareaufbau!
@DoBr (Gast) >Die SD Karte hat 512MB und ist somit keine SDHC Karte. FATFS würde sonst >auch einen anderen Fehler melden, das habe ich aus Interesse schon >vorher mal getestet. FatFs arbeitet auch mit SDHC Karten.
Ja ich verwende das von ElmChan Vielen Dank! Ich habe die Widerstände ausgelötet, und jetzt geht es. Da kann ich mich ja zu tode suchen, warum empfielt Atmel so einen Kram, wenn es nicht geht Meinst du ich bekomme Probleme mit dem ISP, wenn ich zusätzlich noch ein Schieberegister und einen Relaistreiber über die SPI ansteuere?
@ DoBr (Gast) >Ich habe die Widerstände ausgelötet, und jetzt geht es. Da kann ich mich >ja zu tode suchen, warum empfielt Atmel so einen Kram, wenn es nicht >geht Auch bei Atmel arbeiten manchmal Praktikanten, die ohne ausreichende Kontrolle was veröffentlichen dürfen ;-) >Meinst du ich bekomme Probleme mit dem ISP, wenn ich zusätzlich noch ein >Schieberegister und einen Relaistreiber über die SPI ansteuere? Nicht, wenn man es richtig macht (tm). Der Trick ist einfach, jedes Chip Select per externem Pull-Up zu deaktivieren, wenn der AVR programmiert wird. Dann sind alle SPI-ICs ruhig.
@ DoBr (Gast) >>Daher habe ich ein Digitaloszilloskop zur Hand genommen und mir die >>Übertragung angesehen. >Ich habe die Widerstände ausgelötet, und jetzt geht es. Da hast du an der falschen Stelle gemessen oder dein Oszi ist eine 10 MHz Gurke. Mach die Widerstände nochmal rein und miss alle Signale an BEIDEN Seiten der Widerstände und staune!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.