【macOS】ARM-USB-TINY-HでRaspberry pi 2にJTAG接続する

スポンサーリンク

以前の記事でRaspberry PiのJTAGピンを有効にし、J-Linkで接続した。
今回、macパソコンから「Olimex ARM-USB-TINY-H」で、Raspberry piへのJTAG接続にチャレンジしてみたので備忘録を残す。

【Raspberry Pi】u-bootでJTAGピンを有効にする
Raspberry Piで、ベアメタルなソフト開発をするのに、JTAGデバックできた方が便利なのだが、初期状態ではJTAGの信号がGPIOコネクタに割り当てられていない。 そこで、u-bootの初期化ソースコードを修正して、JTAGピンを有...

Olimex ARM-USB-TINY-H

ARM-USB-TINY-Hは、JTAGデバッガで5000円程度で買えるもので、私は下記URLから購入した。
https://strawberry-linux.com/catalog/items?code=15045

画像01

ドライバーのインストール

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 target config file for Raspberry Pi 2
OpenOCD target config file for Raspberry Pi 2. GitHub Gist: instantly share code, notes, and snippets.

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コマンドのインストールは、下記記事を参照。

【macOS】ARMのGCCコンパイル環境を構築する
Macでの、ARM用のGNUクロスコンパイル環境を構築する。 そこで「GNU ARM Embedded Toolchain」のツールチェーンをインストールして使う。 ARMツールチェーンのダウンロード 下記URLから、Mac OSX 64b...

下記コマンドで、GDBを起動。

$ arm-unknown-eabi-gdb hoge.elf
(gdb) target remote localhost:3333

いろいろエラーは出るが接続できた。ただ、loadコマンドで失敗する。調べると他の人も同様の現象が発生している?よう。
まだ何か足りない?ようであるが、この先は後日試していきたい。

追記(2017/8/18)

何が悪そうなのか確かめる為に、「J-Link Lite ARM」でOpenOCDから接続を試してみた。macOSからは、特にドライバーのインストールはしなくても接続できた。

画像05

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の設定か使い方に問題あるのか???

【msys2/Windows】ARM-USB-TINY-HでRaspberry pi 2にJTAG接続する
以前の記事でRaspberry PiのJTAGピンを有効にし、J-Linkで接続した。 今回、msys2環境(Windows)から「Olimex ARM-USB-TINY-H」で、Raspberry piへのJTAG接続にチャレンジしてみた...

補足

  • openocdパッケージをインストールすると、「libusb, libusb-compat, libftdi, hidapi」の依存パッケージも同時にインストールされた。
  • 「Raspberry Pi Zero」でも試してが、やはりloadでエラー。

参照記事

【macOS】J-Link LITE ARMでRaspberry pi 2/ZeroにGDBでJTAG接続する
前の記事で、「Olimex ARM-USB-TINY-H」からRaspberry piへのJTAG接続にチャレンジした。どうもうまく動かせなかったので「J-Link LITE ARM」を使ってGDBからの接続を試したので備忘録を残す。 J-...

参考

  1. ARM-USB-TINY-H USER’S MANUAL
  2. Getting JTAG and serial port to work under Mac OS X using an Olimex ARM-USB-OCD
  3. OpenOCD setup for Mac OSX
  4. FT4332H (FT2232) で Raspberry Pi (bare metal) を JTAG (Mac OS X)
  5. Raspberry Pi2をJTAGデバッグできました
  6. OpenOCD User’s Guide
  7. 「ラズパイARM体得プログラムの動かし方」CQ出版社 Interface誌 2017年2月号 p95〜p107
  8. 「プロなみJTAGデバックを個人でも! オープンソースOpenOCD入門」CQ出版社 Interface誌 2015年3月号 p96〜p107

コメント

タイトルとURLをコピーしました