Hallo liebe Community
ich habe ein unerklärliches Phänomen welches ich seit längerem an meinem
SAM9G45 beobachte.
Alle 17,26 Sekunden resettet sich der Prozessor unabhängig von der
aktuellen Software. Es tritt sowohl beim Debuggen mit dem J-Link auf als
auch bei der Ausführung von geflashter Software.
Während des Debuggens tritt der reset allerdings nur auf, wenn die CPU
Instruktionen verarbeitet. Wartet die CPU in einem Breakpoint, kommt es
nicht zu einem Reset.
Im Detail handelt es sich um das SAM9G45 OEM von www.in-circuit.de
welches ich auf dem ADB1003 betreibe.
Ich verwende das Board für eigene Entwicklungen und habe zu diesem Zweck
die Linux-Distribution vom NAND und den uBoot vom NOR gelöscht.
Das Linux hat einwandfrei funktioniert weshalb ich einen Hardware-Defekt
"fast" ausschließe.
Hat jemand eine Idee, woran dies liegen kann?
Eine weitere sehr eigenartige Beobachtung habe ich im Debug-Betrieb
machen können.
Folgender Assembler-Code kopiert diverses Zeug vom NOR in den SRAM:
1 | LDR r0, =0x00000124; //Source base address
|
2 | LDR r1, =0x00300000; //Destination base address
|
3 | LDR r2, =0x00308124; //Destination limit address
|
4 |
|
5 | st1_copy:
|
6 | CMP r1, r2
|
7 | LDMLTIA r0!,{r3}
|
8 | STMLTIA r1!,{r3}
|
9 | BLT st1_copy
|
Hierzu wird schrittweise die Werte in r0 und r1 um 4 erhöht bis r1 den
Wert in r2 erreicht hat. Zusätzlich wird bei jedem Durchlauf der Wert an
Adresse in r0 nach R3 geladen und anschließend nach Adresse in r1
geschrieben.
Dies funktioniert einwandfrei (bei so wenig Zeilen kann man noch nicht
viel falsch machen :) )
Nun die Besonderheit: Sobald der Wert in r0 nach 0x158 gezählt wurde,
sorgt der CMP Befehl(Welcher den Wert R1 und R0 miteinander Vergleicht,
das Ergebnis allerdings verwirft und nur ein Bit im Status-Register der
CPU aktualisiert) dafür, dass in R1 der Wert 0x9757357C erscheint was
selbstverständlich zu einem Fehler(Data-Abort) führt... und gar keinen
sinn ergibt.
Dieses eigenartige Verhalten ließ sich einige male mit immer dem selben
Wert zur selben Zeit reproduzieren.
Um zu prüfen ob dieser Fehler nur beim Debuggen auftritt, habe ich den
Code geflasht mit dem Ergebnis dass alles fehlerfrei kopiert wird.
Jedoch startet die CPU trotzdem alle ~17 Sekunden neu.
Langsam glaube ich dass die CPU auf einem alten Indianer-Friedhof
produziert wurde oder das Zahngold eines alten Schamanen verbaut wurde.
Denn erklären kann ich es mir nicht.
Ich würde mich wirklich sehr über Tipps zur Fehlersuche freuen.
Gruß Tobias