mikrocontroller.net

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


Autor: Li (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: __ __ (unrouted)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

"

Autor: Route 66 (route_66)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ,

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

Autor: Jürgen D. (poster)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TriHexagon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: dummy (Gast)
Datum:

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

Hääää?

Autor: Cyblord ---- (cyblord)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: oszi40 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: oszi40 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: soul eye (souleye)
Datum:

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

* durch . ersetzen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.