Hallo,
ich suche eine Möglichkeit, ein Ram zu testen.
Es sollen alle Bits mit 1 und auch mal mit 0 beschrieben werden.
Desweiteren sollen alle Adressen sicher getestet werden.
Also alles mit 0x5A beschreiben und zurücklesen und dann das ganze noch
einmal mit 0xA5 ist dann doch etwas zu einfach.
Wenn möglich, eine Funktion in C.
Aber auch für einen einfachen Ansatz wäre ich schon dankbar.
Dieter
Die relevanten Muster sind AAh und 55h, du gehst alle Adressen ab und
schreibst eben diese Werte in das RAM, anschließend ließt du sie aus und
überprüfst ob es immer noch das selbe Muster ist. Wo liegt das Problem?
Ganz einfach,
wenn eine Adressleitung permanent auf 0 liegt (z.B. Lötbrücke), ist das
nicht feststellbar. Aber genau solche Fehler will ich feststellen
können.
Dieter
Hi
Das Teil ist zwar für'n M16C mit 1MB extern 16RAM, aber das kannst Du ja
als Anregeung nehmen. Es findet nicht gelötete Pins, kurzgeschlossene
Addressleitungen, kurzgeschlossene Datenleitungen, sowie irgend was auf
Masse oder Vcc
Reiner
An besten, man nimmt einen Pseudo-Zufallsgenerator und schreibt damit
den kompletten RAM voll.
Dann testet und invertiert man alles im 2. Durchgang.
Im 3.Durchgang testet man das invertierte Zufallsmuster und fertig.
Peter
Schon mal vielen Dank,
sehr schöner einfacher Ansatz, der schon mal die meissten Tücken finden
sollte.
Gibt es noch andere Ansätze, die das RAM evtl. mit "zufälligen" Adressen
beschreiben. Also das RAM mit allen möglichen Daten in wild springende
Adressen beschreiben und dann genauso wild überprüfen.
Dieter
Hi,
warum wild und Chaos?
Zuerst würde ich die einzelnen Aressleitungen testen:
kompletten Ram auf 0 setzten
A0=0 Zelle auf 1, lesen, invertieren, schreiben, lesen, ok? >
A0=1 Zelle auf 0? ok> zelle auf 1,... s.o.
A1=...so
und geht man halt die einzelnen Adressleitungen durch.
Sind die Adressleitungen alle ok, dann folgt der Zellentest:
Zelle lesen, invertieren, schreiben, lesen ok > nächste.
Was für ein Bitmuster zum prüfen verwendet wird spielt keine Rolle, die
Invertierung stellt sicher das sich jedes Bit setzten und löschen lässt.
Eine Prüfung der Adressleitungen bei RAMS in Software ist eher
ungewöhnlich.
Noch Fragen?
cu tb
Wie Dieter schon sagte, will er nicht nur das RAM, sondern auch die
Verdrahtung testen. Verdrahtungsfehler erkennt man mit der beschriebenen
Methode nicht.
Noch ein Vorschlag: man löscht das gesamte RAM und schiebt ein Bit durch
das gesamte RAM. Dabei überprüft man die letzte Adresse, ob hier das Bit
zu früh, oder gar nicht ankommt.
Siegfried
@siegfried: vertauschte Adressleitungen sind per Software nicht zu
erkennen (gar nicht!!!) und für die Funktion ist es auch egal (solange
nicht noch mehr am Adressbus hängt). Wichtig(und prüfbar) ist nur die
Anzahl und Ansprechbarkeit der einzelnen Zellen(Adressleitungstest) und
die Funktion der einzelnen Zellen(Ramtest) alles was darüber hinausgeht
ist nur Mehraufwand ohne Mehrnutzen.
Ein BIT durch den Ram zu schieben ist Quark.
Selbst ein BYTE zu "schieben" (ist je nach Hardware nicht mal möglich)
ist albern, da nach jedem Schritt der gesamte RAM geprüft werden müsste.
Um Verdrahtungsprobleme zu ermitteln genügt jeweils die Zellen
abzuchecken, bei den sich eine ADRESSLEITUNG ändert(z.b.
0,1,2,4,8,16...). Die Funktion des RAMs wird getestet in dem jedes BIT
getestet wird, ob es sich auf H und L setzten lässt. Ob das nun Bit-,
Byte- oder Blockweise geschieht und mit welchem Muster ist egal.
@thomas b
Vertauschte Adressleitungen, bzw. Datenleitungen spielen keine Geige in
Sachen Funktion.
Mit dem Vorschlag ein BIT durch den Speicher zu schieben meinte ich
natürlich den softwaremäßigen Ansatz. Ist wohl klar, dass min. ein Byte
adressiert werden muss. So aufwändig ist der Test nun auch nicht, er
deckt aber zumindest fast alle Verdrahtungsfehler, Unterbrechnungen,
Kurzschlüsse und RAM-Fehler auf.
Allerdings sind einige Fehlerfälle denkbar, wo der vorgeschlagene
"Adressleitungseinzeltest" versagt. Beispiel: A2 hängt auf GND.
Schreiben und Lesen von Zelle 0x0000 ist OK. Schreiben und lesen von
Zelle 0x0004 geht jeweils auf die Zelle 0x0000.
Bei den Datenleitungen verhält es sich ähnlich. Daher sollte das
Bitmuster was über die Datenleitungen geht, ebenfalls variiert werden.
Im Grunde kommt es auf die Anforderung an. Für einen Lego-Roboter wird
wohl kaum jemand so einen Aufwand treiben. Es gibt jedoch genügend Fälle
wo es auf einwandfreie Funktion ankommt.
Siegfried
Hi!
Ich habe letztes Jahr mal sowas gebaut um Speicherfehler älterer
CNC-Masch. zu testen.Dabei habe ich abwechselnd $AA und $55 ins Ram
geschrieben.Das darauffolgende Lesen wurde mit dem ADW gemacht um
saubere Pegel und TST feststellen zu können. Bei falschem Lesewert hat
das Prog.einfach über RS232 eine Fehlermeldung gebracht und den
momentanen Leitungszustand zum nachmessen per Hand erhalten.Mit der
Tastatur konnte man dann entscheiden ob Abbruch oder Weitertesten. Das
mit den gebrückten / losen Adressleitungen fällt auch auf, da ja das
Bitmuster wechseln muss. Habe so einige böse Chips finden können, die
meisten allerdings mit schlechten "Datenpegeln".Lief allerdings auf
einem HC12, den kann man am ehesten mit einem M16 vergleichen, deshalb
auch kein Programmanhang.Aber als Denkanstoss hilft es eventuell.
Uwe