2011年6月13日月曜日

AVR32 でROMライター無しの開発環境構築

無関係のAVR32の話題を。

最近LAN対応の小さいシステムとして、AVR32とH8をいじっています。
H8の方はtoppers+tinetであれば公式ドキュメントが完全に説明して
くれているのでなんとでもなりそうですが、
AVR32の方はなかなか大変でしょうね。
開発環境をインストールしたあと結構途方にくれるきがします。

TCP/IPをやりたい場合はlwipを使うのが良さそうですね。
ここではlwipの導入方法は説明せず(というか昔のことなのでやり方忘れた)、
ROM Writer無しで開発できる環境を作る方法について書き残しておこうかと思います。

本来こういったリソースの少ない開発ではボードとICEとセットで使い、
ICE経由でファームウェアを書き込むのが普通なのでしょうが、
このボードの場合はUSBをもち、PCと接続すると本体自身が
デバッガになるという機能があります。
デバッガになるためにはその機能を持つブートローダーを入れる必要があります。
Flashの先頭にはそのブートローダを書きこんでおきます。
後半はあけておき、PCから自由にファームウェアを入れることができます。
ファームウェア側にも変更が必要で、ブートローダーの分ずれたアドレスに
コードが 配置されるようにしなければなりません。

・環境

EVK1100。
どうやら最初からブートローダーが書きこまれているという話。
もし書きこまれていなければ、初回はやはりWriterが必要で、一度bootloaderを
書きこむ必要がある。
ブートローダーはDFUブートローダーと呼ばれています。

開発環境はAVR32 studioとそれに対応したコンパイラ。
DFUブートローダーを利用してファーム書き込みを行う場合は、
PC側にDFUのドライバが必要。
それはFLIP3というソフトウェアが必要となります。

ドキュメントは
「AVR UC3 USB DFU Bootloader」という名前のPDFがあります。
これを読めばすべて書かれているはずです。

・ビルド

trampolineという仕組みを含めてビルドします。
ドキュメントの「Adding or Removing the Trampoline」に書かれているとおりです。
たぶん。

・DFUブートローダーで起動

DFUブートローダーモードで起動するには、
スティックを押しながら電源を投入します。
電源はPCからのUSB給電がよいでしょう。
PCではEVK1100はDFUとして見えます。
Windowsであればデバイスマネージャーで見えるはずです。

初回はドライバのインストールが促されます。
予めFlip3をインストールしてあれば、Flip3のインストールディレクトリのUSBディレクトリ以下にドライバがあるはずです。

・AVR32 studioからDFUを使うように登録

AVR32のtargetというペインで、DFUを登録します。
これもドキュメントのとおりです。

・fusesの保存

targetを右クリックして、read fusesでファイルにfusesの内容を
保存しておきます。
そのファイルを開くとGUIでfusesをいじれますが、GPの値に注目してください。
0x7になっているかもしれません(ビット0x4が立っている。立っていないケースも有るかも。このビットはユーザーの書き込んだファームを実行するかどうかのフラグ)。
ファームを書きこむ際には、このビットを落とす必要があるので、
もし0x7とかになっていたら、0x3に直して保存しておいてください。

fusesはファームを書き込むときに使います。

・ファームウェアの書き込み

以降の手順はファームウェアを変更するたびに行います。

targetで右クリックし、programを選びます。
(runとかdebugからは実行できないのが残念)
ファームは、debug/〇〇.elfとかrelease/〇〇.elfとか
elfファイルです。

注意点としては、書きこむ前にflashの消去を行う必要があることです。
書きこむ画面で、unlock and erase のチェックボックスをチェックして下さい。

書き込みが終わったら、次にfusesの書き込みが要ります。
どうやらファームを書き込んだりfusesを読み込むと勝手にfusesが書き換わるようで、
ユーザーが書き込んだファームを実行するためには書き換えが必須です。

targetを右クリックしてprogram fusesを実行します。
保存しておいたfusesを選んで書きこんでください。

以上で、ファームウェアの書き込みが完了です。
ROMに書きこまれたので、電源を切ってもファームは残ります。

・実行

再起動するとユーザーフォームが立ち上がります。

以降は、

ビルド→DFUモードで再起動→ファームの書き込み→fusesの書き込み→再起動

という流れで作業を行います。
面倒ですね。

・まとめ

ほとんど公式のドキュメントに書かれているとおりですが、
Flashの消去を忘れない、ファーム書き込みの時にfusesも書きこむのを忘れない、
という注意点があります。

0 件のコメント:

コメントを投稿