Forum: Mikrocontroller und Digitale Elektronik SAM9G45 vom Teufel besessen


von Tobias (Gast)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

Hat das Ding eventuell einen.Watchdog, der immer erst mal losrennt und 
zyklisch ruhiggestellt werden will?

von Tobias (Gast)


Lesenswert?

Exakt genau das war der Auslöser.

Vielen Dank für die hervorragende Hilfe!

Gruß Tobi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.