Arduinoの設定 - デバッグ
概要
Atmel Studio 7を使用すると、Arduinoのスケッチをインポートしてデバッグできる。
これにより、Arduinoはプロの設計エンジニアツールとなる。
Arduino UNO R3
前提条件
Arduinoをデバッグするには、以下のような注意点がある。
- Arduino ICSP接続ができるデバッガが必要となる。
(例: Atmel-ICE等) - Atmel Studio 7をインストールする必要がある。
- ArduinoでdebugWireを動作させるため、Arduinoの回路を変更する必要がある。
Atmel Studio 7で設計を行う場合、Arduinoのブートローダが消去される。
そのため、他の開発環境でArduinoを使用する場合は、ブートローダを再び書き込む必要がある。
Arduinoの回路の変更
Arduino Unoには、ATmega 328Pとブートローダ(optiboot_atmega328.hex)が搭載されている。
ブートローダは、リセット時に実行されて、シリアルインターフェイスを介して送信された値により、ATmega 328のメモリをプログラムする。
これは、新しいスケッチをArduinoにアップロードできるようにするものである。
DTR信号の状態が一時的に変化する時、ブートローダが開始される。
下図に示す回路において、CH1がDTRであり、CH2がRESETである。
下図に、スケッチがArduinoにアップロードされた時、オシロスコープにより計測されたリセットパルスを示す。
回路図のコンデンサC5は、debugWIREインターフェースに影響を与えており、また、ATmega 328Pのリセット制御にも依存している。
幸い、リセットラインからコンデンサC5を切り離すことができるジャンパーカットをPCBに残している。
剃刀等の鋭利な工具を使用して、"RESET EN"または"RESET ON"と書かれた2つの錫メッキパッドを接続するパターンをカットする。
(C5までのパターンを切らないように注意すること)
パッドのパターンをカットした後、Arduinoのデバッグが可能になる。
※注意
このパターンを切断している状態では、ブートローダが書き込まれている場合でも、Arduino IDEはスケッチをアップロードできない。
下図のように、パッドに2ピンのヘッダを接続して、debugWIREインターフェースと標準のArduinoのブートロードを切り替えられるようにするとよい。
切り替えは、ジャンパの接続または取り外すことで行う。
Arduinoのスケッチをデバッグするには、以下のようにする必要がある。
- リセットがコンデンサC5から切り離されていることを確認する。
2ピンのヘッダを接続している場合は、ヘッダからジャンパーを取り外す。 - ICSPのシルクがあるコネクタにAtmel-ICEを接続する。
接続方法は、Atmel-ICEコネクタのタブ(出っ張り)を、ArduinoのコンデンサC5に向けて接続する。 - PCとArduinoをUSBケーブルで接続して、ArduinoのDCジャックに電源を供給する。
Arduino UNO R4 Minima
Arduino UNO R4 Minimaをデバッグすることにより、トラブルシューティングやコードの実行を分析することができる。
必要なもの
- UNO R4ボードパッケージ
- Segger J-Link
- J-Linkは、PCとArduino UNO R4 Minimaを直接接続できるデバッグツールである。
- これにより、マイコンの内部レジスタ、メモリ、変数にフルアクセスすることができる。
- Ozone
- Ozoneと併用することにより、ソースコードを1行ずつステップスルーすることができるため、ソースコードを分析することができる。
UNO R4ボードパッケージのインストール
まず、UNO R4ボードパッケージをインストールする。
Arduino IDE 2のメイン画面左にある[ボードマネージャー]を選択する。
UNO R4 Minimaを検索して、最新のバージョンをインストールする。
Arduino IDE 2のメイン画面上にあるボードセレクターから、Arduino UNO R4 Minimaを選択する。
最後に、PCとArduino UNO R4 MinimaをUSB-C経由で接続する。
Seagger J-Link
次に、PCとJ-Linkを接続、J-LinkとArduino UNO R4 Minimaを接続する。
J-linkにはケーブルが同梱されており、ケーブルの向きを示す赤い印が片側に付いている。
ケーブルの赤い側は、SWDパッドのVCCピンと同じ側にある。(ケーブルの正確な向きは、デバッガのマニュアルやデータシートを参照すること)
J-linkとArduino UNO R4 Minimaの接続は、SWDピンと表示されたデバッグ用の特別なピンがあるため理解しやすい。
コンパイル
Arduino IDE 2のメイン画面から、[ファイル] - [基本設定...]を選択する。
[基本設定]画面の[より詳細な情報を表示する]項目から、[コンパイル]チェックボックスおよび[書き込み]チェックボックスにチェックを入力する。
デバッグ対象のスケッチをコンパイルする。
Arduino IDE 2からスケッチをアップロードする場合、.ELFファイルの保存場所を知る必要がある。
下図では、"C:\Users\profile\AppData\Local\Temp\arduino_build_815037\<スケッチ名>.elf" (Windowsの場合) のようなパスに出力される。
Linuxの場合は、"~/.cache/arduino/sketches/<ランダムな値>/<スケッチ名>.elf"のようなパスの出力される。
この.ELFファイルを使用することにより、J-LinkおよびSegger Ozoneでデバッグを行うことができる。
Segger Ozone
Segger Ozoneの公式Webサイトにアクセスして、Ozoneデバッガをダウンロードおよびインストールする。
Windowsの場合は、J-Link Software and Documentation Pack for Windowsもダウンロードする。
デバッグプロジェクトの作成
- Ozoneを起動する。
- ターゲットデバイスの設定を行う。
- [Target Device Settings]画面から、[Manufacturer]プルダウンから[Renesas]、[Device]プルダウンから[R7FA4M1AB] (Arduino UNO R4 Minimaの搭載マイコン) を選択する。
- [OK]ボタンを押下する。
- 接続設定を行う。
- [Target Interface]プルダウンから[SWD]を選択する。
- [Emulators connected via USB]リストから、J-Linkデバイスを選択して、[Next]ボタンを押下する。
- デバッグするスケッチの.ELFファイルを選択する。
これは、上記でコンパイルした.ELFファイルのフルパスを入力する。 - [Next]ボタンを押下する。
- [Optional Settings]画面では、[Initial PC]ラジオボタンおよび[Initial Stack Pointer]ラジボタンの両オプションを[Do not set]に設定する。
- [Finish]ボタンを押下する。
セットアップの完了後、メイン関数を含むファイルが自動的に開かれる。
これは、Arduino IDE 2によって生成された抽象化レイヤーであるため、開発者が設計したスケッチではないことに注意すること。
スケッチ本体を開く場合は、Ozoneの上部ツールバーから、[Find] -[Find source file]を選択する。
右上に表示された小さなウィンドウに".ino"と入力することによりスケッチ群が表示されるため、該当するスケッチを選択する。
ブレークポイントの設定
スケッチの横にあるサイドバーを選択して、ブレークポイントを設定する。
デバッグの開始
スケッチのデバッグを開始するには、Ozoneのメイン画面上部にある[Debug]メニューバー - [Start Debug Session] - [Download & Reset Program]を選択する。
Ozoneデバッガの詳細な機能については、公式Webサイトを参照すること。
Arduino UNO R4 WiFi
手順
- Arduino UNO R4 WiFiに外部電源 (ACアダプタ) を接続する。
- Arduino IDE 2の[ツール]メニューバー - [ARM CMSS-DAP互換]を選択する。
- Arduino IDE 2の[スケッチ]メニューバー - [デバッグに最適化]を選択する。
- Arduino IDEでは、ボード上でより効率的に (クロックサイクルやメモリ使用量等) 実行できるよう、コンパイラがプログラムを最適化するように自動設定される。
- しかし、最適化を行うと生成されるプログラムがソースコードと大きく異なってしまい、デバッガが使用可能な結果を得られないことがある。
- そこで、デバッグ時には最適化レベルを下げる。
- 再コンパイルしてアップロードする。
- デバッグコンソールを開いている場合は閉じる。
- 既にGDB Serverを起動している場合は、Arduino IDEのメイン画面左上にある[Stop]アイコンを選択する。
- Arduino IDE 2メイン画面左上にあるデバッグアイコンを選択して、デバッグを開始する。
エラー
以下に示すようなエラーが表示される場合がある。
Arduino R4 WiFi Debug OpenOCD: GDB Server Quit Unexpectedly. See gdb-server output for more details.
修正方法 1
Arduino UNO R4 WiFiに外部電源 (ACアダプタ) を再接続する。
修正方法 2
最新のopenocd.exeをインストールする。
https://github.com/xpack-dev-tools/openocd-xpack
修正方法 3
Linuxの場合は、udevルールファイルを再インストールする。
git clone https://github.com/arduino/ArduinoCore-renesas.git cd ArduinoCore-renesas
sudo ./post_install.sh
Arudino UNO R4 WiFiのudevファイルがインストールされる。
/etc/udev/rules.d/60-arduino-renesas.rules