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