Forum: Mikrocontroller und Digitale Elektronik Flash-Speicher hört auf zu senden


von Zebra (Gast)


Lesenswert?

Moin,

ich habe folgendendes kurioses Problem. Vielleicht hat jemand eine Idee.

Seit mehreren Tagen mache ich Messungen mit nem ATmega32 und speichere 
sie auf einen Flash-Speicher SST25VF064C. Das funktioniert auch 
wunderbar. Über einen Befehl kann ich die Werte auslesen und aufm 
PC-Bildschirm schön angucken.
Bisher funktionierte das auch super, da hat er ununterbrochen ca. 10 
Tage aufgezeichnet und auch ausgelesen. Jetzt plötzlich hört er nach 2 
Tagen der aufgezeichneten Werte auf, diese auszulesen. Vorhanden müssen 
sie ja sein, da sie ja das letzte Mal angezeigt wurden und gelöscht 
wurden sie auch nicht, da ja sonst auch die angezeigten Werte nicht mehr 
angezeigt werden dürften.

Ich habe nichts geändert, es wurde in der Zeit (als es noch 
funktionierte) bis jetzt, das Gerät nicht mal angefasst. Reset habe ich 
schon gemacht. Er bleibt immer an der gleichen Stelle stehen.

Hat jemand eine Idee, woran das liegen könnte?

von H.Joachim S. (crazyhorse)


Lesenswert?

Das wird ein Glaskugeltrööt :-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Zebra schrieb:
> Jetzt plötzlich hört er nach 2 Tagen der aufgezeichneten Werte auf,
> diese auszulesen.
Warum? Wie stellst du das fest?

Gib doch mal die fehlenden Informationen, so kann ja wohl kaum einer was 
sinnvolles sagen....  :-/
Wieviele Daten sind abgespeichert?
Wer schreibt, wer liest aus?
Wer hat die Hardware gemacht? Gibt es einen Plan?
Wer hat die software gemacht? Wie sieht die aus?

von Zebra (Gast)


Lesenswert?

ja, also ich hatte erstmal keinen Quellcode mit reingeballert, weil ich 
wenn der Code falsch wäre, hätte es ja nie funktioniert mit dem 
Auslesen, oder?

also der Logger ist seit ca. 2 Wochen in Betrieb und funktionierte 
wunderbar. Seit dem 4.10. loggt der stündlich 3x 16 Temperaturen mit. 
Das Auslesen über RS232 mit TeraTerm kann auch während der Messung 
geschehen. Habe also immer mal zwischendurch die Werte ausgelesen, als 
Kontrolle. Es wurden auch immer alle Werte korrekt angezeigt, vom 4.10. 
bis zum 14.10. Heute wollte ich die alten Werte plus die neuen vom 
Wochenende erneut auslesen. Nun zeigt er mir die Werte aber nur noch bis 
zum 06.10. an. Danach endet der Auslesevorgang, so als wären keine Daten 
mehr aufgezeichnet. Aber es wurden ja schon alle bis mindestens zum 
14.10. aufgezeichnet. Die Frage ist also, warum hört er immer am 6.10. 
auf?

Ja es gibt einen Schaltplan, aber an dem dürfte es ja eigentlich nicht 
liegen, da es ja bisher immer funktioniert hat.
Kann es sein, dass der Speicher vielleicht irgendwie beschädigt ist, 
oder so?!

Die Hardware und Software ist parallel entwickelt worden, im Rahmen 
einer Masterarbeit. Der Logger arbeitet immer noch korrekt weiter, 
misst, speichert ab und das Auslesen funktioniert ja auch, wie es soll, 
nur bricht er einfach irgendwann ab.

Sagt mir, was ihr noch als Infos benötigt...den kompletten Schaltplan 
bzw. Code kann ich leider nicht zur Verfügung stellen, ihr kennt das 
ja...aber Ausschnitte schon, aber hilft das weiter? Ich meine isses 
wahrscheinlich, dass es ein Bug im Programm ist oder eher irgendwas 
zerschossen ist?!

von Lehrmann M. (ubimbo)


Lesenswert?

Entweder ist die Schaltung schlampig aufgebaut, sprich nicht sauber 
genug gelötet oder in deiner Software ist ein Bug.

von Arc N. (arc)


Lesenswert?

Zebra schrieb:
> ja, also ich hatte erstmal keinen Quellcode mit reingeballert, weil ich
> wenn der Code falsch wäre, hätte es ja nie funktioniert mit dem
> Auslesen, oder?

Kommt drauf an...
Fehler beim Page-Program: zu viel (> 256 Bytes) oder zu früh (während 
des Löschens) oder nicht ab einer Seitengrenze und dann zuviel 
geschrieben, Seite nicht gelöscht oder eine defekte Seite im Flash, an 
einem zu tiefen Absinken der Spannung während des Schreibens/Lesens, an 
Störungen auf den SPI-Leitungen, an nicht mehr/richtig engestellter 
Block Protection oder Reset/Hold, u.U. daran das versucht wird 
gleichzeitig zu schreiben und zu lesen...

von Peter D. (peda)


Lesenswert?

Zebra schrieb:
> Danach endet der Auslesevorgang, so als wären keine Daten
> mehr aufgezeichnet.

Es gibt keinen Zustand "keine Daten". Es ist immer irgendwas im Speicher 
und wenns 0xFF ist.

Du brauchst ein Protokoll, wie freie und belegte Bereiche als solche 
gekennzeichnet werden. Im Prinzip, wie es z.B. ein FAT32 oder NTFS 
macht.


Peter

von hubbeli (Gast)


Lesenswert?

Ich hab das schonmal gesacht, aber wiederhol mich gern

also du kannst mit log2(n) zugriffen feststellen wie weit deine karte 
mit n sektoren schon voll ist, das kannst du bei jedem boot machen oder 
auch staendig, es sind nur max 20 zugriffe


dabei wird jeweils in der mitte eines speicherbereiches gelesen,
wenn der eintrag voll ist, weisst du dass die erste haelfte voll ist, 
und halbierst die zweite haelfte wieder und faengst damit von vorn an

wenn der mittlere eintrag jedoch leer ist, weisst du, dass die komplette 
zweite haelfte leer ist und suchst in der ersten haelfte, indem du die 
wieder halbierst und wieder in der mitte guckst,
das machst du ein paar mal,
bis dein bereich nur noch 1 sektor gross ist und dann hast du ihn 
gefunden

ist das klar geworden??

musst natuerlich die beschriebenen sektoren markieren zb indem das erste 
bit auf 1 ist oder so

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.