Hallo, zusammen,
ich möchte ein Programm schreiben, mit dem man die RAM-Fehlern stetig
bestimmen und ROM und EEPROM-Fehlern beim Start entdecken kann. Aber ich
habe keine Ahnung damit. Kann jemand mir ein Tipp vielleicht geben?
Vielen Dank
ROM-Fehler ist einfach. Frisch beim/nach dem Programmieren CRC vom
gesamten Inhalt berechnen und irgendwo speichern, ob nun mit im ROM oder
im EEPROM. Und gelegentlich zur Start- oder auch Laufzeit mal
überprüfen.
RAM-Fehler beim Start wird interessanter, weil's eigentlich nur in
Assembler möglich ist und wenn trotzdem C verwendet werden soll, dann zu
einem Zeitpunkt nötig ist, bevor der C Startupcode auch nur spitzkriegt
dass es ihn gibt.
Dafür haben permanente RAM-Fehler den Vorteil, nachträglich eher selten
aufzutreten, während Flash-ROM prinzipbedingt deutlich empfindlicher
ist.
Rom:
- Beim erzeugen des Hexfiles eine CRC berechnen und diese im Rom
ablegen.
- Beim Programmstart den CRC des Rom berechnen und mit der abgelegten
CRC vergleichen.
- Mit abspeichern der Zwischenwerte lässt sich sowas auch während der
Programmausführung machen, indem pro Zeiteinheit nur einige Romzellen
berechnet werden und nach einer längeren Zeit die berechnung dann
komplett ist.
Ram:
- irq sperren
- Inhalt der zu prüfenden RAM Zelle an eine andere Stelle kopieren
(retten)
- verschieden Muster (zb 0x00, 0x55, 0xAA, 0xFF) in die zu püfende RAM
Zelle schreibe und wieder auslesen
- abschließend den geretten Wert wieder in die RAM zele zurückschreiben
- irq wieder freigeben
EEPROM:
- das EEPROM in Datenblöcke unterteilen und jeden Datenblock mit einer
eigene CRC absichern
- bei jedem Zugriff diese CRC prüfen
Hallo,
bevor du los legst musst du dir darüber klar werden welche Fehler du im
RAM erkennen willst. Es gibt Tests zum Erkennen von statischen Fehlern
und Tests zum Erkennen von Querschlüssen zwischen Speicherzellen.
a) Statische Fehler bedeutet: wenn ein Bit ständig auf 1 oder 0 fest
hängt egal welchen Wert man reinschreibt (== Speicherzelle kaputt)
b) Querschlüsse bedeutet: wenn man z.B. Bit 1 von Byte 100 ändert,
ändert sich ungewollt auch Bit 5 von Byte 30 mit (== Speicherzellen
haben aufgrund eines Fehlers eine Verbindung auf dem Chip)
Für den Test a bedeutet das z.b. wie folgt:
falls nötig: interrupts deaktivieren;
für alle RAM-bytes x von SPEICHERGRÖßE
{
wert von RAM-Byte x sichern;
RAM-Byte x mit 0xAA beschreiben;
RAM-Byte x auslesen und gelesenen wert mit 0xAA vergleichen;
-->fehler wenn wert nicht gleich ist
RAM-Byte x mit 0x55 beschreiben;
RAM-Byte x auslesen und gelesenen wert mit 0x55 vergleichen;
-->fehler wenn wert nicht gleich ist
sicherung von RAM-Byte zurück schreiben;
}
interrupts wieder frei geben;
Wenn man den Speicher in einzelne Bereiche aufteilt kann man den Test
auch gut im vollen Betrieb durchführen. Bei den Tests für Querschlüsse
gibt es das Problem, dass die einzelnen Bereiche komplett mit einem
durchlaufenden Muster gefüllt werden müssen und somit alle Bytes des
Bereiches irgendwo hin zwischengespeichert werden müssen (und auch der
Stack umgelegt werden muss).
Diese Tests nennen sich dann z.B. (google)
- March C (oder March B ?)
- transparenter Galpat Test
...
Der Check des ROM-Speichers ist da schon einfacher und sollte eigentlich
auch problemlos im laufenden Betrieb funktionieren.
--> Einfach vom Compiler/Linker an das Ende des Flash-Speichers eine CRC
Checksumme eintragen lassen (z.B. 2 Byte) und im Betreib z.B. in jedem
Main-Durchlauf ein ROM-Byte auslesen und damit schön langsam über eine
Entsprechnede CRC-Berechnungs-Funktion den CRC Wert berechnen. Am Ende
dann den berechneten Wert mit dem Wert aus dem Flash-Speicher
vergleichen.
Falls du auch mal google,de befragen willst, würde ich dir emfehlen nach
folgenden Begriffen zu suchen:
- software class b / software class c
- stuck-at error galpat test walkpat test / abraham test
- CRC16 Technical Note 91733 AVR998
Hallo zusammen,
ich brauche Hilfe um RAM-fehler zu entdecken.
habe hier oben den Kommentar gelesen aber nicht verstanden, kann jemand
es vielleicht erklären???:-(((
bin für jeden Tip Dankbar !
zitat:
"Ram:
- irq sperren
- Inhalt der zu prüfenden RAM Zelle an eine andere Stelle kopieren
(retten)
- verschieden Muster (zb 0x00, 0x55, 0xAA, 0xFF) in die zu püfende RAM
Zelle schreibe und wieder auslesen
- abschließend den geretten Wert wieder in die RAM zele zurückschreiben
- irq wieder freigeben
"
Hallo!
Ich fürchte leider, dass man es nicht wesentlich einfacher erklären
kann. Wenn Du schon bei dieser Beschreibung Probleme hast, kämen
vielleicht Bilder in Frage. Legastheniker?
Hier im Forum gilt eigentlich immer Hilfe zur Selbsthilfe.
Schreibe uns doch einfach erstmal dein geplantes Vorgehen wie du das die
vorstellst. Dann kommen auch Hinweise auf Fehler und Tipps wie man es
besser machen könnte.
Sagen kann man eigentlich nur, was man allen Anfängern sagen sollte.
Recherchiere, lies dich ein und wenn du dann gezielte Fragen hast, stell
sie hier. Ansonsten lass es.
Hallo,
..also ich habe die Checksumme berechnet, diese Checksumme möche ich in
eine Ram-zelle speichern.
meine Frage lautet : wie speichere ich die Checksumme in eine RAM-zelle?
Peter schrieb:> Hallo ,>> vielleicht an Hand von Beispielen erklären, wenn es geht???
Oder vortanzen?
Mal ehrlich, was verstehst du daran nicht?
> meine Frage lautet : wie speichere ich die Checksumme in eine RAM-zelle?
Eine Ram-Zelle ist eine Speicherstelle im RAM. WIE du da rein schreibst
hängt von deiner Programmiersprache ab. In ASM gibt es, je nach
Controller, spezielle Befehle um den RAM zu lesen und zu schreiben.
Aber sag mal, warum benötigt jemand, mit deinem fulminanten Wissen,
überhaupt eine RAM/ROM Prüfung? Selbst wenn dein Code intakt ist, was
könnte man dann überhaupt davon erwarten?
Li schrieb:> habe keine Ahnung damit. Kann jemand mir ein Tipp vielleicht geben?
1.https://www.mikrocontroller.net/articles/AVR-Tutorial
2.Nimm lieber gleich was Fertiges. RAM prüfen nur mit 0000 oder 1111
bringt nur einfachste Fehler ans Licht. Die seltenen, echt tückischen
Fehler findet erst ein richtiger Ramtest mit Zufallszahlen.
3.Die meisten Fehler sind auf OSI Layer 8.
oszi40 schrieb:> erst ein richtiger Ramtest mit Zufallszahlen.
Meine Güte, so wenig Ahnung muß man erstmal haben.
Wer verwendet denn bitte schön Zufallszahlen für RAM-Tests? Also außer
dir.
Fred schrieb:>> erst ein richtiger Ramtest mit Zufallszahlen.> Meine Güte, so wenig Ahnung muß man erstmal haben.> Wer verwendet denn bitte schön Zufallszahlen für RAM-Tests? Also außer> dir.
Das funktioniert seit ca. >20 Jahren recht erfolgreich. Weil man damit
doppelte Adressen und Einzelfälle herausbekommt. Wenn Du bessere Ideen
hast, kannst Du sie uns gern alle verraten.