以前の記事でRaspberry PiのJTAGピンを有効にし、J-Linkで接続した。
今回、macパソコンから「Olimex ARM-USB-TINY-H」で、Raspberry piへのJTAG接続にチャレンジしてみたので備忘録を残す。
Olimex ARM-USB-TINY-H
ARM-USB-TINY-Hは、JTAGデバッガで5000円程度で買えるもので、私は下記URLから購入した。
https://strawberry-linux.com/catalog/items?code=15045
ドライバーのインストール
ARM-USB-TINY-HのUSER’S MANUAL(参考 1.)を見ると、FTDIのウェブサイトのドライバーを使って…とか書いてあるが、以下の方法だと、私の環境では特にインストールしなくて使えたので、そのまま進める。
OpenOCDのインストール
OpenOCDは、Homebrewからもインストールできるので、下記コマンドでopenocd
パッケージをインストール。
$ brew install openocd --enable-ft2232_ftd2xx
インストールされた設定ファイルの確認
$ ls /usr/local/Cellar/open-ocd/0.10.0/share/openocd/scripts/interface/ftdi/olimex*
/usr/local/Cellar/open-ocd/0.10.0/share/openocd/scripts/interface/ftdi/olimex-arm-jtag-swd.cfg
/usr/local/Cellar/open-ocd/0.10.0/share/openocd/scripts/interface/ftdi/olimex-arm-usb-ocd-h.cfg
/usr/local/Cellar/open-ocd/0.10.0/share/openocd/scripts/interface/ftdi/olimex-arm-usb-ocd.cfg
/usr/local/Cellar/open-ocd/0.10.0/share/openocd/scripts/interface/ftdi/olimex-arm-usb-tiny-h.cfg
/usr/local/Cellar/open-ocd/0.10.0/share/openocd/scripts/interface/ftdi/olimex-jtag-tiny.cfg
「olimex-arm-usb-tiny-h.cfg
」ファイルがあるので、それを利用する。
configファイルの用意
「Raspbery pi 2」用の設定ファイルは、提供して下さっている人がいるので、下記URLからrpi2.cfg
ファイルを入手。
openocdの起動
JTAGデバッガをケーブルで接続し、Raspberry Piの電源を入れ、下記コマンドで起動。
$ openocd -f interface/ftdi/olimex-arm-usb-tiny-h.cfg -f rpi2.cfg
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
adapter speed: 1000 kHz
adapter_nsrst_delay: 400
none separate
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
Info : clock speed 1000 kHz
Info : JTAG tap: rpi2.dap tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part: 0xba00, ver: 0x4)
Info : rpi2.cpu.0: hardware has 6 breakpoints, 4 watchpoints
Info : rpi2.cpu.1: hardware has 6 breakpoints, 4 watchpoints
Info : rpi2.cpu.2: hardware has 6 breakpoints, 4 watchpoints
Info : rpi2.cpu.3: hardware has 6 breakpoints, 4 watchpoints
openocd
は、Ctrl-c
で終了できる。
openocdのコンソールに接続
別のコマンドプロンプトを開き、下記コマンドを実行。
$ telnet localhost 4444
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
下記コマンドで状態を確認
> targets
TargetName Type Endian TapName State
-- ------------------ ---------- ------ ------------------ ------------
0 rpi2.cpu.0 cortex_a little rpi2.dap running
1 rpi2.cpu.1 cortex_a little rpi2.dap running
2 rpi2.cpu.2 cortex_a little rpi2.dap running
3* rpi2.cpu.3 cortex_a little rpi2.dap running
>
help
で使えるコマンド説明を表示。exit
コマンドで接続を終了。
GDBで「openocd」に接続
GDBコマンドのインストールは、下記記事を参照。
下記コマンドで、GDBを起動。
$ arm-unknown-eabi-gdb hoge.elf
(gdb) target remote localhost:3333
いろいろエラーは出るが接続できた。ただ、load
コマンドで失敗する。調べると他の人も同様の現象が発生している?よう。
まだ何か足りない?ようであるが、この先は後日試していきたい。
- gdbは「
quit
」コマンドで終了。 - gdbでよく使うコマンドは姉妹サイトの下記URL参照
【GDB】基本コマンド [新石器Wiki]
追記(2017/8/18)
何が悪そうなのか確かめる為に、「J-Link Lite ARM」でOpenOCDから接続を試してみた。macOSからは、特にドライバーのインストールはしなくても接続できた。
openocdの起動
$ openocd -f interface/jlink.cfg -f rpi2.cfg
Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
adapter speed: 1000 kHz
adapter_nsrst_delay: 400
none separate
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
Info : No device selected, using first device.
Info : J-Link ARM Lite V8 compiled Oct 29 2014 09:03:16
Info : Hardware version: 8.00
Info : VTarget = 3.332 V
Info : clock speed 1000 kHz
Info : JTAG tap: rpi2.dap tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part: 0xba00, ver: 0x4)
Info : rpi2.cpu.0: hardware has 6 breakpoints, 4 watchpoints
Info : rpi2.cpu.1: hardware has 6 breakpoints, 4 watchpoints
Info : rpi2.cpu.2: hardware has 6 breakpoints, 4 watchpoints
Info : rpi2.cpu.3: hardware has 6 breakpoints, 4 watchpoints
GDBから接続
$ gdbarm tmonitor
GNU gdb (GNU Tools for ARM Embedded Processors) 7.10.1.20160616-cvs
Copyright (C) 2015 Free Software Foundation, Inc.
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
warning: Remote failure reply: E01
Remote failure reply: E0E
(gdb)
やっぱりエラー! ARM-USB-TINY-Hの時と同様。
続いてOpenOCDではなく、J-Link SoftwareのGDBサーバを使ってGDBから接続してみると、問題なく接続できた(別の記事で紹介)。
又、下記記事でも紹介しているように、msys2(Windows)から試した場合も同様だったので、アダプタの問題ではなく、OpenOCDの設定か使い方に問題あるのか???
補足
openocd
パッケージをインストールすると、「libusb, libusb-compat, libftdi, hidapi」の依存パッケージも同時にインストールされた。- 「Raspberry Pi Zero」でも試してが、やはりloadでエラー。
参照記事
- 【msys2/Windows】ARM-USB-TINY-HでRaspberry pi 2にJTAG接続する
- 【macOS】J-Link LITE ARMでRaspberry pi 2/ZeroにGDBでJTAG接続する
参考
- ARM-USB-TINY-H USER’S MANUAL
- Getting JTAG and serial port to work under Mac OS X using an Olimex ARM-USB-OCD
- OpenOCD setup for Mac OSX
- FT4332H (FT2232) で Raspberry Pi (bare metal) を JTAG (Mac OS X)
- Raspberry Pi2をJTAGデバッグできました
- OpenOCD User’s Guide
- 「ラズパイARM体得プログラムの動かし方」CQ出版社 Interface誌 2017年2月号 p95〜p107
- 「プロなみJTAGデバックを個人でも! オープンソースOpenOCD入門」CQ出版社 Interface誌 2015年3月号 p96〜p107
コメント