Forum: Mikrocontroller und Digitale Elektronik NXP - Programcounter bleibt im Bootloader "hängen"


von Philipp (Gast)


Lesenswert?

Hallo,

Ich möchte einen LPC1768 bzw. einen LPC2368 programmieren bzw. debuggen.

Wenn ich den chip debuggen will, funktioniert es bei mir nur ca. jedes 
zweite mal. Wenn es funktioniert, kann ich alle variablen werte sehen, 
auch die Pins am µC toggeln.
wenn ich das ganze jetzt nochmal debuggen will, steht der program 
counter bei einer Adresse um ca. 0x7FFF E152.

Bei 0x7FFF E008 liegt der Bootloader...

Nun gibt es den Pin P2.10. Ist dieser Pin auf Lo, so sollte der Chip in 
den ISP mode gehen. Ist der Pin Hi, sollt der Chip nur in den ISP mode 
gehen, wenn die checksumme nicht übereinstimmt (der user Code nicht 
valid ist).

Wenn ich den Pin P2.10 auf 0V ziehe, funktioniert es jedesmal.
Allerdings ist dann der ISP mode aktiv. Folglich sollte das debuggen ja 
eigentlich nicht funktionieren...

wenn ich den µC flashe muss der Pin P2.10 auf Hi sein. In diesem Fall 
funktioniert es ca. bei jedem 2. mal flashen.
wenn es nicht funktioniert, hängt der program counter bei ca. 0x7FFF 
E156.

Hat jemand einen möglichen Lösungsvorschlag?
Hatte noch jemand ein ähnliches Problem?

LG,
Philipp

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Philipp schrieb:
> Hat jemand einen möglichen Lösungsvorschlag?
Testweise im Init-Skript der Debugger-Software MEMMAP auf Flash setzen 
(LPC17xx z.B. 0x400FC040 auf 1)

> Hatte noch jemand ein ähnliches Problem?
Ähnliche Symptome ja. Falls gdb und OpenOCD im Einsatz ist, kann ich 
noch ein paar Hinweise schreiben. Passen aber bei anderer Hard- und 
Software eher nicht.

von Philipp (Gast)


Lesenswert?

Lieber Martin,

Danke für deine Antwort.
>Testweise im Init-Skript der Debugger-Software MEMMAP auf Flash setzen
>(LPC17xx z.B. 0x400FC040 auf 1)

Du meinst im Startupcode MEMMAP auf Flash setzen?
Oder wie könnte ich das Lösen?
Der Startupcode wird ja, meiner Meinung nach, gar nicht ausgeführt, 
sondern der Programcounter springt gleich auf die Adresse des 
Bootloaders.
Kann / sollte ich das mit OpenOCD gleich einstellen?

Ja, ich benutze OpenOCD und GDB und bin dir für Tipps sehr dankbar.

Liebe Grüße,
Philipp

von Philipp (Gast)


Lesenswert?

Weißt du auch wie man mit OpenOCD und z.b. telnet den Flash auslesen und 
in eine Dateispeichern kann?

Lg,
Philipp

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

>[...]
> Kann / sollte ich das mit OpenOCD gleich einstellen?
Kann: ja, z.B. per mww in einer reset-init Funktion. Ob "sollte" weiß 
ich nicht, hatte das irgendwann beim Probieren so eingestellt und dann 
nicht mehr getestet, ob es auch nach den anderen Änderungen noch nötig 
ist. Schaden kann es nicht.

> Ja, ich benutze OpenOCD und GDB und bin dir für Tipps sehr dankbar.
Hatte mit LPC17xx und OpenOCD auch jüngst ein wenig "Spass". Die 
mitgelieferten Scripte sind manchmal noch nicht ausgegoren. Noch 
"druckfrisch": 
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/arm_memcards/index.html#chanfat_lpc_cm3 
. Darin eine OpenOCD config-Datei (LPC1766.cfg), die hier zuverlässig 
mit funktioniert hat. Die wenigen Änderungen im Vergleich zur 
LPC1768.cfg aus dem OpenOCD-Lieferumfang dürften schnell zu erkennen 
sein (reset-config, reset-init script). Im Makefile und den Eclipse 
Launches findet sich mglw. auch noch Brauchbares.

>Weißt du auch wie man mit OpenOCD und z.b. telnet den Flash auslesen und
>in eine Dateispeichern kann?
Siehe Dokumentation zu dump_image.

von Philipp (Gast)


Lesenswert?

Lieber Martin,

vielen Dank für deine Antwort.

das LPC1766.cfg hat mir etwas weitergeholfen.
Allerdings steht der Program counter (pc) nachwievor bei jedem zweiten 
mal downloaden irgendwo im NXP bootloader. (sowohl beim Debuggen, als 
auch beim runterspielen der HEX file mit OpenOCD und anschließendem 
standalone laufen lassen)

Ich habe das flash ausgelesen und habe festgestellt, dass jedes zweite 
mal downloaden der Flash-Speicher leer ist. Dazwischen steht jeweils 
genau der selbe (funktionierende) code im Flash.

Hat jemand eine Ahnung woran das liegen kann?
Gibt es so eine Art Flash-Enable bit, das ich setzen muss um in den 
Flash schreiben zu können?
Ich habe nichts derartiges im User Manual gefunden.

Oder der Chip ist im (Deep) Sleep oder Powerdown mode (jedes zweite 
mal).
Was mir aber auch sehr unwahrscheinlich vorkommt bzw. ich noh keinen Weg 
gefunden habe dies zu verhindern.

LG,

Philipp

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.