Arduinoで遊ぼう - AVRライタを使わないBootloaderの書き込み(2)
Posted by arms22 on 2009年12月28日

以前、AVRライタを使わないBootloaderの書き込み方法としてArduinoそのものをAVRライタに変えてしまうBoot-Clonerというスケッチを紹介した。
Boot-Clonerはあれから一度も更新されていない。ATmega168以外のAVRマイコンにもBootloaderを書き込む必要が出てきたので、他の方法を試すことにした。
今回、Arduino Duemilanoveに搭載されているUSB-SerialブリッジICであるFT232RLを使ってBootloaderを書き込む方法を紹介する。
接続

Arduino X3ピンとICSPピン

秋月FT232RモジュールとATmega168の接続(via 外付けAVRライタ無しでBootloaderを書き込む)
D2XX Direct Driversのインストール
http://www.ftdichip.com/Drivers/D2XX/MacOSX/UniBin/Universal%20D2XX0.1.6.dmg
sudo mkdir /usr/local/lib
sudo mkdir /usr/local/include
sudo cp D2XX/bin/libftd2xx.0.1.6.dylib /usr/local/lib/libftd2xx.0.1.6.dylib
sudo ln -sf /usr/local/lib/libftd2xx.0.1.6.dylib /usr/local/lib/libftd2xx.dylib
sudo cp D2XX/Samples/ftd2xx.h /usr/local/include/ftd2xx.h
sudo cp D2XX/Samples/WinTypes.h /usr/local/include/WinTypes.h
※OSX用のD2XXの最新版は 0.1.7 だが、OSX10.6ではセグメントフォルトでavrdudeが強制終了してしまう。またOSX10.4.11ではavrdudeのconfigureに失敗する。その為、OSX10.4.11+D2XX 0.1.6で動作を確認した。
avrdudeとserjtag04eのインストール
avrdude5.8に対応したserjtagの最新版がリリースされていたので、最新版を利用。
mkdir avrdude-serjtag04e
cd avrdude-serjtag04e
curl -O http://nmj.sumomo.ne.jp/suz-avr/serjtag/avrdude-serjtag04e.zip
curl -O http://ftp.twaren.net/Unix/NonGNU/avrdude/avrdude-5.8.tar.gz
tar xvzf avrdude-5.8.tar.gz
unzip avrdude-serjtag04e.zip
cd avrdude-5.8
patch -p1 < ../avrdude-serjtag04e/src/avrdude-5.8-serjtag.patch
patch -p1 < ../avrdude-serjtag04e/src/avrdude-5.8-ft245r.patch
patch -p1 < ../avrdude-serjtag04e/src/avrdude-5.8-conf.patch
./configure CFLAGS="-g -O2 -DSUPPORT_FT245R" LIBS="-lftd2xx"
make
sudo make install
FTDIシリアルドライバのアンロード
sudo kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext
ブートローダの書き込み
avrdude -c diecimila -P ft0 -p m168 -B 4800 -U efuse:w:0×00:m -U hfuse:w:0xdd:m -U lfuse:w:0xff:m
avrdude -c diecimila -P ft0 -p m168 -U flash:w:"ATmegaBOOT_168_diecimila.hex":i
avrdude -c diecimila -P ft0 -p m168 -U lock:w:0x0f:m
FTDIシリアルドライバのロード
sudo kextload /System/Library/Extensions/FTDIUSBSerialDriver.kext
BitBang Mode AVR-Writer on Mac
http://www15.atwiki.jp/arduino/pages/23.html
外付けAVRライタ無しでBootloaderを書き込む
http://www.geocities.jp/arduino_diecimila/bootloader/index.html#top
FTDI BitBang AVR-Writer
http://www.geocities.jp/arduino_diecimila/avr-writer/index.html
FT245R/FT232R で avrdude (2)
http://suz-avr.sblo.jp/category/780472-1.html
FT245R/FT232R で avrdude
http://suz-avr.sblo.jp/article/30760403.html
Arduinoで遊ぼう - AVRライタを使わないBootloaderの書き込み
http://arms22.blog91.fc2.com/blog-entry-219.html
Arduinoで遊ぼう-AVRライタを使わないBootloaderの書き込み
Posted by arms22 on 2009年02月15日

今日はAVRライタを使わずにATmega168にBootloaderを書込む方法を教えるよ!
方法は2つ。
- BitBang Mode AVR-Writer
1つ目はArduino Dicimila/NG/DuemilanoveのUSB-SerialブリッジICであるFT232RLをAVRライタに変えてしまう方法だ。次の記事が参考になるよ。
外付けAVRライタ無しでBootloaderを書き込む
http://www.geocities.jp/arduino_diecimila/bootloader/index.html - Arduino Boot-Cloner
2つ目はArduinoそのものをAVRライタに変えてしまう方法だ。
Arduino: Playground - Programmer2
http://www.arduino.cc/playground/Code/Programmer2
今日おすすめするのは2つ目のArduinoそのものをAVRライタに変えてしまう方法だ。
1.スケッチ
まずは次のURLからスケッチをダウンロードしてこよう。
http://www.arduino.cc/playground/uploads/Code/programmer2.txt
このスケッチはArduinoをAVR ISP programmerに変えるのと同時にBootloaderコピー機としても働く。スケッチにはATmega8、ATmega168用のBootloaderが組み込まれていて、Arduino IDEのSerial Monitorから、またArduino単体でもBootloaderのコピーを作ることができるんだ。
早速、スケッチをアップロードしてBootloaderを書込んでみよう!でもその前に1カ所だけスケッチを修正しておこう。
次のコードはSCKクロックパルスを生成するコードだ。クロックパルスの幅は1usに設定されている。けど実験した結果、1usの設定だと通信が安定しなかったので10usの幅に変更した。
#define PULSE_SCK(level) { *sckport |= sckbit; delayMicroseconds(1); *sckport &= ~sckbit; delayMicroseconds(1); }
次のようにdelayMicroseconds関数の引数を10にかえる。
#define PULSE_SCK(level) { *sckport |= sckbit; delayMicroseconds(10); *sckport &= ~sckbit; delayMicroseconds(10); }
スケッチを修正したらVerifyしてUpload to I/O Boardだ。
2.接続
ArduinoとATmega168をこんな感じで接続!

pin10 - pin1 (Reset)
pin11 - pin17 (MOSI)
pin12 - pin18 (MISO)
pin13 - pin19 (SCK)
+5V - pin7 (Vcc)
GND - pin8 (GND)
3.Bootloaderの書き込み
Arduino IDEを立ち上げてSerial Monitorを開く。ボーレートは19200 baudに設定する。まず"*s"と入力して送信。ArduinoとATmega168は正しく接続されていれば次のような表示がでるはずだ。
SIGNATURES1e,94,06,ff,
次に"*A"とコマンドを入力して送信。
Writing mega48/88/168 fuses: extended=11111000high=11011111, low=11101111... (2k bootloader at reset, 1xcrystal clock) done.
これでFuseビットの書き込みが完了する。最後に"*a"とコマンドを入力して送信。
Erase chip... 00... done.
Installing atmega168 serial bootloader at 1C00... ... done.
チップが消去されて、Bootloaderの書き込みが行われる。色々、Bootloaderの書き込み方法があるけど、これが一番簡単だね!
Making Things Talk -Arduinoで作る「会話」するモノたち
posted with amazlet at 09.02.16
Tom Igoe
オライリージャパン
売り上げランキング: 6278
価格: ¥ 3,990
オライリージャパン
売り上げランキング: 6278
価格: ¥ 3,990
該当の記事は見つかりませんでした。