Hallo,
wir haben mit dem FAT32 Treiber eine kleine gemeine Merkwürdigkeit. Eigentlich hatte ich die schon im November 2016 mal als Bug gemeldet und als behoben betrachtet. Der Kunde für den wir die Entwicklung übernommen haben, hat auch einige Monate keine weitere Fehler gemeldet. Die ist aber eher der Tatsache geschuldet, das wir an völlig anderen Teilen der Software gearbeitet haben. Jedenfalls sind wir jetzt fast durch und eigentlich nur noch am testen. Und siehe da der Bug ist wieder (schon wieder oder immer noch) da.
Unter Umständen tauchen auf der SD-Karte Dateien auf die es so nicht geben kann. Siehe Bild 1. Im Windows-PC sieht die Karte völlig korrekt aus, zeigt keine Fehler und eine erzwungene Fehlerbehebung meldet hinterher auch "ES WAR ALLES OK". In fast allen alten Fällen ist danach die Karte auch wieder fehlerfrei gewesen. Jetzt hilft das auch nicht mehr. Die fehlerhaften Dateien sind immer noch da. Sie tauchen auch in unterschiedlichen Verzeichnissen auf, dann immer mit einigen Dateien im Schlepptau die dort nicht hingehören und auch garnicht da sind. Siehe Bild 2.
Beim Erzeugen der Dateien kann eigentlich auch kein Fehler passieren, den wir schreiben immer ein vielfaches von 512 Byte:
Wenn ich mir die Dateien dann anschaue, sind alle Daten völlig korrekt geschrieben. Es gibt auch keine Datei die beim Einlesen falsche Blöcke hat. Ausschließlich Auflisten der Verzeichnis-Struktur ist das Problem.
Function ListAllDirectory(Path:String[32]):Byte;
var SR:TSearchRec;
Ret:Byte;
Begin
Ret:=0;
if F16_FindFirst(Path, '*.*', faAnyFile, SR) then
repeat
mDelay(5);
Inc(Ret);
until not F16_FindNext(SR);
Endif;
Return(Ret);
end;
Im Testprogramm tauchen die Dateien dann auch (leider) zuverlässig auf. Nun sind meine Kenntnisse der FAT32 nicht so wirklich genug um den Fehler auf der Blockebene zu erkennen. Ich habe eine der 8GB SD-Karten mit dem Win32DiskImager kopiert und als RAR gepackt, dann ist das nur knapp 4 Mbyte groß.
Wenn noch Infos gebraucht werden einfach Bescheid geben. Ich bin hier ziemlich ratlos.
Gibt es ein Programm, womit man die Verzeichniss-Struktur untersuchen kann?
Einen schönen Tag
rage
wir haben mit dem FAT32 Treiber eine kleine gemeine Merkwürdigkeit. Eigentlich hatte ich die schon im November 2016 mal als Bug gemeldet und als behoben betrachtet. Der Kunde für den wir die Entwicklung übernommen haben, hat auch einige Monate keine weitere Fehler gemeldet. Die ist aber eher der Tatsache geschuldet, das wir an völlig anderen Teilen der Software gearbeitet haben. Jedenfalls sind wir jetzt fast durch und eigentlich nur noch am testen. Und siehe da der Bug ist wieder (schon wieder oder immer noch) da.
Unter Umständen tauchen auf der SD-Karte Dateien auf die es so nicht geben kann. Siehe Bild 1. Im Windows-PC sieht die Karte völlig korrekt aus, zeigt keine Fehler und eine erzwungene Fehlerbehebung meldet hinterher auch "ES WAR ALLES OK". In fast allen alten Fällen ist danach die Karte auch wieder fehlerfrei gewesen. Jetzt hilft das auch nicht mehr. Die fehlerhaften Dateien sind immer noch da. Sie tauchen auch in unterschiedlichen Verzeichnissen auf, dann immer mit einigen Dateien im Schlepptau die dort nicht hingehören und auch garnicht da sind. Siehe Bild 2.
Beim Erzeugen der Dateien kann eigentlich auch kein Fehler passieren, den wir schreiben immer ein vielfaches von 512 Byte:
Code
Procedure SaveDataFromFRAMToSD(Count:Byte);
var uCount:Word;
Temp:Array[0..511] of Byte;
res: word;
bool:Boolean;
fHandle:File of Byte;
Begin
bool := F16_FileAssign(fHandle, ActualSaveFolder, ActualSaveFile);
if bool then
bool := F16_FileAppend(fHandle);
if Bool then
For uCount:=0 to Pred(Count) do
ReadDataFromFRAM(uCount*512,@Temp,512);
F16_BlockWrite (fHandle,@Temp,512,res);
endfor;
F16_FileClose(fHandle);
else
F16_FileClose(fHandle);
endif;
endif;
end;
var uCount:Word;
Temp:Array[0..511] of Byte;
res: word;
bool:Boolean;
fHandle:File of Byte;
Begin
bool := F16_FileAssign(fHandle, ActualSaveFolder, ActualSaveFile);
if bool then
bool := F16_FileAppend(fHandle);
if Bool then
For uCount:=0 to Pred(Count) do
ReadDataFromFRAM(uCount*512,@Temp,512);
F16_BlockWrite (fHandle,@Temp,512,res);
endfor;
F16_FileClose(fHandle);
else
F16_FileClose(fHandle);
endif;
endif;
end;
Wenn ich mir die Dateien dann anschaue, sind alle Daten völlig korrekt geschrieben. Es gibt auch keine Datei die beim Einlesen falsche Blöcke hat. Ausschließlich Auflisten der Verzeichnis-Struktur ist das Problem.
Code
Function ListAllDirectory(Path:String[32]):Byte;
var SR:TSearchRec;
Ret:Byte;
Begin
Ret:=0;
if F16_FindFirst(Path, '*.*', faAnyFile, SR) then
repeat
mDelay(5);
Inc(Ret);
until not F16_FindNext(SR);
Endif;
Return(Ret);
end;
Im Testprogramm tauchen die Dateien dann auch (leider) zuverlässig auf. Nun sind meine Kenntnisse der FAT32 nicht so wirklich genug um den Fehler auf der Blockebene zu erkennen. Ich habe eine der 8GB SD-Karten mit dem Win32DiskImager kopiert und als RAR gepackt, dann ist das nur knapp 4 Mbyte groß.
Wenn noch Infos gebraucht werden einfach Bescheid geben. Ich bin hier ziemlich ratlos.
Gibt es ein Programm, womit man die Verzeichniss-Struktur untersuchen kann?
Einen schönen Tag
rage
Attachments
Filename: | SDCardError.jpg |
Filesize: | 130.08 KB |
Title: | |
Download counter: | 172 |
Filename: | SDCardFehler01.jpg |
Filesize: | 180.94 KB |
Title: | |
Download counter: | 175 |
Filename: | SDCardFehler02.jpg |
Filesize: | 179.21 KB |
Title: | |
Download counter: | 179 |
Filename: | SDCardError.rar |
Filesize: | 3.92 MB |
Title: | |
Download counter: | 30 |
Filename: | FAT32test.rar |
Filesize: | 383.68 KB |
Title: | |
Download counter: | 32 |