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