Arduino UNO R4 Minima/WiFiでソースコードデバッグするまでのまとめと補足
本サイトでは、トラ技 ARM ライタに関する記事を2つほど紹介してきました。
前者は LPC1343 ボード のことになるので、Arduino UNO R4 Minima でトラ技 ARM ライタを動かすには両記事の拾い読みが必要でした。また幾つかノウハウも溜まってきたので改めて本記事にまとめます。
本記事の元となる開発環境について
最初のお断りとして、僕の開発環境は以下のようにとても古いです。幸い Mac 上で Arduino IDE 2.x は動作しますが、仮想マシン上の Widnows7 では動作しないので、IDE の動作例は全て Mac 版となります。
PC 環境
- MacOS バージョン 11.7.10 (Big Sur on MacBook Pro Late 2013)
- Window 7 (MacOS 上の仮想マシン環境にて動作)
ただし以下は LPC1343 ボード での実績により、Windows 上でも動作するハズです。
- ISP モードによる トラ技 ARM ライタのファームウェア書き換え
- ヒューマン インターフェース デバイス(HID)ドライバのインストール
- CMSIS-DAP(デバイス名:
Toragi-LPC Writer CMSIS-DAP
)によるデバッグ
また本記事内の Windows7 スクリーンキャプチャ画像は、最新機種のものに読み替えてご覧ください。
Arduino IDE
- バージョン:2.3.2
- CLIバージョン:0.35.3
Arduino UNO R4 用ボードマネージャ
- Arduino UNO R4 Boards by Arduino 1.1.0
必要なもの
-
Arduino UNO R4 Minima
CMSIS-DAP に対応した JTAG/SWD デバッグプローブが必要です。本記事では トラ技 ARM ライタを紹介しています。 -
Arduino UNO R4 WiFi
オンボードデバッガが搭載されているので、デバッグプローブは不要です。デバッガの起動と SVD ファイルの更新 に進んで下さい。
「SVDファイルとは何者?」から、CMSIS-DAP や CMSIS-SVD、JTAG/SWD デバッグプローブについての図を再掲します。
トラ技 ARM ライタ
購入は CQ 出版から出ている書籍版とマルツオンラインで販売されている単体版の2択です。 (UNO R4 WiFi では ESP32 がオンボードデバッガとして機能するので不要です。)
-
書籍版
Amazon あるいは 紀伊國屋書店 から購入可能です。mbedやデバッガ関連の記事、トラ技 ARM ライタ基板、ピンヘッダやスイッチ類、CD-ROM のセットからなり、ピンヘッダやスイッチ類のハンダ付けが必要です。また USB-miniB ケーブルと 2×5 ハーフピッチフラットケーブルは別途準備が必要です。 -
単体版
Amazon でも購入可能 ですが、マルツオンライン の方が安価です。ハンダ付けが不要で、USB-miniB ケーブル、2×5 ハーフピッチのフラットケーブルが付属します。簡単な取説がついていますが、基本オンライン情報のみです。価格が安く接続に必要な品が揃っているので オススメ です。
僕は LPC1343 ボード 用と兼用しているので取り付けましたが、両版とも CN5
用に付属する 1×8 L字ピンヘッダは邪魔になるだけなのでハンダ付けの必要はありません。
あると便利なもの
-
2×5(10P)両端コネクタ付IDCリボンケーブル(フラットケーブル ハーフピッチ)
書籍版には必要ですし、単体版のケーブルは 10cm と短く取り回しの自由度が少ないため、あると便利と思います。 -
スイッチ付き USB ケーブル
あると便利、というかケーブルの頻繁な抜き差しはよくないので。必ず データ線が結線されているタイプ を選んでください。
CMSIS-DAP 用ファームウェアの書き込み
ファームウェアのダウンロードと解凍
購入時は単にマイコン基板として動作するだけなので、CMSIS-DAP 用ファームウェアへの書き換えが必要です。
過去ログ 2014年2月号3月号連続企画 のページから 3月号付録基板関連ファイル にあるトラ技ARMライタのファームウェア TR1403N.zip をダウンロードし解凍します。
ファームウェアの書き込み
トラ技 ARM ライタを ISP ボタンを押しながら USB miniB ケーブルで PC に接続するか、接続済みなら ISP ボタンを押しながらリセットすると、FAT12 の USB ストレージ CRP DISABLE
(物理デバイス名は LPC1XXX IFLASH
)が現れます。
中の firmware.bin
を削除し、替わりにダウンロードした firmware.bin
をコピーします。
ISP は In-System Programming の略で、製品になってからも PC などからファームウェアの書き込みができる機能です。また CRP は Code Read Protection の略で、内蔵メモリの読み出しを防止する機能です。CRP DISABLE
はこの機能を「無効」にしていることを表しています。
この時、Windows であればドラッグ&ドロップで OK ですが、Mac の場合は ターミナル.app からコピーしないとうまくいきません(ご参考:nxp fan さん の Facebookページ 「USB経由ISP書き込み」をMacで行う)。
ターミナル.app からのコピー方法
まず を起動し、cp -X
とスペースを打ち込みます。続いてそこに firmware.bin
をドラッグ&ドロップし、さらに CRP DISABLE
をドラッグ&ドロップすると、cp -X
の後ろにコピー元のファイルとコピー先が入力されるので、リターンキーを押します。これで Mac 特有の拡張属性が付かずにコピーが完了します。
デバイスドライバの確認
コピー後は、通常の USB ドライブと同様に CRP DISABLE
を取り外す(Windows の場合)か、ゴミ箱にドラッグ&ドロップする(Mac の場合)します。リセットボタンか電源を入れ直し、赤と緑の LED が点灯 → 消灯が確認できれば成功です。
Mac の場合
アップルメニューから「この Mac について → システムレポート → ハードウェア → USB」をたどり Toragi-LPC Writer CMSIS-DAP
が確認できれば OK です。
Windows の場合
デバイスマネージャから「ヒューマン インターフェース デバイス → HID 準拠デバイス → 詳細 → ハードウェア ID」とたどり、値が HID¥VID_0D28&PID_0019&REV_0100
であることを確認できれば OK です。
設定と接続
トラ技 ARM ライタと Arduino UNO R4 Minima の接続
コネクタのピン配列は 以前の記事 を参照してください。フラットケーブルを、トラ技 ARM ライタ側は CN4
に、Minima 側は SWD
に接続します。画像を参考に、接続の向きには十分注意してください。逆挿はヤバいです。
PC との接続と設定
まず Arduino IDE メニューの「ツール → 書き込み装置」を ARM CMSIS-DAP compatible
に設定します。でも実際には CMSIS-DAP で書き込みは行いません。
Arduino IDE では プログラムの書き込みを USB ドライバ UNO R4 Minima
から dfu-util(Device Firmware Upgrade Utilities) で、デバッグを Toragi-LPC Writer CMSIS-DAP
から openocd(Open On-Chip Debugger) で行います。
これが意味するのは Minima とトラ技 ARM ライタの両方を PC と繋がなくちゃならないということです。
書き込みも openocd で出来れば、USB ケーブルはトラ技 ARM ライタ側だけで OK なハズですが、現状は launch.json
などで変えられそうにないんですよね。
ちなみに、どんな都合か分かりませんが UNO R4 WiFi は BOSSA という、また違った書き込みソフトを使っています。
デバッガの起動と SVD ファイルの更新
2024年6月3日に UNO R4 用ボードマネージャが 1.2.0 にアップデートされたので、SVD ファイルの更新は不要です。
ちなみに、SVD ファイルの修正に貢献しました!
コンパイルオプションの設定
IED メニューから「スケッチ → デバッグに最適化」にチェックを付けます。これを設定しておかないとまともにソースコードデバッグができません。
次に、適当なスケッチを準備し、デバッグ情報が付加されたオブジェクトを生成するため で再コンパイルします。
でデバッグを開始すると Unable to parse SVD file
のエラーが発生するので、SVD ファイルへのパスを記録します。
また、デバッグウィンドー内の構成リストが Arduino UNO R4 Minima (cmsis-dap)
になっていることを確認してください。
SVD ファイルの差し替え
SVD ファイルの更新版 をダウンロードしてください。本サイトの R7FA4M1AB.svd.zip からもダウンロードが可能です(.zip ファイルは解凍してください)。
次に、先に記録した SVD ファイルのあるフォルダを開き、元のファイルを R7FA4M1AB-.svd
にリネームするなどして退避した後、ダウンロードした R7FA4M1AB.svd
に差し替えます。
デバッグの開始と終了
これでデバッグができる準備が整ったハズです。行番号の左側をクリックするとブレークポイントが設定できるので、止めたいところをマーキングします。
デバッグの終了は ボタンで可能ですが、Minima はデバッガからの指示待ちで停止したままなので、リセットボタンで再起動してください。
トラブルシューティング
ここに辿り着くまでに出会ったエラーを載せておきます。
Upload error: Failed uploading: unloading error: exit status 74
IDE が Arduino ボードにアクセス出来ない時に起こります。電源、コネクタはもちろんですが、デバイスドライバが認識されているかを確認します。
OpenOCD: GDB Server Quit Unexpectedly. See dbg-server output for more details.
トラ技 ARM ライタと通信ができない時に発生します。USB コネクタが物理的にしっかり接続されているか、または設定で「ツール → 書き込み装置」の ARM CMSIS-DAP compatible
にチェックが入っているかを確認します。正しく繋がっていれば、電源投入時やリセット時など、トラ技 ARM ライタの赤と緑の LED が点灯 → 消灯します。症状が改善しない時は、ファームウェアの書き込み から再構築してみます。
dfu-util: No DFU capable USB device available
「デバイスのファームウェアをアップグレードできる USB が見つからない」というエラーで、公式サイト dfu-util errors when uploading (exit status 74) にある通り、基本は「ケーブルを確認せよ」です。Windows であれば Arduinoで「No DFU capable USB device available」エラーが出たときの対処法 が参考になるかもしれません。
僕の場合、アップロードも CMSIS-DAP からできるものと思い込み、Minima 側の USB を接続してなかった時に発生してました(トラ技 ARM ライタ基板裏面の SJ7
をショートされれば Minima に電源供給できる)。今では両基板とも USB 接続することで事なきを得ています。
何をやっても CRP DISABLED が出現する
トラ技 ARM ライタを単独で電源投入すると、赤と緑の LED ランプが点灯せず ISP モードで立ち上がることがあります。先に Minima を ON していればこの事象は発生しないようです。
一方何をやっても ISP モードとなってしまう場合には、CMSIS-DAP ファームウェアが正しく書き込めていないことが考えられます。
特に Mac の場合、CMSIS-DAP ファームウェアを書き込む際にドラッグ&ドロップしてませんか? ターミナルapp からのコピー方法 の手順に従ってください。
最後に…
Arduino IDE のデバッガはとても使い難いです。VSCode + PlatformIO に乗り換えようと奮闘中ですが、同様の SVD ファイルエラーを抱えていますね。
※ 2024年5月7日 追記:R7FA4M1AB.svd
の 修正版 が Arduino 公式 GitHub に 取り込まれました。修正内容の詳細を「Arduino UNO R4ユーザーに朗報、ソースコードデバッグが可能に!」で解説しているので、興味があれば覗いてみてください。