Forum: Mikrocontroller und Digitale Elektronik Wie werden RAM/ROM memory failure entdeckt


von Li (Gast)


Lesenswert?

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

von Andreas K. (a-k)


Lesenswert?

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.

von Ralph (Gast)


Lesenswert?

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

von __ _. (unrouted)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

Hallo ,

wie kann ich aus eine RAM-zelle einen Wert von eine Variable auslesen?
dies brauche ich um RAM-test durchzuführen. ich arbeite mit C.

von Peter (Gast)


Lesenswert?

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

"

von Route_66 H. (route_66)


Lesenswert?

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?

von Peter (Gast)


Lesenswert?

Hallo ,

vielleicht an Hand von Beispielen erklären, wenn es geht???

von Jürgen D. (poster)


Lesenswert?

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.

von TriHexagon (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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?

von dummy (Gast)


Lesenswert?

>meine Frage lautet : wie speichere ich die Checksumme in eine RAM-zelle?

Hääää?

von Cyblord -. (cyblord)


Lesenswert?

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?

: Bearbeitet durch User
von oszi40 (Gast)


Lesenswert?

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.

von Fred (Gast)


Lesenswert?

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.

von oszi40 (Gast)


Lesenswert?

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.

von Soul E. (Gast)


Lesenswert?

Kapitel A5 und die dort aufgeführten Literaturstellen.
http://www.cechina*cn/ELetter/Standard/safety/IEC61508-7.pdf

* durch . ersetzen.

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.