atmega の dfuについて
atmega の dfu (device firmware upgrade)については資料が散逸している感があります。そこで今後の参照に備えて、少しまとめてみます。ここでは秋月電子で容易に入手が可能な以下のデバイスについて述べていきます。
- 対象デバイス
- AT90USB162
- ATMega32u2
その他のデバイスではで販売しているATMega32u4のボードなどもあります。それらも同様に利用可能です。
- dfuとは?
- 特徴
これらのデバイスにはUSB経由でファームウェアをチップにダウンロード出来るブートローダが内蔵されています。そのプロトコルに対応したホストソフトウェアがあれば、ライターを使わずにファームウェアを書き込む事が可能になります。 - 欠点
ただし、このブートローダ分のプログラムサイズがあるため、ユーザが実際に利用出来るプログラムサイズは容量から4KB差し引いた分になります。
- 特徴
- dfuの起動方法
- HWB端子をアクティブにする
HWB(HardWareBoot)をアクティブにします。上記のチップであれば、この端子はPD7になります。負論理ですのでGNDに接続しておきます。
- ファームウェアの状態
- ファームウェアが書き込まれている場合
既にファームウェアが書き込まれていればそのファームウェアが起動します。そのファームウェアの起動後、リセットをかける事によりdfuが起動します。 - ファームウェアが書き込まれていない場合
ファームウェアが書き込まれていない場合はそのままdfuモードになります。
- ファームウェアが書き込まれている場合
- HWB端子をアクティブにする
- 書き込み環境(ホストソフトウェア)
使用する環境に応じて、使い分けます。
- Windows
FLIPが使えます。当該サイトの指示に従って動作させれば特に問題なく、利用可能です。
- Macintosh
- Linux
dfu-programmerを利用します。Web-master自身はMacintosh上での動作確認のみであることを予めおことわりしておきます。- ダウンロード
こちらからダウンロードします。 - ビルド
- libusb
libusbが必須となりますので、予めインストールしておきます。 - path 設定
各種のライブラリのリンクが必要になりますので、path設定を以下のようにします。1234export C_INCLUDE_PATH=/opt/local/include:$C_INCLUDE_PATHexport CPLUS_INCLUDE_PATH=/opt/local/include:$CPLUS_INCLUDE_PATHexport LIBRARY_PATH=/opt/local/lib:$LIBRARY_PATHexport DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib - make
- bootstrap.sh
./bootstrap.shを実行します。 - configure
./configure を実行します。 - make
その後、makeを実行します。 - pathの通ったディレクトリにコピー
出来上がった dfu-programmer をパスの通ったディレクトリにコピーします。(e.g. /usr/local/bin など)
- bootstrap.sh
- libusb
- 書き込み
別に作成したファームウェア(firm-ware.hex)を以下の手順で書き込みます。
sudo dfu-programmer <target device> <command> <firm-ware.hex>
とりあえず、flash コマンドを覚えておけば良いでしょう。
sudo dfu-programmer atmega32u2 flash firm-ware.hex
- Issue ?
dfu-programmerを利用するにあたり遭遇した「?」としては、「買ってきたばかりのチップ(バージン品)は書き込みが出来なかったが、上記のFLIPを使った後ではdfu-programmerを利用可能になった。」
があります。ちょっと不可解ですがWeb-Master自身はこの問題に遭遇しています。
- ダウンロード
- Windows
- 参考URL
以下のサイトを参考にさせていただきました。先達の実験/検証に感謝します。