« 2011年12月11日 - 2011年12月17日 | トップページ | 2012年1月15日 - 2012年1月21日 »

2012年1月1日 - 2012年1月7日の1件の記事

2012年1月 3日 (火)

AVR Dragonのデバッガー機能 debugWIREにはまる

みなさまあけましておめでとうございます。

 がた老AVR研究所は、ブログ公開以来、4回目の新年を迎えました。

 始めは備忘録のつもりで、気ままな電子工作の記録を残そうと始めたのですが、根が凝り性なもので興味に任せて色々手を出すうち、どんどん店が拡がり、昨年はガイガーカウンターを2台も作ってしまうほどのはまりようです。

 いつのまにか電子工作と、このブログが、すっかり生活の一部になり、おかげさまで昨年末には遂にブログの累計アクセスが40万件を越えました。応援していただく人も増えて、いつも沢山コメントを頂戴し、何やら自分勝手なことができない雰囲気です。

 あ、これは困ったと言っているのではありません。昨年は世界中で大きな天災が続いて、人と人の絆がこれほど強く意識された年はありませんでした。その点で、本来、孤独な趣味である電子工作をむしろ、こうしてみなとつながって続けられることは本当に得がたいことだと感謝する気持ちで一杯です。

 そういうことでもありませんが、新年初ブログのお題は辰年にふさわしく、要望のあったAtmelの純正プログラマーAVR Dragon(龍、辰)のデバッガー使用報告です(2012年1月3日記)。

P1034563今年(2011年)の暮は猛烈に忙しかった(12/25/2011)  それにしても、今年は11月末あたりから行事の連続でめちゃめちゃ忙しかった。50年ぶりの小学校の同窓会から始まり、年末の法事まで1ヶ月の間に2回も関西を往復した。忘年会は全部で6回。これに恒例のフルートの発表会や、テニスの納会、属している団体の研究会の幹事、さらに人間ドック、よせば良いのに、パソコン用の地デジのチューナーを買ったりしてそのセットアップ。ジャンクのHDDを買ってPCの環境整備(160GBが¥400という安さで思わず購入。Cディスクを取り替えた)などなど。のんびり半田付けをやっている時間がほとんどなかった。

 それでも、暇を見つけては、このあいだ完成した熱電対で温度制御するアクリル曲げ器を実際に使ってみたり、細かい電子工作はやっていた。アクリル曲げ器は少し厚いアクリルの小片などを使って、テストしている。230℃くらいで表面が150℃になる(放射温度計で測定)。温度が安定しているので工作しやすい。

 このあたりの温度で、アクリルを曲げる線に合わせてパイプに当てていると、うまい具合に焦げずにパイプにあてた直線部が柔らかくなってくる。適当なところでパイプから離し、手で曲げると実に簡単に曲がる。

S_p1034551 練習用のアクリル端片をコの字型に曲げただけだがけっこう綺麗に曲がった。ただ、正確に曲げるには何か治具に当てて曲げる必要があるかもしれない。暫く練習を続けて、ゆくゆくはケースを自作しようと思う。

Dragonのデバッガーに手軽に手を出してはねつけられる(12/28/2011)
 そうこうするうち、前から欲しかったAtmel純正パラレルプログラマーDragonがDigiKeyから届き、その使用記をブログに載せたら、思わぬ反響があった。Dragonを買った目的は、フューズビットを書き損なったチップをパラレルプログラミングで救済するのが主で、デバッガーについては正直なところ殆ど考えていなかったのだが、複数の方からDragonのもうひとつの機能、デバッガー(debugWIRE)のテストをお願いされてしまったのである。

 所長は、前から記事やコメントに書いている通り、デバッガーは余り使ったことがない。大型汎用機の出身なので、そもそもデバッガーに縁が薄かったということもある。ICEや、デバッガーは本来、UNIXやPC、組み込み系コンピューターなど、比較的規模の小さいCPUを対象とするツールで、汎用機ではCPUを止めてデバッグすることなど思いもよらず、オンラインシステムのデバッグの武器はコア(メモリー)ダンプリストとトレースが主であった。

 何度も言うように、ペリフェラル(周辺機器)を含めた実機のデバッグ(オンチップデバッグ)は、タイムアウトでペリフェラルが止まってしまわないような周到な準備が必要だ。しかしバグは大抵こうしたペリフェラルとのやりとりのタイミングにひそんでいることが多く、ここを別の仕掛けで補っても、実際の実機での不具合をつきとめることは難しい。

 単にロジックの部分でCPUを止めてみても、あまり意味がない。変数を見たければprintfをはさむだけで十分用は足りる。当研究所のシステムには本番でUARTを使わないものでも必ずUARTを内蔵しているのは、いつでも内部の変数や、動きが外に見えるようにするためである。UARTが遅くて系に影響を与えるなら、空いているポートを叩いて、そのピンをロジアナで見ればよい。

 そんなわけで、オンチップデバッガーの機能を動かすことには余り気が進まなかった。しかし、ウェブを見ていると、このDragonは、極めて廉価で実機によるソースデバッグができる優れものなのだそうだ。ウェブサイトには、このデバッグの様子を動画で公開しているところもある。一度は経験しておかないとやはりまずい気がしてきた。

S_pc284516 で、パラレルモードでなく、ISPモード(debugWIREモードを兼ねる)のジャンパーを作り始めた。パラレルの20本近くのジャンパーではなく、こんどはたかだか6本の配線である。あっというまに出来あがった。起動も簡単である。AVRStudioを立ち上げて、DEBUGメニューからstart debuggingを選ぶだけである。

 途中、debugWIREモードにISPを通して入るかというダイアログが出て、そのラジオボタンを押すと、プログラムがロードされデバッガーが簡単に動き始めた。ちゃんとCのソースコード画面にブレークポイントの矢印が出て、プログラムの最初のところで止まる。ステップ動作を指定すると、ひとつづつ実行し、サブルーチンに行けば、そのソースリストの画面に替って矢印が移動する。おお、中々やるじゃないか。

