Arduino UNO R4 でソースコードデバッグするには、Segger J-LinkOzone を使えって、公式サイトの Debugging the Arduino UNO R4 Minima には書いてあるけど、Segger は高くて買う気にならないし、激安の怪しい奴は不安です。

でもって先日、ビュートローバーARM に載っている 古い LPC1343 ボードがトラ技ARMライタと繋がった のに気を良くしたのに加え、Arduino IDE の “書き込み装置” に OpenOCDコチラの記事 が分かり易いです)があったのを思い出し、もしかしたらトラ技ARMライタで Arduino UNO R4 のデバッグができるんじゃね? と。

ってことで、繋いじゃいました!

Arduino UNO Minimaに繋いだトラ技ARMライタ

ARM CMSIS-DAP Compatible

ARM CMSIS-DAP Compatible

今朝 Arduino IDE(バージョン:2.3.2)の「ツール → 書き込み装置」をみたら “ARM CMSIS-DAP Compatible” になってました。そう言えば何かアップデートされたような… まッ、細かいことは気にせず、まずは双方の JTAG/SWD コネクタの確認から。

Arduino UNO Minimaとトラ技ARMライタのピン配

UNO R4 Minima の場合、両者の接続には マルツオンラインのトラ技ARMライタ に付属の 1.27mm(ハーフピッチ) 2×5(10P) ピンヘッダ付きフラットケーブル が使えます。電源は Minima 側から +5V が供給されますが、トラ技ARMライタ基板裏面の SJ7 が繋がってないため(とりあえず後で繋げるとして)、トラ技側も USB に接続します。

一方 UNO R4 WiFi の場合は JTAG/SWD コネクタがなく、ARM MCU からの SWCLK(P300)、SWDIO(P108)が内部でレベル変換回路を通って ESP32 無線モジュールに入っちゃってるので接続は無理かもです。残念…LED のギミックいらないから開発環境を充実させてくれた方が有難いのに… と思うのは僕だけでしょうか?(2024/4/18 修正:下の参考情報にも書いてますが、IDE が対応すれば ESP32 がオンボードのデバッガになると思います。)

参考情報(2024年3月27日 追記)

  • Will the UNO R4 Minima & WiFi going to support debug?
    「対応する予定は? いつ?」に対し「気配はあるが…」で、既にクローズっぽい。色んな機種のデバッグ情報あり。

  • Arduino UNO R4 Minima Cheat Sheet
    SWD コネクタが載ってます。

  • Arduino UNO R4 WiFi Cheat Sheet
    デバッガに関するI/Fの言及なし。回路図を見てみて唯一考えられるのが ARM MCU と USB をブリッジしてる ESP32。ただ SWD の信号が外に出ていないので、デバッグプローブと電気的に接続するのではなく、ESP32 のファームを書き換えてオンボードのデバッガにするしかない のでは? という気がしてます。(→ 2024年5月3日 修正:UNO R4 WiFi は ESP32 がオンボードデバッガの役割を果たすので、トラ技 ARM ライタは不要です。)

  • Debug runtime errors on UNO R4 WiFi using stack trace
    う〜ん、エラーが起きた時だけ。初心者にはハードル高し。

デバッグ開始!

Arduino IDE で Blink をロード → コンパイル → デバッグ! っと… あれれっ? R7FA4M1AB.svd ファイルの読み込みで失敗しているみたいです。

Unable to parse SVD file /Users/xxxx/Library/Arduino15/packages/arduino/hardware/renesas_uno/1.1.0/svd/R7FA4M1AB.svd: Error: SVD error: Invalid 'derivedFrom' "P100PFS" for register "P30%sPFS"

Unable to parse SVD file

R7FA4M1AB といえば、UNO R4 に載っている Renesus 製 ARM MCU の型番です。そこでこのエラーを Google 検索してみると、Arduino 公式の Github にも issue が上がっていました。

SVDファイルとは何者?

SVDファイルの正体 を調べてみると “System View Description”、つまり MCU のレジスタや周辺装置の仕様を XML で記述したものとのこと。CMSISのサイト に載っている全体像からすると、MCU の仕様違いを吸収する層に位置付けられていることが分かります。

CMSISの全体像とデバッガの位置付け

もう少し具体的に描くと、こんな感じでしょうか。よく出来ています。

ARM MCUからArduino IDEまでのブロック図

正体が分かったところで Arduino IDE に添付された R7FA4M1AB.svd を覗き P100PFS を探してみましたが見つかりません。にもかかわらず別なところから derivedFrom で継承されてるじゃないですか! しかもコレだけじゃなく P100PFS_HA とか P100PFS_BY も未定義なことが分かりました。

P100PFS って何?

Renesas RA4M1グループ ユーザーズマニュアル ハードウェア編 によると、「ポート mn 端子機能選択レジスタ(Port Function Select)」の1つで、P100PFS はポート 1 の入出力方向やプルアップの有無などを決める大事なレジスタです。これは何とかしないといけません。

SVDファイルの修正

さて SVD ファイルの生成には CMSIS-Toolbox で色々とやらなくちゃならないようです。コレを読みこなして習熟するには時間がかかりそうなので、さらに調べてみると Github に renesas-svd を上げている人を見つけました。

同リポジトリの R7FA4M1AB.svd を調べてみると、Arduino IDE に添付されたものと完全に一致します。README.md によると Renesas.RA_DFP.4.4.0.pack を元にしているとのことで、最新版(5.2.0)R7FA4M1AB に更新する必要がありそうです。(2024/04/18 追記:Github の issue で、最新版でもダメなことが報告されました。)

ただ .pack の扱い方が分からないので、乱暴にも他の Cortex-M4 の .svd ファイルから P100PFSP100PFS_HAP100PFS_BY の定義を Arduino IDE の R7FA4M1AB.svd ファイルにコピーしてみたところ、うっ…動きました。やったゼ〜 :+1:

  • Gist: R7FA4M1AB.svd(63712行あります) → 2024年5月3日:Gist は削除しました。こちらのリポジトリ からダウンロードして下さい。

トラ技ARMライタで動作する Arduino debugger

注意事項!

一応コピーした P100PFS 等のレジスタ定義はユーザーズマニュアルに照らして正しそうなことは確認しましたが、もちろん無保証なので扱いは自己責任でお願いします。

また先にブレークポイントを設定しておかないとどこにも止まらないですし、デバッグを終了するとブートローダーが壊れるようで、 Minima のリセットボタンをダブルクリックしてから「→」ボタンで書き込まないと復活しません。(2024/4/18 修正:単にデバッガからの指示待ちで停止しているだけなので、リセットするだけで OK でした)

error: exit status 74

他力本願な願望

と言うことで、とりあえずトラ技ARMライタが Arduino IDE 上のデバッグに使えそうだと言うことまでは分かりました。残念ですが、あとはエキスパートの方にお任せしたいと思います(オィ)。

それにしても10年ほど前に作られたトラ技ARMライタにつくづく感謝です :bowing_man:

2024/04/18 追記:「Arduino UNO R4 Minima/WiFiでソースコードデバッグするまでのまとめと補足」にまとめ記事を書きました。