このページは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にブートローダを書く情報へジャンプ
- 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操作でブートローダを書込むことができます。
- Diecimila / Duemilanoveの加工
Diecimilaの基板上FT232RLの近くにX3と書かれた空きパッドがあります。(この空きパッドはFT232RLの制御ピンに接続されています)
この空きパッドのハンダを吸い取り,ピンヘッダーを挿入してハンダ付けします。
- ソフトウエアのダウンロード
- FTDI Bitbang Driver
D2XX Direct DriverのWindows行Comments欄の「setup executable」をクリックしてダウンロードします。
- 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)
- avrdude-serjtag用設定ファイル"avrdude.conf"
avrdude.conf(ATmega328P,168P,88P対応)
- 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)
- 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を使います)
- インストール
- FTDI Bitbang Driver
- ArduinoをUSBに接続しない状態でCDM20xxx_Setup.exeを実行します。
- ArduinoをUSBに接続するとドライバが自動で組み込まれます。
- FTDI BitBang AVR-Writer "avrdude-serjtag"
- serjtag-03.zipを展開します。
- 生成されたserjtag-03フォルダの中のavrdude-serjtagフォルダをC:\Program Filesフォルダの中にコピーします。
- コピーしたavrdude-serjtagフォルダの中のsrcフォルダを削除します。
- avrdude-serjtag用設定ファイル"avrdude.conf"
- 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からダウンロードしてインストールします。
- 設定
C:\Program Filesにコピーしたavrdude-GUI-1.0.5フォルダを開き,
avrdude-GUI.exeをダブルクリックしてavrdude-GUI(yuki-lab.jp Version)を起動します。
次のi〜ivによりavrdude-GUIの動作設定をします。
- avrdude.exeの指定
- avrdude.exe File欄の をクリックします。
- C:\Program Files\avrdude-serjtag\binaryを開きます。
- avrdude.exeを選択して[開く(O)]をクリックします。
- Programmer(ライター)の選択
- Programmer欄の をクリックします。
- FT232R Synchronous BitBang (diecimila) を選択します。
- Deviceの選択
- Device欄の をクリックします。
- ATmega168 (m168) を選択します。
ATmega168Pを用いる場合は ATmega168P (m168p),ATmega328PのときはATmega238P(m238p) を選択
- BitBangポートと速度の設定
- Command Line Option 欄の入力ボックスをクリックし
-P ft0 -B 4800
とキーボード入力します。-P ft0 はポートの設定,-B 4800 は低速クロックの設定です。
【注意】 Port欄は空欄にしておきます。
- 動作のテスト
- 配線
写真のようにX3のピンとICSPのピンを配線します。(写真をクリックすると大きく表示されます)
- DiecimilaとPCをUSBケーブルで接続します。
- avrdude-GUIを起動します。
- ヒューズビットを読んでみます。
- Fuse欄のReadボタンをクリックします。
- ヒューズビットが読み出されれば動作OKです。
エラーが表示される場合は,X3のピンとICSPのピンの配線をやavrdude-GUIの設定を確認してください。
ATmega328Pの場合は,hfuse = DA,lfuse = FF,efuse = 05 と表示されます。
- 高速クロックで動かしてみます。
- Command line Option 欄の記述 -B 4800 を削除します。
- 再度,ヒューズビットを読んでみます。
ヒューズビットが読み出されれば高速クロック動作OKです。
- ブートローダ書込み
- 新しいチップの装着
- USBケーブルをDiecimilaから外します。
- チップを外します。
- 新しいチップを装着します。
- USBケーブルをDiecimilaに接続します。
- ヒューズビットの書込み
- 低速クロック動作にします。
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 を削除し高速クロックモードにして
ヒューズビットを読んでみます。
ヒューズビットを読めないときは,たぶん,ヒューズビットの書込みを誤っています。
低速クロック動作にもどしてヒューズビットを正しく書込みます。
- ブートローダのhexファイルを設定する。
- Flash 欄の をクリックします。
- C:\Program Files\arduino-00xx\hardware\arduino\bootloaders\atmega フォルダを開きます。
- ATmegaBOOT_168_diecimila.hexを選択して [開く(O)] をクリックします。(168Pの場合も同じ)
ATmega328Pの場合はATmegaBOOT_168_atmega328.hexを選択
- ブートローダを書込む
- Erase Write Verify ボタンをクリックします。
- 確認ダイアログが表示されたら [はい(Y)] をクリックします。
- 書込み終了まで待ちます。
- ロックビットの書込み
- (1) ロックビットの値をセットします。
Lock = 0F
- (2) 書込み
Writeボタンをクリックすると確認ダイアログが表示ます。
ロックビットの値を確認して誤りがなければ [はい(Y)] をクリックします。
以上でブートローダの書き込みは終了です。
追記1:ATmega8にブートローダを書くときの情報 …
[続きを見る]
ATmega8 ではヒューズとロックビットを次の値にします。(board.txtより)
- hfuse = CA
- lfuse = DF
- unlock = 3F
- lock = 0F
ロックビットについて
http://arduino.cc/en/Hacking/Bootloader には unlock = FF, lock = CF. と書かれていますが,この値ではうまく動きません。
これは RV Prakash さんからの情報です。 Thanks.
追記2:ATmega328Pにブートローダを書くときの情報 …
[続きを見る]
以下のヒューズの値,ロックビットの値,ブートローダのhexファイルを使ってください。(board.txtより)
- hfuse = DA
- lfuse = FF
- efuse = 05
- unlock = 3F
- lock = 0F
- bootloader .hex file
ATmegaBOOT_168_atmega328.hex
追記3:ATmega168Pにブートローダを書くときの情報 …
[続きを見る]
DeviceにATmega168P(m168p)を選択し,ATmega168と同じヒューズの値,ロックビットの値,ブートローダのhexファイルを書き込みます。
- hfuse = DD
- lfuse = FF
- efuse = 00
- unlock = 3F
- lock = 0F
- bootloader .hex file
atmega\ATmegaBOOT_168_diecimila.hex
Arduino IDE はATmegaBOOT_168_diecimila.hex を書き込んだ ATmega168Pチップ を ATmega168 として認識しますので,
Board 選択は Arduino Diecimila or Duemilanove w/ ATmega168 のままでかまいません。
- 動作確認
- 一旦,DicimilaからUSBケーブルを外します。
- X3とICSPの配線を外します。
- 再度,DicimilaにUSBケーブルを接続します。
- リセット・ボタンを押します。
Arudino-IDEを起動しサンプル・スケッチのBlinkをDiecimilaにアップロードして見てください。
どうでしょうか?外付けAVRライタ無しでブートローダを書き込むことができました。
- DicimilaをAVRライタとして使う
写真のようなICSPケーブルを作ればDicimilaを汎用のAVRライタとして使えます。
(写真をクリックすると大きく表示されます)
- 秋月の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氏に感謝の意を表したいと思います。
リンク
す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)