【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接続にチャレンジしてみたので備忘録を残す。

【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.)の手順に従ってドライバーをインストールする。

「ARM-USB-TINY-H」をパソコンに接続すると、下記のようになっている。

画像10

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

http://zadig.akeo.ie/
Zadigを使用して”ARM-USB-OCD-H (Interface 0)”のデバイスにWinUSBを適用する。
“Interface 1″には適用してはいけない。
とりあえず、”Interface 1″のドライバはインストールしなくて良い。

画像11

ドライバ−、インストール完了すると下記のようになる。

画像12

OpenOCDのインストール

OpenOCDは、msys2のpacmanからもインストールできるので、パッケージを検索して確認。

$ pacman -Ss openocd
mingw32/mingw-w64-i686-openocd 0.10.0-1
    OpenOCD - Open On-Chip Debugger (mingw-w64)
mingw32/mingw-w64-i686-openocd-git 0.9.0.r2.g79fdeb3-1
    OpenOCD - Open On-Chip Debugger (mingw-w64)
mingw64/mingw-w64-x86_64-openocd 0.10.0-1
    OpenOCD - Open On-Chip Debugger (mingw-w64)
mingw64/mingw-w64-x86_64-openocd-git 0.9.0.r2.g79fdeb3-1
    OpenOCD - Open On-Chip Debugger (mingw-w64)

mingw-w64-i686-openocdパッケージのインストール

下記コマンドで、mingw32用のopenocdパッケージをインストール。尚、依存するパッケージもインストールされる。

$ pacman -S mingw-w64-i686-openocd
  • mingw64環境で使う場合は mingw-w64-x86_64-openocd パッケージを使う。

インストールされた設定ファイルの確認

$ ls /mingw32/share/openocd/scripts/interface/ftdi/olimex*.cfg
/mingw32/share/openocd/scripts/interface/ftdi/olimex-arm-jtag-swd.cfg
/mingw32/share/openocd/scripts/interface/ftdi/olimex-arm-usb-ocd.cfg
/mingw32/share/openocd/scripts/interface/ftdi/olimex-arm-usb-ocd-h.cfg
/mingw32/share/openocd/scripts/interface/ftdi/olimex-arm-usb-tiny-h.cfg
/mingw32/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コマンドのインストールは、下記記事を参照。

【msys2】ARMのGCCコンパイル環境を構築する
以前の記事で、msys2のコンソールシェル環境を構築した。 続いて、ARM用のGNUクロスコンパイル環境を構築。 「GNU ARM Embedded Toolchain - ARMDeveloper」のツールチェーンをインストールして使う。...

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

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

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

追記(2017/8/18)

下記記事でも紹介しているように、macOSから試した場合と同様に接続できない。

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

又、「J-Link Lite ARM」を使ってもOpenOCDからだと同様に接続できなかったので、アダプタの問題ではなく、OpenOCDの設定か使い方に問題あるのか???

補足

  • ARM-USB-TINY-Hは、interfaee 0がJTAG用、interface 1がシリアル通信用になっている。

参照記事

【Windows/msys2】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. RaspberryPi3 64bitモード ベアメタルをJTAGデバッグする
  3. Raspberry Pi2をJTAGデバッグできました
  4. OpenOCD User’s Guide
  5. 安価なJTAG ICEのOlimex ARM-USB-TINY-H を使ってみた
  6. ARM-USB-TINY-H で Raspberry Pi を JTAG デバッグ
  7. 「ラズパイARM体得プログラムの動かし方」CQ出版社 Interface誌 2017年2月号 p95〜p107
  8. 「プロなみJTAGデバックを個人でも! オープンソースOpenOCD入門」CQ出版社 Interface誌 2015年3月号 p96〜p107

コメント

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