Man lernt aus Fehlern - auch aus der anderer

28/10/2010 - 16:21 von Martin Laabs | Report spam
Hallo,

ich wollte euch mal einen Fehler vorstellen der mich jetzt bestimmt eine
knappe Woche debugging gekostet hat.
Ein Prozessor ist über den asynchronen Bus an 2*ROM und SDRAM (mit gemeinsamen
Daten und Adressleitungen) angeschlossen.
Ich adaptiere eCos (ein RTOS) auf die Platform und nachdem es im SDRAM làuft
will ich den Start aus dem ROM programmieren.
Eigentlich einfach dachte ich. Habe den Startup geschrieben, compiliert und
in den ROM geschoben.
Verify klappt und ich lass es laufen. Es kommt aber immer wieder, insbesondere
in Schleifen die in den Speicher schreiben, zu Invalide Instruction Exceptions.
Nicht immer an der selben Stelle aber doch fast. Die Instruktion die ich mit
dem Debugger auslese ist aber korrekt.
Also Timing überprüft. Aber selbst bei Schneckentempo kommen Fehler, wenn auch
spàter im Code, vor.
Also Oszi genommen und die Signale angeguckt. Sehen super aus. Sogar einen
Zacken zu steil. (Mal sehen was die EMV Prüfung ergibt.)
Alles sehr oft nochmal nachgeprüft aber immer wieder kommt es zu diesen selt-
samen Invalid Instruction Exception bzw. auch zu fehlerhaft aus dem Speicher
ausgelesenen Daten.
Betriebsspannung auch OK mit Rippel <20mV. Ground Bounce auch nicht. Als ich
schon den ROM (der eigentlich ein MRAM ist) in Verdacht hatte und den zweiten
in Betrieb nehmen wollte um das zu überprüfen ist mir die CS Leitung vom zwei-
ten ROM ins Auge gefallen.
Die war am Prozessor per Default auf High-Z geschaltet und ich hatte keinen
Pull-Up Widerstand vorgesehen.
Prozessor IO auf CS umkonfiguriert und siehe da - es klappt wunderbar. Offen-
sichtlich hat sich die Hochohmige CS Leitung durch Busaktivitàt o.à. langsam
aufgeladen bis der zweite ROM der Meinung war nun aktiv werden zu müssen.
Arg
Nunja - ich denke ein àhnlicher Fehler wird mir Lebtags nicht mehr unterlaufen.
Wieder was gelernt: CS Leitungen die nach dem Prozessorreset auf High-Z liegen
sollte man mit einem Pullup Widerstand versehen.

Viele Grüße,
Martin L.

PS: Dass der Code aus dem SDRAM trotz hochohmigen CS des ROMs làuft liegt wohl
daran, dass der einfach stàrkere Treiber hat.
 

Lesen sie die antworten

#1 Uwe Hercksen
28/10/2010 - 16:34 | Warnen spam
Martin Laabs schrieb:

Nunja - ich denke ein àhnlicher Fehler wird mir Lebtags nicht mehr unterlaufen.
Wieder was gelernt: CS Leitungen die nach dem Prozessorreset auf High-Z liegen
sollte man mit einem Pullup Widerstand versehen.



Hallo,

na ja, beim nàchsten Mal könnte es ja ein zu hochohmiger Pullup
Widerstand sein wenn dann der Übergang von High-Z in sicherem High
Zustand zu lange dauert. ;-)

Bye

Ähnliche fragen