JTAGICEの使い方

概要

AVRのプログラムのデバッグを従来は,

  • デバッグ用のLEDを接続し,プログラムの現在の状態を表示させる
  • 出力をオシロスコープなどで確認
  • 条件を単純化して実行して挙動の変化を見る

などの方法の組み合わせで行なってきた.
しかし,デバッグ用のLEDに表示可能な情報の量には限界があるし,
条件を単純化する際には,どの辺にバグがあるかという事を推測するために,
ある程度の経験と勘が必要で,非常に効率が悪かった.

そのような状況を打開するため,遂にICEなる道具が導入されることとなった.
そこでここではICEをメンバーに有効活用してもらうためにICEの簡単な使い方を解説することにする.

ICEとは?

ICE(In-Circuit Emulatorの略; 「アイス」と読む)は,対象の回路中のマイコンの代わりにプログラムを実行し,
デバッグのためにプログラムの実行を一時中断する機能やレジスタや変数の内容を読んだり変更したりといったことを可能とする装置のことである.

従来は完全にマイコンをICEで置き換える方法が主流であったが,
現在ではマイコン内部にデバッグをサポートする機能を搭載しておいて,その部分との通信を行うだけといった形式が主流となっている.
前者の方式をfull-ICE,後者の方式をオンチップエミュレータと区別する場合もある.

JTAGICE mkII

ROBO+で主に用いるAVRはtiny2313とmega88/168であるが,
このどちらもdebugWireというオンチップエミュレーション機能を持っている.
そのため,このdebugWireを用いてPCと通信するための機器があればデバッグが可能となる.
そのために用いられるのが「JTAGICE mkII1」(以降単に「JTAGICE」と記述する)である.

右の写真の中央の赤丸で囲まれている装置がJTAGICEである.また,その右側のブレッドボード上にはtiny2313が配置されており,JTAGICEと接続されている.

  1. 実際はAtmel社の純正品ではなく,KEE Electronics社製のクローン品である,「KEE JTAGICE mkII」を使用している.

接続方法

まず,JTAGICEをPCのUSBポートに接続する.
AVR Studioをインストールする際にJTAGICE mkII用のUSBドライバをインストールした場合は,
何もしなくても正しいドライバが組み込まれる.
うまくいかない場合はAVR Studioのマニュアルを参考にドライバを入れなおしてみると良い.

次に,JTAGICEのコネクタをマイコンに接続する.
接続する際,JTAGICEのコネクタのピン配置と,HIDSPI2のピン配置が異なるので,
ピン配置を変換する基板を経由する必要がある.
また,JTAGICEからは電源が供給できないので,別途電源を供給する必要がある.
今回は電源としてHIDSPI2を利用している.
このようにすれば電源の供給/遮断をPC上から切り替えられるため,
後述する電源の入れ直しの際に大変便利である.

デモプログラム

実際にJTAGICEの動作を体験するために,AVR Studioでデモプログラムを作成し,デバッグを行う.

まず,Project typeがAVR GCCの適当な名前のプロジェクトを作成する.今回はプロジェクト名を「ICEDemo」とした.

次に,デバッグプラットフォームを選択する.今回はJTAGICE mkIIを用いるので,
Debug platformはJTAGICE mkIIを選択する.また,対象のデバイスはtiny2313なので,DeviceにはATtiny2313を選択する.


プロジェクトを作成したら,右のコードを入力した後,プロジェクトオプションを正しく設定してビルドを行う.
ビルドの際に何もエラーが無ければ,次のステップへ進む.


その後,ターゲットへ電源を供給し,DebugメニューからStart Debuggingを選択する.
すると,おそらく次のような画面が表示されるはずである.
これはターゲットのdebugWire機能が有効になっていないため接続できなかったということを言っているので,
「Use SPI to enable debugWIRE interface」を選択し,debugWireをSPI経由で有効にすることを指示する.
正常にdebugWireが有効にできたなら,一旦電源を入れなおすよう指示されるので,ターゲットへの電源を入れ直す.


以上の操作によりdebugWireでターゲットに接続が完了すると,main関数の始まりの所に右矢印がついた状態で停止する.
この状態でF10を何度か押すと,「PORTD |= _BV(PD0);」の行の左側に右矢印が表示された状態になる.
この状態ではまだPD0に接続したLEDは点灯しない.しかし,もう一度F10を押して一行プログラムを進めると
「PORTD &= ~_BV(PD0);」の左側に右矢印が表示された状態になり,PD0のLEDが点灯する.
その後,もう一度F10を押すと「PORTD |= _BV(PD0);」の行に左矢印が戻る.
このように,プログラムを一行ごとに実行できていることが確認できる.

Comments