外付けAVRライタ無しでBootloaderを書き込む

Kimio Kosaka


このページは2011年8月より更新しておりません。
このページでレポートした方法はAVRDUDEに取り込まれ標準搭載機能として提供されています。"AVRDUDE FT232 bitbang" で検索すると最新の情報が得られます。

Arduino Diecimilaにブートローダを書き込むとき,DiecimilaのICSPにAVRライタを接続して書き込みますが,今回,外部にAVRライタを接続しないでDiecimila自身でブートローダを書き込む方法を見つけました。(Arduino NG,Arduino Duemilanove でも実行可能です)

Arduino Uno はこの方法でブートローダを書くことはできません。


Japanese    English


2008年7月に外付けAVRライタを用いずにArduino Diecimila自身でブートローダを書込む方法を発表しました。 これはWindowsの「コマンドプロンプト」からのCUI操作でしたが,今回ここに紹介する方法でGUI操作によりブートローダを書けるようになりました。

旧版 外付けAVRライタ無しでBootloaderを書き込む(CUI操作)

ATmega168P,ATmega328Pにブートローダを書く情報へジャンプ


  1. BitBang Mode AVR-Writer

    Arduino Dicimila/NG/DuemilanoveにはUSB-SerialブリッジとしてFT232RLが搭載されています。このFT232RLには BitBang Mode という各信号線を個別に制御する機能があります。

    すz氏が「すzのAVR研究」で BitBang Modeを使うavrライタソフト"avrdude-serjtag"を公開されています。 このavrduse-serjtagを用いればFT232RLがAVRライタとして働くので,FT232RLとICSPを接続すれば Diecimila自身でブートローダを書き込むことができます。

    また,Yuki氏がライタソフトavrdudeのGUIラッパー"avrdude-GUI (yuki -lab.jp Version)"を制作・公開されています。 "avrdude-serjtag"と"avrdude-GUI"を組み合わせると簡単なGUI操作でブートローダを書込むことができます。

    • 【注意】

      avrdude-serjtag を Linux や Mac OS で動かすには,パッチを当てたり使用する環境に適合させて再コンパイルする必要があるようです。下のプロジェクトにその手順が書かれています。

      Linux や MacでVMwear上にWindowsをインストールしてDiecimilaの動作環境を構築すればWindows版avrdude-serjtagがそのまま稼動します。



  2. Diecimila / Duemilanoveの加工

    Diecimilaの基板上FT232RLの近くにX3と書かれた空きパッドがあります。(この空きパッドはFT232RLの制御ピンに接続されています)
    この空きパッドのハンダを吸い取り,ピンヘッダーを挿入してハンダ付けします。

    diecimila_befor    diecimila_after_1

  3. ソフトウエアのダウンロード
    1. FTDI Bitbang Driver
      D2XX Direct DriverのWindows行Comments欄の「setup executable」をクリックしてダウンロードします。
    2. FTDI BitBang AVR-Writer "avrdude-serjtag"
      serjtag-0.3.zip mirror site
      serjtag-0.3.tar.gz mirror site
      serjtag-0.3.zip original site (http://suz-avr.sblo.jp/archives/20070621-1.html)
      serjtag-0.3.tar.gz original site (http://suz-avr.sblo.jp/archives/20070621-1.html)
    3. avrdude-serjtag用設定ファイル"avrdude.conf"
      avrdude.conf(ATmega328P,168P,88P対応)
    4. avrdudeのGUIラッパー"avrdude-GUI (yuki-lab.jp Version)"
      avrdude-GUI-1.0.5.zip mirror site
      avrdude-GUI-1.0.5.zip original site (http://yuki-lab.jp/hw/avrdude-GUI/index.html)
    5. avrdude-GUI (yuki-lab.jp Version)はMicrosoft .NET Framework 2.0以上を必要とします。
      .NET Framework 2.0以上がインストールされていないときは。 Microsoft .NET Framework Version 3.5からダウンロードしてインストールします。
      (.NET Framework 3.5が動かない古いパソコンは Microsoft .NET Framework Version 2.0を使います)

  4. インストール
    1. FTDI Bitbang Driver
      • ArduinoをUSBに接続しない状態でCDM20xxx_Setup.exeを実行します。
      • ArduinoをUSBに接続するとドライバが自動で組み込まれます。
    2. FTDI BitBang AVR-Writer "avrdude-serjtag"
      • serjtag-03.zipを展開します。
      • 生成されたserjtag-03フォルダの中のavrdude-serjtagフォルダをC:\Program Filesフォルダの中にコピーします。


      • コピーしたavrdude-serjtagフォルダの中のsrcフォルダを削除します。

    3. avrdude-serjtag用設定ファイル"avrdude.conf"
      • avrdude.confをC:\Program Files\avrdude-serjtag\binaryフォルダの中に上書きコピーします。
      • avrdude.confには次のDiecimila用のAVRライタの記述が追加してあります。
        #arduino diecimila
        programmer
          id="diecimila";
          desc = "FT232R Synchronous BitBang";
          type = ft245r;
          miso = 3;  # CTS X3(1)
          sck = 5;  # DSR X3(2)
          mosi = 6;  # DCD X3(3)
          reset = 7;  # RI X3(4)
        ;

    4. avrdudeのGUIラッパー"avrdude-GUI (yuki -lab.jp Version)"
      • avrdude-GUI-1.0.5.zipを展開します。
      • 生成されたavrdude-GUI-1.0.5フォルダをC:\Program Filesフォルダの中にコピーします。
      • avrdude-GUI (yuki-lab.jp Version)はMicrosoft .NET Framework 2.0を必要とします。
        .NET Framework 2.0がインストールされていないときは。
        Microsoft .NET Framework Version 2.0からダウンロードしてインストールします。

  5. 設定

    C:\Program Filesにコピーしたavrdude-GUI-1.0.5フォルダを開き, avrdude-GUI.exeをダブルクリックしてavrdude-GUI(yuki-lab.jp Version)を起動します。


    次のi〜ivによりavrdude-GUIの動作設定をします。

    1. avrdude.exeの指定
      • avrdude.exe File欄の をクリックします。
      • C:\Program Files\avrdude-serjtag\binaryを開きます。
      • avrdude.exeを選択して[開く(O)]をクリックします。
    2. Programmer(ライター)の選択
      • Programmer欄の をクリックします。
      • FT232R Synchronous BitBang (diecimila) を選択します。
    3. Deviceの選択
      • Device欄の をクリックします。
      • ATmega168 (m168) を選択します。
        ATmega168Pを用いる場合は ATmega168P (m168p),ATmega328PのときはATmega238P(m238p) を選択
    4. BitBangポートと速度の設定
      • Command Line Option 欄の入力ボックスをクリックし
        -P ft0 -B 4800
        とキーボード入力します。-P ft0 はポートの設定,-B 4800 は低速クロックの設定です。

    【注意】 Port欄は空欄にしておきます。

  6. 動作のテスト
    1. 配線

      写真のようにX3のピンとICSPのピンを配線します。(写真をクリックすると大きく表示されます)

    2. DiecimilaとPCをUSBケーブルで接続します。
    3. avrdude-GUIを起動します。
    4. ヒューズビットを読んでみます。
      • Fuse欄のReadボタンをクリックします。
      • ヒューズビットが読み出されれば動作OKです。
        エラーが表示される場合は,X3のピンとICSPのピンの配線をやavrdude-GUIの設定を確認してください。
        ATmega328Pの場合は,hfuse = DA,lfuse = FF,efuse = 05 と表示されます。
    5. 高速クロックで動かしてみます。
      • Command line Option 欄の記述 -B 4800 を削除します。
      • 再度,ヒューズビットを読んでみます。
        ヒューズビットが読み出されれば高速クロック動作OKです。

  7. ブートローダ書込み
    1. 新しいチップの装着
      • USBケーブルをDiecimilaから外します。
      • チップを外します。
      • 新しいチップを装着します。
      • USBケーブルをDiecimilaに接続します。
    2. ヒューズビットの書込み
      • 低速クロック動作にします。
        Command line Option 欄に -B 4800 を記述します。
        【注意】工場出荷状態のデバイスは高速クロックでは動作しません。
      • 念のため消去します。
        (1) Chip Erase ボタンをクリックします。 確認ダイアログが開くので [はい(Y)] をクリックします。
        (2) Lock Bit 欄の Readボタンをクリックします。Lock Bit の値 3F が表示されるはずです。
      • ヒューズビット書込み
        (1) 各ヒューズビットの値を次のようにセットします。
            hfuse = DD
            lfuse = FF
            efuse = 00

        ATmega328Pの場合は,hfuse = DA,lfuse = FF,efuse = 05 とします,168PはそのままでOKです。

      • (2) Fuse 欄の Write ボタンをクリックします。
             確認ダイアログが開くので,各ヒューズの値を確認して誤りがなければ [はい(Y)] をクリックします。

      • 高速クロック動作にします。

        Command line Option の -B 4800 を削除し高速クロックモードにして ヒューズビットを読んでみます。
        ヒューズビットを読めないときは,たぶん,ヒューズビットの書込みを誤っています。 低速クロック動作にもどしてヒューズビットを正しく書込みます。

    3. ブートローダのhexファイルを設定する。
      • Flash 欄の をクリックします。
      • C:\Program Files\arduino-00xx\hardware\arduino\bootloaders\atmega フォルダを開きます。
      • ATmegaBOOT_168_diecimila.hexを選択して [開く(O)] をクリックします。(168Pの場合も同じ)
        ATmega328Pの場合はATmegaBOOT_168_atmega328.hexを選択
    4. ブートローダを書込む
      • Erase Write Verify ボタンをクリックします。
      • 確認ダイアログが表示されたら [はい(Y)] をクリックします。
      • 書込み終了まで待ちます。
    5. ロックビットの書込み
      • (1) ロックビットの値をセットします。
        Lock = 0F
      • (2) 書込み
        Writeボタンをクリックすると確認ダイアログが表示ます。 ロックビットの値を確認して誤りがなければ [はい(Y)] をクリックします。

    以上でブートローダの書き込みは終了です。


    追記1:ATmega8にブートローダを書くときの情報 … [続きを見る]
    追記2:ATmega328Pにブートローダを書くときの情報 … [続きを見る]
    追記3:ATmega168Pにブートローダを書くときの情報 … [続きを見る]
  8. 動作確認
    • 一旦,DicimilaからUSBケーブルを外します。
    • X3とICSPの配線を外します。
    • 再度,DicimilaにUSBケーブルを接続します。
    • リセット・ボタンを押します。

    Arudino-IDEを起動しサンプル・スケッチのBlinkをDiecimilaにアップロードして見てください。 どうでしょうか?外付けAVRライタ無しでブートローダを書き込むことができました。


  9. DicimilaをAVRライタとして使う

    写真のようなICSPケーブルを作ればDicimilaを汎用のAVRライタとして使えます。 (写真をクリックすると大きく表示されます)

    avr_writer    icsp-cable

  10. 秋月のUSB-Serial変換モジュール(AE-UM232R)でBootloaderを書込む

    AE-UM232R はDicimilaと同じFTDIのチップを使っているので,これを使ってもBootloaderを書き込めます。

    ブレッドボードなどを使って下のように配線しDicimilaを用いる場合と同じように操作します。 詳細はこちら


謝辞

BitBang Mode AVRライタソフト「avrdude-serjtag」を作られた すz氏 に感謝の意を表したいと思います。 世界中のArudino Diecimilaユーザに「avrdude-serjtag」を紹介し すz氏 の研究を讃えたいと思います。

また,avrdudeのGUIラッパー「avrdude-GUI (yuki-lab.jp Version)」を作られたYuki氏に感謝の意を表したいと思います。

Kimio Kosaka

リンク

すzのAVR研究 FT245R/FT232Rでavrdude

すzのAVR研究 FT245R/FT232R で avrdude (Linux)

avrdude-GUI (yuki-lab.jp Version)

BitBang Mode AVR-Writer on Mac

Arduino-IDE から FTDI Bitbang method を実行する


[もどる]


update 2011.08.14 FTDI Bitbang Driverにかんする記述を変更

update 2010.12.24 senshu版avrdudeの追記

update 2009.07.01 ATmega168Pにブートローダを書く情報を追加

update 2009.05.05 Arduino-IDEからブートローダを書く方法へのリンクを追加

update 2009.03.20 avrdude.conf (03.18のupdateが有効になっていなかったので再アップ)

update 2009.03.19 ATmega328Pにブートローダを書く情報を追加

update 2009.03.18 avrdude.conf (ATmega88P,ATmega328Pのデバイスデータを追加)

renew 2009.03.07

update 2008.11.07

upload 2008.07.27 05:48(JST)

Creative Commons License