开发平台:Eclipse 4.4.2 , Ubuntu14.04,openocd-0.9.0 , gdb调试,jlink V8仿真器(已升级到最新固件),Beaglebone black中国版。
1、使用Jlink官方的驱动,在SRAM中和DDR中分别调试SPL和u-boot都没有问题。
2、使用openocd调试,在DDR中调试一切正常。
3、使用openocd调试,准备在SRAM中调试时,在download的时候 openocd提示如下的错误(地址不只是0x402f10a4 ):
MEM_AP_CSW 0x2800062, MEM_AP_TAR 0x402f10a4 . Failed to read memory at 0x402f10a4
4、说明:MMU I-cache D-cache都已经关闭,SPL的text_base是0x402f0400,总大小大概79K。
5、在U-boot调试时,尝试访问0x402f0400到0x402fffff之间的memory,也都无法访问。
问题:CPU内部的那64K SRAM是否有什么寄存器可以禁止外部访问?应该在哪打开?
用Jlink自带的驱动是全部可以访问的(除了前面1K的空间)。
跪求解答!!
openocd.cfg文件如下:
还有一问题,下面的 dbgbase 0x80001000 ,为什么是0x80001000 ?这不是DDR的内存区域么?跟debug有什么关系呢?
#
# Segger J-Link
#
# www.segger.com/jlink.html
#
interface jlink
gdb_port 2331
telnet_port 4444
adapter_khz 2000
#----------------------------------------------------------------
source [find target/icepick.cfg]
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME am335x
}
if { [info exists ENDIAN] } {
set _ENDIAN $ENDIAN
} else {
set _ENDIAN little
}
#
# M3 DAP
#
if { [info exists M3_DAP_TAPID] } {
set _M3_DAP_TAPID $M3_DAP_TAPID
} else {
set _M3_DAP_TAPID 0x4b6b902f
}
jtag newtap $_CHIPNAME m3_dap -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_M3_DAP_TAPID -disable
jtag configure $_CHIPNAME.m3_dap -event tap-enable "icepick_d_tapenable $_CHIPNAME.jrc 11 0"
#
# Main DAP
#
if { [info exists DAP_TAPID] } {
set _DAP_TAPID $DAP_TAPID
} else {
set _DAP_TAPID 0x4b6b902f
}
jtag newtap $_CHIPNAME dap -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_DAP_TAPID -disable
jtag configure $_CHIPNAME.dap -event tap-enable "icepick_d_tapenable $_CHIPNAME.jrc 12 0"
#
# ICEpick-D (JTAG route controller)
#
if { [info exists JRC_TAPID] } {
set _JRC_TAPID $JRC_TAPID
} else {
set _JRC_TAPID 0x0b94402f
}
jtag newtap $_CHIPNAME jrc -irlen 6 -ircapture 0x1 -irmask 0x3f -expected-id $_JRC_TAPID -ignore-version
jtag configure $_CHIPNAME.jrc -event setup "jtag tapenable $_CHIPNAME.dap"
# some TCK tycles are required to activate the DEBUG power domain
jtag configure $_CHIPNAME.jrc -event post-reset "runtest 1000"
#
# Cortex A8 target
#
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_a -chain-position $_CHIPNAME.dap -dbgbase 0x80001000
# SRAM: 64K at 0x4030.0000; use the first 16K
$_TARGETNAME configure -work-area-phys 0x40300000 -work-area-size 0x4000
$_TARGETNAME configure -event gdb-attach {
am335x.cpu cortex_a dbginit
halt
echo "disable mmu icache dcache..."
# disable mmu icache dcache
arm mcr 15 0 1 0 0 12912760
poll
}
$_TARGETNAME configure -event "reset-assert" {
global _CHIPNAME
echo "............................................."
# assert warm system reset through ICEPick
icepick_c_wreset $_CHIPNAME.jrc
}
targets
#----------------------------------------------------------------
init
reset_config trst_and_srst combined