Dateizugriff Fehlerhaft bei vollen SD-Karten - Korrupte Dateien

Sehr langsamer Dateizugriff bei machen Dateien / Fehlerhafter Inhalt beim Erstellen

  • 1
  • 2
  • 3
  • Page 1 of 3
NilsMeilwes
Benutzer
Avatar
Gender:
Age: 37
Posts: 14
Registered: 05 / 2016
Subject:

Dateizugriff Fehlerhaft bei vollen SD-Karten - Korrupte Dateien

 · 
Posted: 27.03.2017 - 12:13  ·  #1
Hallo Forum,

wir haben aktuell Probleme beim Dateizugriff auf unseren SD-Karten.
Eingesetzt wird ein ATmega128-16AU mit z.B. einer Transcend microSD 2GB FAT16 oder auch einer SanDisk Ultra SDHC 8 GB FAT32 (FAT16_32 Treiber) angeschlossen über einen Hardware SPI mit folgender Config:
FAT16 = MMC_SPI, iData;
F16_MMCspeed = standard;
F16_FileHandles= 1;
F16_DirLevels = 1;
F16_StrLen = 254 ;


Compiler 5.08

Genutzt wird die SD-Karte um alle 10 min oder auch Eventgesteuert einen Datensatz von ca. 112 Zeichen pro Zeile in einer Textdatei pro Tag abzulegen.

Dies funktioniert grundsätzlich super bis es irgendwann zu einem Problem kommt, wo nicht klar ist was der Auslöser ist.
Symptom ist dann, dass das Initialisieren der SD-Karte quasi ewig dauert und der Dateizugriff einiger Dateien ebenfalls extrem langsam ist, und als Ausgabe nur leere Zeilen ergibt.
Die erste Datei in der FAT die nicht lesbar ist, ist auch nur mit unleserlichen willkürlichen Schriftzeichen gefüllt. Nach einem Neustart der Einheit an einem anderen Tag ist interessanterweise wieder eine Datei erfolgreich erstellt und befüllt worden, die Datei am darauffolgenden Tag ist wieder korrupt.

Nach Aussen hin scheint der Prozessor in diesem Moment sich aufgehängt zu haben, ein Watchdogreset erfolgt jedoch nicht. Vermutlich wird in der Routine der Wd getriggert.

Interessanterweise lassen sich alle Dateien am PC einwandfrei öffnen, auch die, indenen nur kuriose Schriftzeichen sind. Kopiert man vermeindlich defekte Dateien auf eine andere SD-Karte lassen sich diese vom AVR auch problemlos öffnen, kopiert man die gesamte SD gibt es Probleme. Dann lassen sich mitunter sogar Dateien, welche auf der OriginalSD noch lesbar sind, hier nicht mehr anzeigen.
Nicht anzeigen heißt, dass der Inhalt der SD als 00h übertragen wird. Hierbei wird das End of File offensichtlich erkannt und er springt aus der Ausgaberoutine wieder raus.
Bei manchen Dateien kommt in unterschiedlichen Abständen nur ein CR LF und er findet scheinbar kein End of File
Ich habe auch eine Datei, welche auf der Herkunfts-SD vollständig lesbar ist, welche nach dem Kopieren der gesamten SD auf der neuen SD vom AVR nur ca. die erste Hälfte der Datei angezeigt werden kann, der Rest ist dann nur noch CRLF obwohl die Datei unter Windows bis zum Ende Lesbar ist.

Ein Update auf Compilerversion 5.09.03 brachte keine Besserung.

Hat jemand schonmal ähnliche Erfahrungen gemacht?
Gibt es ggf. eine möglichkeit solche Defekte zu erkennen?

Ich habe mal die "halb"-defekte und eine ganz Defekte Datei angehängt, vielleicht hat jemand ein Tool zum analysieren. Wenn noch mehr Infos gebraucht werden bitte melden.

Vielen Dank schonmal

Nachtrag:
Ich habe über die Funktion GetDiskError mitlerweile rausgefunden, dass beim Auslesen der Dateiinhalte es zu einem ReadFail kommt.
Beim Schreiben einer Datei haben wir den Fehler noch nicht rausbekommen. Bis zum FileClose scheint der Zugriff zu funktionieren, beim FileClose hängt die Funktion und der AVR läuft nicht weiter.

Es erhärtet sich bei uns der Verdacht, dass die FAT irgendwie beschädigt ist. Löscht man die Defekten Dateien am ende der FAT inkl der letzten scheinbar korrekten Datei, scheint der Zugriff erstmal wieder zu funktionieren.
Attachments
Filename: defekt.txt
Filesize: 263 Byte
Title: Defekte Datei
Information: Inhalt sind nur unleserliche Zeichen
Download counter: 57
This file is too big for a preview. Please download the file.
Filename: halbdefekt.txt
Filesize: 1.78 MB
Title: Halb-Defekte Datei
Information: Inhalt unter Windows lesbar, im AVR nur teilweise
Download counter: 33
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Dateizugriff Fehlerhaft bei vollen SD-Karten - Korrupte Dateien

 · 
