#topicpath ** ブートローダを仕込む [#zd5239dd] -- 概要~ ここでは、AVRISP mkII と AVR Studio を用いてブートローダを書き込みます。 *** AVR Studio とドライバの導入[#h66d9ac3] ++ AVR Studio 4 --- AVR Studio 4 を AVRISP mkII に付属のCD から導入。~ --- あるいは、[[Atmel のホームページ>http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725]]で取得して導入。~ 最新バージョンは 4.18 SP2 。 (2010-06-18 (金) 20:30:00 時点) ++ ドライバ~ 上記の AVR Studio を導入するとドライバの準備もできています。~ AVRISP mkIIを接続すると、ドライバの導入画面が出てきますので、次のものを選びます。 +++ Windows Updateについて"いいえ、今回は接続しません" +++ "ソフトウェアを自動的にインストールする" ~ ++ 参考URL --- 導入については http://nano-studio.com/avr/sub2.htm の (1) が参考になりました。 *** 接続準備 [#p428c9a4] ++ 接続用のワイヤーハーネスを作る。~ いちいちジャンパーワイヤーを刺すのは面倒なので、ワイヤーハーネスのようなものを自作します。~ ~ [[武蔵野電波のデジタル式FMラジオ>http://pc.watch.impress.co.jp/docs/column/musashino_proto/20090806_307235.html]]を参照して、AVRISPmkIIと本体とを接続するようにします。~ [[この図>http://pc.watch.impress.co.jp/img/pcw/docs/307/235/html/09_s6.png.html]]を参照してわかるように、リセットピン以外は片側に集められます。~ AVRISP mkII のケーブルのピンは、2番を基準にして調べます。 #style(class=table_left){{ |AVRISPmkII| |Arduino本体|h | | | | |1番(ケーブルからみて2番の向こう側)|MISO|18番 d12| |2番(赤いケーブルに一番近いピン)|Vcc|20番 Vcc| |3番| SCK | 19番 d13| |4番(ケーブルに沿って2番のとなり)|MOSI|17番 d11| |5番|RESET|1番 rst| |6番|GND|22番 gnd | }}~ &ref(sany0150.jpg,,320x240); &ref(sany0147.jpg,,320x240); &ref(sany0149.jpg,,320x240); ~ ~ *** ブートローダの書き込み ++ 接続する。~ AVRISPmkIIとは別に電源を確保する必要があります。上の写真のように電源供給用に USB ケーブルを接続します。 ~ なお、パソコン本体を保護するために、2ポートのUSBハブをかませるといいかもしれません。~ &ref(sany0151.jpg,,320x240); ~ ++ AVR Studio を起動と接続の確認 +++ 起動直後に立ち上がる Window は Cancel で消去する。~ +++ 小さなチップに "Con" と書かれたアイコンをクリック。Platform-> AVRISP mkII と Port-> USB を設定して Connect。~ 初回はいろいろと言われますが、適当に処理します。 +++ 開いた Window の左上のタブの Main をクリック。つづいて、"Read Signature" をクリックします。~ ATmega168P が正しく表示されればうまくつながっています。~ ※ うまくいかないときは、あらかじめ Device 欄に ATmega168P を指定してから "Read Signature" を実行します。メッセージを見て、接続できたかどうかを確かめます。~ マイコン内のプログラムを消去する場合は "Erase" をクリックします。 ~ ~ ++ ブートローダの書き込み +++ 引き続き、左上のタブの Program をクリック。 +++ Flashの欄のファイル選択メニューから、ブートローダを選びます。ブートローダは hex という拡張子がついています。~ ここで説明している [[USB 直結タイプ>../USBTYPE]]なら[[V-USB>http://www.obdev.at/products/vusb/usbasploader.html]]から取得した圧縮ファイル内にある~ USBaspLoader.2009-03-20\firmware\hexfiles\mega168_16mhz.hex です。ここで説明している [[Duemilanoveタイプ>../DuemilanoveTYPE]]なら Arduino IDE配布ファイルの中にある~ arduino-018\hardware\arduino\bootloaders\atmega\ATmegaBOOT_168_diecimila.hex です。[[ミニマルタイプ>../MINIMAL]]ならば、同じく Arduino IDE配布ファイルにある~ aruino-0018\hardware\arduino\bootloaders\atmega\ATmegaBOOT_168_pro_8MHz.hex です。 +++ Program をクリックしてブートローダを書き込みます。 +++ Verify をクリックすれば、マイコン内のブートローダが指定したファイルの中身と一致するか確かめることができます。 ~ ~ ++ ヒューズビットの書き込み +++ 引き続き、左上のタブの Fuses をクリック。 +++ EXTENDED, HIGH, LOW の欄に書かれた 16進数を編集します。 実際どのような設定にするかは、ATmega168P と ATmega328P とでも異なります。それぞれのマイコンのマニュアルを読むことをお勧めします。私がATmega168Pについて簡単にまとめたものは[[こちら>../../]]を参照してください。また、ATmega168P用には以下を参考にしてください。~ ~ &color(red){拡張ヒューズ};について変更する可能性があるのはブートローダのサイズです。これを最大(2Kbyte, 1024ワード)にするならば &color(red){0xF8}; です。(Arduino の資料の記述を読む場合や、avrdudeを用いる場合は違います。詳しくは[[こちら>#unusedbits]]を参照のこと。)~ ~ &color(red){上位ヒューズ};について変更する可能性があるのは、BOD(電圧が低下したときに何Vで停止するか)の設定です。設定しないなら &color(red){0xDF}; 2.7Vで停止するなら &color(red){0xDD}; 4.3V で停止するなら &color(red){0xDC}; です。~ ~ &color(red){下位ヒューズ};について変更する可能性があるのは、クロックの設定です。水晶発振器を使って 8-16MHz に設定するならば、&color(red){0xFF}; マイコン内臓の発振回路を使うなら &color(red){0xE2}; です。(他のサイトを見ると、なぜか皆さん0xE2です。&color(red){0xF2}; でもいいようも思います。が、試していません。きっと 0xE2 の方がいいのでしょう。)~ ~ +++ 編集を終えたら Program をクリックして書き込みます。 +++ Verify をクリックすれば、マイコンに記録されたフューズビットが、画面に表示されているものと一致するか確かめることができます。 ~ ~ ++ ロックビットの書き込み +++ 引き続き、左上のタブの Lock bits をクリック。 +++ 16進数を編集して Program をクリック。具体的にどのような Lock Bits にするかは、私が簡単に[[まとめたもの>../../]]を参照してください。プログラムのバクや秘密を守る必要を考えなければ、&color(red){0xFF};でよさそうです。(Arduino の資料の記述を読む場合や、avrdudeを用いる場合は違います。詳しくは[[こちら>#unusedbits]]を参照のこと。) +++ Verify をクリックして確かめることができます。 ~ ~ ++ 作業の様子~ 以上の作業の様子を([[ビデオ(YouTube)>http://www.youtube.com/watch?v=wH61pA0ZQIs]])にしてみました。~ #u2b(id=wH61pA0ZQIs) *** AVR Studio 4 と avrdude の違いについて&aname(unusedbits); -- avrdude について~ avrdude は ATmel のマイコンにパソコンから情報を送り込むために使うオープンソースプログラムの代表格です。Arduino IDE も裏側ではこれを用いています。~ ところが、困ったことに、AVRISP mkII の AVR Studio4 と avrdude で流儀が異なることがあります。それは未使用のビットをどう表すかです。詳しくは[[こちら>http://roshiago.blog.so-net.ne.jp/2009-08-23]]を見てください。AVR Studio 4 は、未使用ビットを 1 で、avrdude は未使用ビットを 0 で表します。Arduino の文献の多くは avrdude にそった記述をしているので気をつけます。~ ATmega168P の場合、関係があるのは未使用ビットのある拡張ヒューズ( Extended Fuse )と ロックビット( Lock bits) です。拡張ヒューズ は、上位5ビットが未使用です。また、ロックビット の場合は、上位2ビットが未使用です。そのため、次のようになるので注意が必要です。~ ~ --- 拡張ヒューズ(Extended Fuse)~ #style(class=table_left){{ | AVR Studio 4 | avrdude |h | | | | 0xF8 | 0x00 | }} ~ ~ --- ロックビット(Lock Bits)~ #style(class=table_left){{ | AVR Studio 4 | avrdude | |h | | | | | 0xFF | 0x3F | すべてロックしない | | 0xEF | 0x2F | SPM命令によるブートローダ領域への書き込みを禁止する | | 0xCF | 0x0F | SPM命令, LPMによるブートローダ領域への読み書きを禁止する | }} ~ ~ ※ このページでは、AVR Studio 4 に沿った記述をしています。~ ~ *** 参考 [#g23928ee] --- [[武蔵野電波のデジタル式FMラジオ>http://pc.watch.impress.co.jp/docs/column/musashino_proto/20090806_307235.html]] --- [[未使用ビットについて>http://roshiago.blog.so-net.ne.jp/2009-08-23]]