2015-01-16 6 views
0

OpenOCD를 사용하여 LPC4357 마이크로 컨트롤러를 프로그래밍하고 디버깅하는 데 문제가 있습니다. 이 칩은 코어 텍스 M4 코어와 2 차 코어 텍스 M0 코어를 가지고있다. 오류가 다음 줄 것이다 내부 플래시에 뭔가를 작성하는 GDB의 부하 명령을 사용하려고OpenOCD의 보조 코어 구성

source [find target/swj-dp.tcl] 

adapter_khz 1000 

if { [info exists CHIPNAME] } { 
    set _CHIPNAME $CHIPNAME 
} else { 
    set _CHIPNAME lpc43xx 
} 

if { [info exists M4_JTAG_TAPID] } { 
    set _M4_JTAG_TAPID $M4_JTAG_TAPID 
} else { 
    set _M4_JTAG_TAPID 0x4ba00477 
} 

if { [info exists M4_SWD_TAPID] } { 
    set _M4_SWD_TAPID $M4_SWD_TAPID 
} else { 
    set _M4_SWD_TAPID 0x2ba01477 
} 

if { [using_jtag] } { 
    set _M4_TAPID $_M4_JTAG_TAPID 
} { 
    set _M4_TAPID $_M4_SWD_TAPID 
} 

if { [info exists M0_JTAG_TAPID] } { 
    set _M0_JTAG_TAPID $M0_JTAG_TAPID 
} else { 
    set _M0_JTAG_TAPID 0x0ba01477 
} 

swj_newdap $_CHIPNAME m4 -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_M4_JTAG_TAPID 
swj_newdap $_CHIPNAME m0 -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_M0_JTAG_TAPID 

target create $_CHIPNAME.m0 cortex_m -chain-position $_CHIPNAME.m0 
target create $_CHIPNAME.m4 cortex_m -chain-position $_CHIPNAME.m4 

set _WORKAREASIZE 0x2000 
$_CHIPNAME.m4 configure -work-area-phys 0x10000000 -work-area-size $_WORKAREASIZE 

set _FLASHNAME $_CHIPNAME.flash 
flash bank flashA lpc2000 0x1a000000 0x80000 0 0 $_CHIPNAME.m4 lpc4300 107000 calc_checksum 
flash bank flashB lpc2000 0x1b000000 0x80000 0 0 $_CHIPNAME.m4 lpc4300 107000 calc_checksum 

cortex_m reset_config vectreset 

: 이것은 내가 사용 OpenOCD의 설정 지금

Error: timed out while waiting for target halted 
TARGET: lpc43xx.m0 - Not halted 
in procedure 'reset' 
in procedure 'ocd_bouncer' 

in procedure 'reset' 

Error: Target not halted 
Error: failed erasing sectors 0 to 3 
Error: flash_erase returned -304 
target state: halted 
target halted due to debug-request, current mode: Thread 
xPSR: 0x41000000 pc: 0x10402d5e msp: 0x10089c70, semihosting 
Info : Halt timed out, wake up GDB. 

나는 의심 문제가 있다는 것입니다 OpenOCD 플래시 쓰기를하기 전에 M0 코어를 멈춰야한다고 생각하고, M0 코어가 정지 요청에 응답하지 않습니다.

이유는 M0 코어가 실행 중이 아니므로 정지 할 수 없기 때문입니다. 리셋 및 클럭 신호는 M4 코어에 의해 제어되며 나중에 부팅 순서에서만 활성화됩니다.

OpenOCD에게 M0 펌웨어가 M4 펌웨어에 의해 활성화 될 때까지 M0 코어를 사용할 수 없다는 것을 알리는 방법이 있습니까? 미묘한

답변

0

:

target create $_CHIPNAME.m0 cortex_m -chain-position $_CHIPNAME.m0 
target create $_CHIPNAME.m4 cortex_m -chain-position $_CHIPNAME.m4` 

다음 행을 교환하십시오. 첫 번째로 생성 된 타겟 (M0)이 기본 타겟입니다.

targets $_CHIPNAME.m4 명령을 사용할 수도 있습니다. 명령에서 복수를 확인하십시오.