开发平台: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
#
# http://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
changwu xie1:
有人么???
Steven Liu1:
JLink用的不多,所以没太明白你上面的用法。一般我这边JLink,通过JTAG口,主机使用IAR进行调试。调试的一般是裸跑的程序比较多,调试Linux不怎么多。
没明白后面讲述的问题是怎么个意思。
对于CPU内部的RAM这里,这块是可以访问的,但是在Linux的使用过程中,前1KB的空间,和最后18K的空间,是被占用了的。你可以参考这里有些说明:
http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User%27s_Guide#Two_stage_U-Boot_design
changwu xie1:
回复 Steven Liu1:
你好,感谢您的回答!
我没有去访问前1K的空间,text_base是从0x402f0400开始的。
最后面那个问题,是说Openocd里面需要指定debug 相关的一个地址(不指定无法调试),但是我在TI的TRM里面没有看到这个地址的任何说明。
PS:现在通过openocd手动指定CoreSight的dap 1(APB_AP)可以访问了,能在SRAM中调试SPL但是调试时运行速度很慢。