Forum: Mikrocontroller und Digitale Elektronik Olimex JTAG + LPC1768 + CooCox IDE -> Can not stop mcu


von Christian O. (ottelo)


Angehängte Dateien:

Lesenswert?

Ich habe ein selbst erstelltes LPC1768 Board (ARM Cortex-M3) mit einer 
JTAG-Schnittstellte. Dafür habe ich mir den ARM-USB-TINY-H Adapter von 
Olimex zugelegt. Zuerst habe ich es mit Eclipse, Yagarto und OpenOCD 
versucht, was nach einiger Zeit dann auch klappte (Flashen & Debuggen).

Ich habe nun gesehen, dass es aber auch viel einfacher mit der IDE von 
CooCox geht. Dort gibt es alles vorkonfiguriert für meinen uC. Ich habe 
alles nach der anleitung auf olimex.com 
(https://www.olimex.com/Products/ARM/JTAG/_resources/How_to_run_CooCox_with_Olimex_JTAGs_v2.pdf) 
eingerichtet. Nur das CoIDE nun in der Version 1.6.2 vorliegt.

Leider funktioniert es nicht. Wenn ich entweder mit CoIDE versuchen will 
du debuggen/flashen/löschen kommt die Fehlermeldung "Can NOT stop 
MCU!!". Wenn ich dann CoFlash verwende, kommt exakt der gleiche Fehler. 
Daraufhin habe ich mit den Resetmoden und mit der Geschwindigkeit 
rumgespielt. Bei 100KHz hat es aufeinmal bei "erase" geklappt. Danach 
wieder nicht. Es klappt anscheinend nur seeeeeehr selten :(

Hat jemand Erfahrung und Ratschläge für mich? Im Anhang ist noch der 
Schaltplan meiner JTAG Schnittstelle. Dahinter ist noch ein Adapter 
(selbstgemacht) von 10-20 polig. Wie gesagt, mit Eclipse klappt alles. 
Wahrscheinlich, weil ich dort im Script noch folgendes eingetragen habe:


# project file for firmware flash

source [find target/lpc1768.cfg]
reset_config srst_only

adapter_khz 500

init
sleep 200
reset halt
wait_halt
mww 0x400FC040 0x01
sleep 200

flash write_image erase main.bin
#verify_image main.bin

reset run
shutdown


Nachtrag:
ich habe es mal an einem Hitex LPC1768 Stick versucht. Litze direkt an 
Chip gelötet. Erstmal das gleiche Problem. Danach mehrmals Reset Taste 
gedrückt. In Eclipse ein anderes Programm eingespielt -> und was 
passiert. In CoFlash kann ich aufeinmal löschen usw. Wenn ich aber 
einmal die Spannungsversorge des uC kappe und wieder verbinde, muss ich 
wieder hin und her probieren bis es mal wieder klappt und er den uC 
anhalten kann. Es geht anscheinend auch nur mit 100KHz. Ich denk mal es 
liegt an wait Befehle oder so. Wo kann man diese einfügen?

Nachtrag2:
Es "scheint" wohl an der Leitungslänge zw. JTAG Adapter und JTAG 
Schnittstelle zu liegen. Wenn ich die Leitungen verkürze und meinen 
selbstgebastelten 10 auf 20 pol Adapter überspringe gehts schon etwas 
besser und er schafft es öfters zu flashen/erasen....


Nachtrag + Lösung (Quick&Dirty) - englisch:

I've found a solution for my problem, maybe the CoCoox could integrate 
this method into Coflash/IDE for LPC1768/Olimex:

1. Power on the lpc1768 Board (own design), jtag cable already plugged 
in (discovered: length doesnt matter!!!)
2. Hold down the Reset button
3. press a action button (erase/verify/ ...) and wait until error 
message "can not stop mcu" appears
4. release reset button and press action button again -> works!
5. after this, everything works, until the board is unpowered -> do the 
method again

von Jim M. (turboj)


Lesenswert?

> adapter_khz 500

Try something much lower like 50 or 10.

You "reset button foddeling" seems to indicate incorrect reset line 
handling. Check these connections, e.g. with the OpenOCD command
1
jtag_reset 0 1
Works best when you program lights up a LED - it should go dark when in 
reset.

Auf Deutsch: Reset prüfen. Obiges Kommando soll den den SRST low ziehen.
Bei längeren JTAG Leitungen kann es passieren, dass man die Frequenz 
deutlich verringern muss.

Achtung: Wie viele andere Cortex M3 können LPC17xx nicht im Deep Sleep 
oder Power down debuggt werden.

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.