Posted: 27.03.2017 - 22:21  ·  #2
Hallo Nils,

eine Idee hab ich nicht, aber ich stelle mal die Fragen, die mir dazu einfallen:
- wieviele Dateien im Verzeichnis?
- schreibst du nur in der Root?
- Dateigrößen?
- welche Treiber verwendest du sonst noch?
- ist die Datei immer geöffnet oder wird die jedes mal neu geöffnet? Oder sind das immer neue Dateien?
- liest du auch mit dem Controller oder schreibst du nur?
- Spannungen der Schaltung überprüft? Spannungsschwankungen?
- Geräte mit großer Leistungsaufnahme in der Nähe?
- Sender in der Nähe?


Achja ich mach etwas ähnliches: Loggen von GPS-Daten. Das sind bis zu 200 Zeichen/s und auch mal über mehrere Tage.

Gruss
Harry
NilsMeilwes
Benutzer
Avatar
Gender:
Age: 37
Posts: 14
Registered: 05 / 2016
Subject:

Re: Dateizugriff Fehlerhaft bei vollen SD-Karten - Korrupte Dateien

 · 
Posted: 28.03.2017 - 10:28  ·  #3
Hallo Harry

- wieviele Dateien im Verzeichnis?
- bislang <128, der Fehler trat bei 30 bzw. 82 auf
- schreibst du nur in der Root?
- aktuell ja
- Dateigrößen?
- normalerweise im 2-stelligen Kb bereich, max. 3,8 Mb
- welche Treiber verwendest du sonst noch?
- SysTick, FAT16_32,FlashWrite, SerPort2, SPIdriver, WatchDog, TWImaster, CRCStream; - Wobei der TWI nicht aktiv benutzt wird
- ist die Datei immer geöffnet oder wird die jedes mal neu geöffnet? Oder sind das immer neue Dateien?
- es wird immer nur eine Datei geöffnet und nach dem schreiben direkt wieder geschlossen
- liest du auch mit dem Controller oder schreibst du nur?
- im Normalbetrieb wird nur geschrieben, auslesen kommt nur manuell im Servicefall vor
- Spannungen der Schaltung überprüft? Spannungsschwankungen?
- Die Karte wird direkt mit einem 3,3V Spannungsregler von 24 V aus gespeist und die Datenleitungen hängen direkt an einem Pegelwandler. Sieht soweit auch mit Flanken gut aus
- Geräte mit großer Leistungsaufnahme in der Nähe?
- Jain. In dem Gehäuse ist ein Ladegrät mit 200 W untergebracht. Wenn ich das in unserem Log allerdings richtig deute war zu den Zeitpunkten das Ladegerät nicht aktiv
- Sender in der Nähe?
- Die Platine sitzt in einem geschlossenen Stahlgehäuse und sollte ausreichend vor Strahlung geschützt sein.

Ich habe nun versucht über eine Funktion möglichst schnell die Karte mit vielen Dateien zu befüllen, leider konnte der Fehler so erstmal nicht reproduziert werden.

Gruß Nils

Nachtrag: Ich habe mitlerweile über den Debugger scheinbar die ASM-Zeilen entdeckt in denen das Programm beim FileClose seine Runden dreht. Wenn jemand damit etwas anfangen kann könnte ich die Posten oder per PN verschicken.
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Dateizugriff Fehlerhaft bei vollen SD-Karten - Korrupte Dateien

 · 
Posted: 28.03.2017 - 16:13  ·  #4
Hallo Nils,

verwendest du Prozesse oder Tasks? Kann es sein, daß das Schreiben dadurch unterbrochen wird?

Harry
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: Dateizugriff Fehlerhaft bei vollen SD-Karten - Korrupte Dateien

 · 
Posted: 29.03.2017 - 08:20  ·  #5
Hallo Nils,

der FAT16_32 Treiber ist m. E. in Ordnung und eher nicht die Ursache, ich habe ähnliche Anwendungen seit Jahren im Einsatz.
Allerdings kenne ich die von Dir beschriebenen Probleme auch. Bei mir war die Ursache ein zu kleiner FrameSize - FAT braucht ausreichend Frame!

Versuche die folgenden Dinge:

1. Nimm eine neue SD oder SDHC Karte. Formatiere sie mit dem Tool "SD-Formatter", welches beim AVRco dabei ist. Achte auf einen Cluster-Size von 32 kB. (Das kannst Du mit "CHKDSK E:" in der DOS-Box überprüfen, das ist die sog. Zuordnungseinheit)

