Raspberry Pi 3 Model B+ のJTAG 接続とGDB によるデバッグについて
Raspberry Pi 3 Model B+ で、JTAG 接続によりデバッグを開始し
ようとしたところ、ステップによりldr 命令を実行したところでプ
ログラムが暴走し、デバッグ続行が不可能になってしまいます。
【環境】
Raspberry Pi 3 Model B+
ARM-USB-TINY-H
GNU toolchain for Raspberry Pi
OpenOCD 0.10.0
以下のコードを実行すると、プログラムが暴走します。
cps #MODE_SYS
>> ldr r0, =__stack_system
mov sp, r0
>> のところで暴走
暴走時、GDB には以下のメッセージが出力されます。
Opcode 0x1e15ee10, DSCR.ERR=1, DSCR.EL=2
QEMU 上で実行した結果は問題ないので、コードの問題とは考えづ
らいです。
この現象を収めるべく、Google で調べてみたのですが、JTAG 接続
の詳細を記している情報が少なく、自力での解決が難しい状況です。
皆様のお力をお貸しいただけると幸いに存じます。
以上、よろしくお願い致します。
ようとしたところ、ステップによりldr 命令を実行したところでプ
ログラムが暴走し、デバッグ続行が不可能になってしまいます。
【環境】
Raspberry Pi 3 Model B+
ARM-USB-TINY-H
GNU toolchain for Raspberry Pi
OpenOCD 0.10.0
以下のコードを実行すると、プログラムが暴走します。
cps #MODE_SYS
>> ldr r0, =__stack_system
mov sp, r0
>> のところで暴走
暴走時、GDB には以下のメッセージが出力されます。
Opcode 0x1e15ee10, DSCR.ERR=1, DSCR.EL=2
QEMU 上で実行した結果は問題ないので、コードの問題とは考えづ
らいです。
この現象を収めるべく、Google で調べてみたのですが、JTAG 接続
の詳細を記している情報が少なく、自力での解決が難しい状況です。
皆様のお力をお貸しいただけると幸いに存じます。
以上、よろしくお願い致します。
Re: Raspberry Pi 3 Model B+ のJTAG 接続とGDB によるデバッグについて
補足です。
OpenOCD の起動オプションは下記のとおりです。
------------------------------------------------------------
openocd.exe --file C:\Project\scripts\interface\ftdi\olimex-arm-usb-tiny-h.cfg -c "transport select jtag" --file C:\Project\scripts\target\rpi3.cfg
------------------------------------------------------------
■しかくolimex-arm-usb-tiny-h.cfg の中身
------------------------------------------------------------
#
# Olimex ARM-USB-TINY-H
#
# http://www.olimex.com/dev/arm-usb-tiny-h.html
#
adapter driver ftdi
ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H"
ftdi_vid_pid 0x15ba 0x002a
ftdi_layout_init 0x0808 0x0a1b
ftdi_layout_signal nSRST -oe 0x0200
ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100
ftdi_layout_signal LED -data 0x0800
------------------------------------------------------------
■しかくrpi3.cfg の中身
------------------------------------------------------------
# we need to enable srst even though we don't connect it
reset_config trst_and_srst
adapter speed 1000
jtag_ntrst_delay 500
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME rpi3
}
#
# Main DAP
#
if { [info exists DAP_TAPID] } {
set _DAP_TAPID $DAP_TAPID
} else {
set _DAP_TAPID 0x4ba00477
}
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_DAP_TAPID -enable
set _TARGETNAME $_CHIPNAME.cpu
set _TARGETNAME_1 $_CHIPNAME.cpu1
set _TARGETNAME_2 $_CHIPNAME.cpu2
set _TARGETNAME_3 $_CHIPNAME.cpu3
dap create $_CHIPNAME.dap -chain-position $_TARGETNAME
cti create $_TARGETNAME.cti -dap $_CHIPNAME.dap -ap-num 0 -ctibase 0x80018000
cti create $_TARGETNAME_1.cti -dap $_CHIPNAME.dap -ap-num 0 -ctibase 0x80019000
cti create $_TARGETNAME_2.cti -dap $_CHIPNAME.dap -ap-num 0 -ctibase 0x8001a000
cti create $_TARGETNAME_3.cti -dap $_CHIPNAME.dap -ap-num 0 -ctibase 0x8001b000
target create $_TARGETNAME aarch64 -dap $_CHIPNAME.dap -coreid 0 -dbgbase 0x80010000 -cti $_TARGETNAME.cti
target create $_TARGETNAME_1 aarch64 -dap $_CHIPNAME.dap -coreid 1 -dbgbase 0x80012000 -cti $_TARGETNAME_1.cti
target create $_TARGETNAME_2 aarch64 -dap $_CHIPNAME.dap -coreid 2 -dbgbase 0x80014000 -cti $_TARGETNAME_2.cti
target create $_TARGETNAME_3 aarch64 -dap $_CHIPNAME.dap -coreid 3 -dbgbase 0x80016000 -cti $_TARGETNAME_3.cti
$_TARGETNAME configure -event reset-assert-pre "aarch64 dbginit"
$_TARGETNAME configure -event gdb-attach { halt }
------------------------------------------------------------
OpenOCD の起動オプションは下記のとおりです。
------------------------------------------------------------
openocd.exe --file C:\Project\scripts\interface\ftdi\olimex-arm-usb-tiny-h.cfg -c "transport select jtag" --file C:\Project\scripts\target\rpi3.cfg
------------------------------------------------------------
■しかくolimex-arm-usb-tiny-h.cfg の中身
------------------------------------------------------------
#
# Olimex ARM-USB-TINY-H
#
# http://www.olimex.com/dev/arm-usb-tiny-h.html
#
adapter driver ftdi
ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H"
ftdi_vid_pid 0x15ba 0x002a
ftdi_layout_init 0x0808 0x0a1b
ftdi_layout_signal nSRST -oe 0x0200
ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100
ftdi_layout_signal LED -data 0x0800
------------------------------------------------------------
■しかくrpi3.cfg の中身
------------------------------------------------------------
# we need to enable srst even though we don't connect it
reset_config trst_and_srst
adapter speed 1000
jtag_ntrst_delay 500
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME rpi3
}
#
# Main DAP
#
if { [info exists DAP_TAPID] } {
set _DAP_TAPID $DAP_TAPID
} else {
set _DAP_TAPID 0x4ba00477
}
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_DAP_TAPID -enable
set _TARGETNAME $_CHIPNAME.cpu
set _TARGETNAME_1 $_CHIPNAME.cpu1
set _TARGETNAME_2 $_CHIPNAME.cpu2
set _TARGETNAME_3 $_CHIPNAME.cpu3
dap create $_CHIPNAME.dap -chain-position $_TARGETNAME
cti create $_TARGETNAME.cti -dap $_CHIPNAME.dap -ap-num 0 -ctibase 0x80018000
cti create $_TARGETNAME_1.cti -dap $_CHIPNAME.dap -ap-num 0 -ctibase 0x80019000
cti create $_TARGETNAME_2.cti -dap $_CHIPNAME.dap -ap-num 0 -ctibase 0x8001a000
cti create $_TARGETNAME_3.cti -dap $_CHIPNAME.dap -ap-num 0 -ctibase 0x8001b000
target create $_TARGETNAME aarch64 -dap $_CHIPNAME.dap -coreid 0 -dbgbase 0x80010000 -cti $_TARGETNAME.cti
target create $_TARGETNAME_1 aarch64 -dap $_CHIPNAME.dap -coreid 1 -dbgbase 0x80012000 -cti $_TARGETNAME_1.cti
target create $_TARGETNAME_2 aarch64 -dap $_CHIPNAME.dap -coreid 2 -dbgbase 0x80014000 -cti $_TARGETNAME_2.cti
target create $_TARGETNAME_3 aarch64 -dap $_CHIPNAME.dap -coreid 3 -dbgbase 0x80016000 -cti $_TARGETNAME_3.cti
$_TARGETNAME configure -event reset-assert-pre "aarch64 dbginit"
$_TARGETNAME configure -event gdb-attach { halt }
------------------------------------------------------------
Re: Raspberry Pi 3 Model B+ のJTAG 接続とGDB によるデバッグについて
もう一つ補足です。
■しかくRaspberry Pi 3 B+ とARM-USB-TINY-H の接続
ピン番号 ピン番号
1 3.3V 3.3V <-> VREF 1
15 TRST GPIO22 <-> TTRST_N 3
37 TDI GPIO26 <-> TTDI 5
13 TMS GPIO27 <-> TTMS 7
22 TCK GPIO25 <-> TTCK 9
16 RTCK GPIO23 <-> TRTCK 11
18 TDO GPIO24 <-> TTDO 13
6 GND Ground <-> GND 4
USB はUSB3.0ポートを使用しています。
■しかくRaspberry Pi 3 B+ とARM-USB-TINY-H の接続
ピン番号 ピン番号
1 3.3V 3.3V <-> VREF 1
15 TRST GPIO22 <-> TTRST_N 3
37 TDI GPIO26 <-> TTDI 5
13 TMS GPIO27 <-> TTMS 7
22 TCK GPIO25 <-> TTCK 9
16 RTCK GPIO23 <-> TRTCK 11
18 TDO GPIO24 <-> TTDO 13
6 GND Ground <-> GND 4
USB はUSB3.0ポートを使用しています。
Jump to
- Community
- General discussion
- Announcements
- Other languages
- Deutsch
- Español
- Français
- Italiano
- Nederlands
- 日本語
- Polski
- Português
- Русский
- Türkçe
- User groups and events
- Raspberry Pi Official Magazine
- Using the Raspberry Pi
- Beginners
- Troubleshooting
- Advanced users
- Assistive technology and accessibility
- Education
- Picademy
- Teaching and learning resources
- Staffroom, classroom and projects
- Astro Pi
- Mathematica
- High Altitude Balloon
- Weather station
- Programming
- C/C++
- Java
- Python
- Scratch
- Other programming languages
- Windows 10 for IoT
- Wolfram Language
- Bare metal, Assembly language
- Graphics programming
- OpenGLES
- OpenVG
- OpenMAX
- General programming discussion
- Projects
- Networking and servers
- Automation, sensing and robotics
- Graphics, sound and multimedia
- Other projects
- Gaming
- Media centres
- AIY Projects
- Hardware and peripherals
- Camera board
- Compute Module
- Official Display
- HATs and other add-ons
- Device Tree
- Interfacing (DSI, CSI, I2C, etc.)
- Keyboard computers (400, 500, 500+)
- Raspberry Pi Pico
- General
- SDK
- MicroPython
- Other RP2040 boards
- Zephyr
- Rust
- AI Accelerator
- AI Camera - IMX500
- Hailo
- Software
- Raspberry Pi OS
- Raspberry Pi Connect
- Raspberry Pi Desktop for PC and Mac
- Beta testing
- Other
- Android
- Debian
- FreeBSD
- Gentoo
- Linux Kernel
- NetBSD
- openSUSE
- Plan 9
- Puppy
- Arch
- Pidora / Fedora
- RISCOS
- Ubuntu
- Ye Olde Pi Shoppe
- For sale
- Wanted
- Off topic
- Off topic discussion