Dragon1

 しかし、動かないシステムのステップ動作は、わくわくするが、動いているシステムの動きを見ていても正直あまり感動はない。それに案の定、ピン割り込みのループで待つところで延々とループを始め、先に進まなくなった。CPUはDragonのプロトタイプ基板で動かしているので、ピンは裸だ。先に進みようがない。

 まあこんなものかと思ってとりあえずstop debuggingを選んでデバッガーを止める。ところが、次からガンとして言うことを聞かなくなった。CPUを認めないのである。編集/プログラム画面は出るが、start debuggingを選んでも、デバッガーモードにも戻らない。

 ええー、どうしてだ。メッセージは「ISPモードでない」と言っている。なにー、デバッガーモードから戻る時に、フューズビットをリセットしないのか。パラレルモードでないと変更できないと言っている。これは不便だ。パラレルモードと、ISPモードでは配線が違う。デバッグに入るたびに、ジャンパーの配線換えをしなければならないのではたまらない。

Dragon2

 何か手順があるはずだ。こういうことになると、すぐに意地になるというのがいつものパターンである。自慢にもならないが「へそ曲がり」の性格なら誰にも負けない。こいつをちゃんと動かせるようになるまで、他の事にかかわれなくなってしまった。

やっとdebugWIREを動かせるようになった(12/31/2011)
 Dragonは当初考えていた以上に、多彩な機能をそなえている。まず、ファームの書き込みやフューズビットの書き換えなど、プログラマーの機能としては、ISP、パラレル、HVSP、JTAGとなんと4種類ものインターフェースで動く(ジャンパーの接続と、IDE(AVRStudio)で選択)。

 さらに、オンチップデバッガーは、JTAGとAtmel独自のプロトコル、debugWIREでソースコードレベルのデバッグが出来る(デバッガーソフトはAVRStudioで、チップによりJTAGが使える)。

 ところが、前にも書いたように、このあたりの実際の操作法は、マニュアルに余り詳しく出ていない。日本語のマニュアルはあるが、この翻訳がデータシートに較べると、あまり上手でなく意味がとりにくい(PDI物性などと書かれると意味不明。PDI physicalなのだが、これはPDIハードとでも訳すべき)。原文にもあたるがJTAG周辺の専門用語に馴染みが薄いので、どうもよく理解できない。

 現在のトラブルを整理してみる。要するに、デバッガーモード(1wireデバッグ、debugWIREモード)から、単に、stop debuggingで抜けると、フューズビットのDWENが元へ戻らず、そのチップはISPモードでなくなり、しかもstart debuggingでデバッガーモードにも戻れない。

 こうなると、ファームの書き込みまでできなくなってしまい、パラレルプログラミングでフューズビットを換えないと元に戻れない。これでは連続したデバッグに大きな支障がでてしまう。

 いくつかのウェブサイトの実行報告も、このあたりは、いまひとつはっきりしない。みんなどうしているのだろう。あれこれ、AVRStudioの中を探し回る。その結果、やっとマニュアルの中で手順を発見した。「デバッグWIREインターフェースを通した目的対象への接続」の一番下の記事に、「ISPインターフェースの再許可」というところである。DEBUGメニューの中の「AVR Dragon Options」を開き、そのなかの、disable DebugWIREボタンをクリックしろとある。

 やってみた。ちゃんと出来た。ダイアログに答えていくとISPモードに戻った。マニュアルを読まないのが悪いと言われればそれまでだが、タイトルが「ISPインターフェースの再許可」では初めての人にはわからない。それにソフトの設計としてはこれはまずいだろう。stop debuggingのときに、ダイアログを出して聞けばすむ話だ。不親切なことおびただしいと八つ当たりする。

 そのうえ、このオプションを操作せずにうっかりstop debuggingしてしまったチップは、この方法をとれない。デバッガーモードに戻れず、このメニューが有効にならないからだ。パラレルプログラムで、DWENフューズビットをいじらないと元へ戻らない。

 なおも、しつこく探し回る。そして遂にISPモードの結線のまま、DWENフューズをリセットする手順を見つけた。その方法とは、コンパイルのとき、BUILDではなく、BUILD&RUNを選ぶのだ(ボタンはBUILDの右どなり)。こうすると、コンパイルをしたあと自動的にデバッガーモードになるので、DEBUGメニューの「AVR Dragon Options」が有効になる。ここでdebugWIREモードをキャンセルしてISPモードに戻れば良い。

 いやあ、気分が良い。これで面倒な配線換えをしないでも気楽にデバッグと編集/プログラムの画面を行き来できる。このあたりをわかりやすくするため、図を用意した。青い矢印で書いたところが、所長が発見した手順、赤がマニュアルに出ている復帰手順である。本来は3段目のステートに行かないようにしておくべきだろう。

Dragon_statemap

 気難しいDragonを飼いならして、ようやくデバッガーが快適に操作できるようになった。手が空いたのでTiny2313とTiny861専用のパラレルプログラミングのジャンパーをフラットケーブルから作る。これで、少々フューズを書き損なっても安心だ。これまでメモで書き散らしていたブログの原稿を整理し、新年のために工作室を片付ける。そうこうするあいだに、2011年はとうとう大晦日を迎えてしまった。

| | コメント (7) | トラックバック (0)

« 2011年12月11日 - 2011年12月17日 | トップページ | 2012年1月15日 - 2012年1月21日 »