2. Prüfe eine von den defekten Karten auch mit CHKDSK - nach meiner Erfahrung müßtest Du dort FAT-Fehler sehen. Dann hilft nur Formatieren.

3. Setze den FrameSize im AVRco auf einen sehr hohen Wert z.B: $0800, iData. Teste dann erneut.

Noch eine Frage: In der Überschrift steht, daß der Fehler bei vollen Karten auftritt, stimmt das? Es gab mal vor vielen Jahren einen FAT-Bug dieser Art, aber der ist schon lange erledigt. Noch eine Anmerkung: Je größer die Datei ist, desto länger dauert das Öffnen und Schließen. Ich arbeite mit max. 1 MB Dateien, damit bleibt es bei wenigen mSec für diese Vorgänge.

Gruß, Michael
NilsMeilwes
Benutzer
Avatar
Gender:
Age: 37
Posts: 14
Registered: 05 / 2016
Subject:

Re: Dateizugriff Fehlerhaft bei vollen SD-Karten - Korrupte Dateien

 · 
Posted: 04.04.2017 - 07:59  ·  #6
Hallo,

@Harry: wir arbeiten ohne Scheduler, starten alle funktionen und prozeduren selbstständig. Wir nutzen selber keine Interrupts, was aus den Treibern jeweils interruptgesteuert läuft, kann ich natürlich nicht sagen.

@Michael:
1. Ich habe aktuell eine FAT16, 32k Cluster, 2GB Karte im Test. Diese hat nach 277 Dateien den oben beschriebenen Fehler gezeigt. Ein Test mit FAT32/4k bei gleicher Config/Firmware liefert ein ähnliches Ergebnis.
- Ich habe mitlerweile mit chkdsk durchaus Fehler in der FAT entdekt. Windows scheint diese allerdings immer direkt umgehen zu können. Bei der letzten "defekten" Karte, hat chkdsk keinen Fehler gefunden...
- Der Framesize ist für meine Firmware schon auf einem Maximum von 128 Byte. Mehr lässt der Compiler in dem Projekt nicht zu. Ich lasse mir diese testweise mal ausgeben. Zumindest zu den Zeitpunkten an denen ich sie ausgebe ist immer über 100 Byte frei...
- Naja volle Karten ist relativ. Wirklich voll sind die nicht. Aber bislang trat der Fehler erst bei der 50igsten oder 80igsten Datei und noch nicht bei der ersten auf.

In der Regel sind unsere Dateien auch nur einige kB groß. Durch einen Firmwarebug sind einige allerdings größer geworden. Beim letzten Test, ist keine Datei größer als 800k gewesen, trotzdem ist der Fehler irgendwann (scheinbar wirklich sehr zufällig) aufgetreten.

Gruß Nils
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Dateizugriff Fehlerhaft bei vollen SD-Karten - Korrupte Dateien

 · 
Posted: 04.04.2017 - 17:29  ·  #7
Hi Nils,

ich würde mal ein Verzeichnis anlegen und in diesem schreiben. Wieso? Es scheint mir eine gute Idee zu sein.
Meine Logs liefen über Monate, täglich 2-5 Dateien, Größe von 80 bis (selten) 5000 kByte, aber täglich ein neues Verzeichnis P2412016 (Datum). Ich hatte bisher nie Probleme. Meine Datei wurde anfangs geöffnet und war dann auch über mehrere Stunden bis zum Abschalten der Elektronik geöffnet und es wurde laufen geschrieben

Harry
mc-electronic
Benutzer
Avatar
Gender: n/a
Location: Sauerland NRW
Posts: 372
Registered: 03 / 2008
Subject:

Re: Dateizugriff Fehlerhaft bei vollen SD-Karten - Korrupte Dateien

 · 
Posted: 05.04.2017 - 08:02  ·  #8
Hallo Nils,

ich bin zu 99% sicher, daß der Framesize von 128 viel zu niedrig ist. Die beschriebenen Fehler kenne ich bei zu kleinen Framesizes. Möglicherweise braucht Dein Programm ja auch einiges an Frame und dann reicht es für FAT32 nicht mehr.
Der Atmega 128 hat doch 4 k RAM - da ist doch mehr Frame drin. Sonst kannst Du ggf. auf einen Atmega 1284 mit 16 kb RAM wechseln?
Schreib Dein Programm doch so um, daß Du den Frame verdoppeln kannst - auch wenn andere Funktionalitäten weg müssen - und teste, ob das Problem weiterhin auftritt.

Michael
  • 1
  • 2
  • 3
  • Page 1 of 3
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 16 · Cache Hits: 15   138   153 · Page-Gen-Time: 0.030988s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI