Zur Zeit spiele ich ein bisschen mit einem Entwicklungsboard, das über
einen NXP LPC1768 verfügt. Der Mikrocontroller wird bzw. wurde unter
Linux mit einem Olimex ARM-USB-OCD JTAG-Adapter mit OpenOCD
programmiert. Leider kann ich den Controller nicht mehr ansprechen, seit
darauf eine Firmware läuft, bei der ich mit der PLL experimentiert habe:
1 | # openocd -f openocd.cfg
|
2 | Open On-Chip Debugger 0.4.0-rc1 (2010-02-05-08:18)
|
3 | For bug reports, read
|
4 | http://openocd.berlios.de/doc/doxygen/bugs.html
|
5 | jtag_nsrst_delay: 200
|
6 | jtag_ntrst_delay: 200
|
7 | trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain
|
8 | 500 kHz
|
9 | Info : clock speed 500 kHz
|
10 | Info : JTAG tap: lpc1768.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
|
11 | Warn : Timeout (1000ms) waiting for ACK = OK/FAULT in SWJDP transaction
|
12 | Warn : Block read error address 0xe000ed00, count 0x1
|
13 | Warn : Timeout (1000ms) waiting for ACK = OK/FAULT in SWJDP transaction
|
14 | ...
|
Ich habe versucht, den Prozessor auf jedwede Art anzuhalten, damit ich
den Flash wieder löschen kann, alle Befehle dazu (reset halt, reset
init, soft_reset_halt, etc.) werden jedoch mit einem Timeout verweigert.
Manche Befehle hingegen (z.B. flash probe) funktionieren noch.
Meine OpenOCD-Target-Konfiguration entspricht weitestgehend dem
Standard:
1 | # NXP LPC1768 Cortex-M3 with 512kB Flash and 32kB+32kB Local On-Chip SRAM,
|
2 | # clocked with 4MHz internal RC oscillator
|
3 |
|
4 | if { [info exists CHIPNAME] } {
|
5 | set _CHIPNAME $CHIPNAME
|
6 | } else {
|
7 | set _CHIPNAME lpc1768
|
8 | }
|
9 |
|
10 | if { [info exists ENDIAN] } {
|
11 | set _ENDIAN $ENDIAN
|
12 | } else {
|
13 | set _ENDIAN little
|
14 | }
|
15 |
|
16 | if { [info exists CPUTAPID ] } {
|
17 | set _CPUTAPID $CPUTAPID
|
18 | } else {
|
19 | set _CPUTAPID 0x4ba00477
|
20 | }
|
21 |
|
22 | #delays on reset lines
|
23 | jtag_nsrst_delay 200
|
24 | jtag_ntrst_delay 200
|
25 |
|
26 | # LPC2000 & LPC1700 -> SRST causes TRST
|
27 | #reset_config trst_and_srst srst_pulls_trst
|
28 | reset_config trst_and_srst separate
|
29 |
|
30 | jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
|
31 |
|
32 | set _TARGETNAME $_CHIPNAME.cpu
|
33 | target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME
|
34 |
|
35 | # LPC1768 has 32kB of SRAM on its main system bus (so-called Local On-Chip SRAM)
|
36 | $_TARGETNAME configure -work-area-phys 0x10000000 -work-area-size 0x8000 -work-area-backup 0
|
37 |
|
38 | $_TARGETNAME configure -event reset-init {
|
39 | # Force target into ARM state
|
40 | #arm core_state arm
|
41 | #do not remap 0x0000-0x0020 to anything but the flash
|
42 | # mwb 0xE01FC040 0x01
|
43 | mwb 0xE000ED08 0x00
|
44 | }
|
45 |
|
46 | # LPC1768 has 512kB of user-available FLASH (bootloader is located in separate dedicated region).
|
47 | # flash bank lpc1700 <base> <size> 0 0 <target#> <variant> <cclk> [calc_checksum]
|
48 |
|
49 | set _FLASHNAME $_CHIPNAME.flash
|
50 | flash bank $_FLASHNAME lpc2000 0x0 0x80000 0 0 $_TARGETNAME lpc1700 12000 calc_checksum
|
51 |
|
52 | # 4MHz / 6 = 666kHz, so use 500
|
53 | jtag_khz 500
|
Wer hat eine Idee?