atmega の dfuについて

 atmega の dfu (device firmware upgrade)については資料が散逸している感があります。そこで今後の参照に備えて、少しまとめてみます。ここでは秋月電子で容易に入手が可能な以下のデバイスについて述べていきます。

  • dfuとは?
    • 特徴
       これらのデバイスにはUSB経由でファームウェアをチップにダウンロード出来るブートローダが内蔵されています。そのプロトコルに対応したホストソフトウェアがあれば、ライターを使わずにファームウェアを書き込む事が可能になります。

    • 欠点
      ただし、このブートローダ分のプログラムサイズがあるため、ユーザが実際に利用出来るプログラムサイズは容量から4KB差し引いた分になります。

  • dfuの起動方法
    1. HWB端子をアクティブにする
       HWB(HardWareBoot)をアクティブにします。上記のチップであれば、この端子はPD7になります。負論理ですのでGNDに接続しておきます。

    2. ファームウェアの状態
      • ファームウェアが書き込まれている場合
         既にファームウェアが書き込まれていればそのファームウェアが起動します。そのファームウェアの起動後、リセットをかける事によりdfuが起動します。

      • ファームウェアが書き込まれていない場合
         ファームウェアが書き込まれていない場合はそのままdfuモードになります。

  • 書き込み環境(ホストソフトウェア)
     使用する環境に応じて、使い分けます。

    • Windows
      FLIPが使えます。当該サイトの指示に従って動作させれば特に問題なく、利用可能です。

    • Macintosh
    • Linux
      dfu-programmerを利用します。Web-master自身はMacintosh上での動作確認のみであることを予めおことわりしておきます。

      • ダウンロード
        こちらからダウンロードします。

      • ビルド
        • libusb
           libusbが必須となりますので、予めインストールしておきます。

        • path 設定
           各種のライブラリのリンクが必要になりますので、path設定を以下のようにします。

        • make
          1. bootstrap.sh
            ./bootstrap.shを実行します。

          2. configure
            ./configure を実行します。

          3. make
            その後、makeを実行します。

          4. pathの通ったディレクトリにコピー
            出来上がった dfu-programmer をパスの通ったディレクトリにコピーします。(e.g. /usr/local/bin など)

      • 書き込み
         別に作成したファームウェア(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自身はこの問題に遭遇しています。