AVRにArduinoブートローダーを焼き込み成功までの過程

秋月電子通商やマルツパーツ館などでATmega168が売ってるので。
それにArduinoのブートローダー(bootloader)を書き込み(焼き込み)するまでの過程と注意点。
ライターには AVR-ISP mkⅡ を使用。
この AVRISPが高性能な割にはとにかくトラブルの原因。
苦行!
成功するまで9時間もかかりました!


結論&重要点

忙しい人は最低限これだけをチェック!!!!
  • Macで書き込むのはあきらめる
  • ArduinoIDEでは書き込めない
  • AVRISP mkIIはAVRstudioインストール後にUSB接続して認識させる
  • AVRISP mkIIで書き込むときはArduinoに外部から電源供給せよ
  • AVRstudio は 4.16 を使用(2009/11/13時点)
  • 必ずAVRstudio 4.16 のSP1 を使用する
  • .hexを書き込み → フューズビット → lockフューズ云々 の順番で書き込む










道具・使用環境

結果的に必要だった物にはを付けてます

ハードウェア

  • boarduino(Arduino Diecimila 互換)
    チップは ATmega168
  • AVR-ISP mkⅡ( 2 / II とも表記)
    秋月電子通商で売っているもの。約4000円
  • Macbook
  • WindowsXP

ソフトウェア

  • ArduinoIDE ver.17(Mac/win 両方)
  • AVRstudio 4.16
  • AVRstudio 4.16 SP1
  • AVRstudio 4.17


●接続方法

boarduino(Arduinoでも同じ)の基板にあるISP端子にAVRISP mkIIを接続する。
それだけ。
AVRISP mkII はUSBでPCと接続する。

注意

  • 書き込むときはArduinoに外部から5V電圧を供給しておかなければいけない!
    面倒だけど仕方ない。
    ISP端子からは電源供給されない。
  • AVRISP mkⅡ は、AVRstudio をインストールする前にUSBと繋いではダメ!
    ドライバはAVRstudioにしか入ってない。




●ArduinoIDEでブートローダーは焼けない!

IDEにはメニューもしっかりあるくせに、ちっとも書き込む事できませんでした。
Macの場合は 「command() がエラー」winの場合は「USBが見つからない」といった感じのエラーが出る。
とにかくなにをやってもダメダメ。
AVRstudioを使いましょう。






●AVRstudioのインストール

AVRstudioを導入する。
この辺を参考に。
純正ツール(AVR Studio 4 + AVRISPmkII)でとりあえず HEXファイルを書き込む方法

AVRISPmk2を接続すると「ファームをアップグレードする?」とか言われるので言われるがままにやっておく。どうやらネットからDLしてるみたい。

注意

  • インストール後にAVRISPmkIIをUSBに接続する。
    ドライバはAVRstudioから自動的に供給される。この順番を間違うとAVRISPmkIIが認識されずソフトウェアからアクセスできない。
  • AVRstudio 4.16 と AVRstudio 4.16 SP1 をインストールする。
  • 必ずSP1を入れる
    入れない場合、ATmega168のチップに0xFFが書き込まれるらしい。
    参考:Arduino FMラジオ、そしてその後 - 電音の工場ブログ - E-Musicグループ
    SP1入れないで書き込むとArduinoにUSB刺したときのLEDが点灯しない。もちろんスケッチのUploadもできない
  • AVRstudio 4.17はうちではエラー発生で起動さえできず。







●書き込み手順の順番注意!

AVRチップに電源供給

AVRISPmkIIとAVRチップ接続

デバイスの指定

書き込み周波数の指定

.hex(ブートローダー本体)の書き込み

ヒューズビットの設定

の順番でやる事。
間違っても致命的エラーにはならない。あと、エラーが出たりするのでわかる。
ただし、ヒューズビットの所ではエラーが出ないからわかりづらい。


以下、実際の書き込み作業の解説。
上から順番に作業するように。

















●ライターの起動

AVRstduioを起動したらウィザードをキャンセル。
ICの形をしたアイコンを押す。
こいつが書き込み。





●書き込み作業

●Mainタブ



今回はATmega168を利用するので Atmega168 を選択。
ATmega328だとまたまた一悶着あるらしい。
参考:ジャンク宿: Atmega328ブートローダ
今の所検討してない。

ISPで書き込むときの設定?とやら。
書き込みクロック周波数らしい。
本家になんだか色々書いてあるのだが
8. Click the "Board" panel, set and write the ISP frequency. If this is a virgin chip you must select 125.0 kHz.
 If you have already flashed this chip you can set it to 2.0 Mhz without issues.
  It will be a long day of programming if you don't take this step, as burning at 1.049 Khz takes forever.

英語苦手なのでよくわからない。
とりあえず
  • Arduinoの動作周波数 1/4 以下にすると良いらしい
    Arduinoは16MHz駆動だから8MHz以下にするってこと
  • 5kHz以上の周波数にする事をやっておくとうまく行く気がする。
買ってきたばかりのAVRチップは内蔵8MHz発振なので周波数は遅い方が良いみたい。
1MHzで書き込み時エラー(ヒューズビット反映されない)が出る場合、6.478kHzで書き込むと比較的うまく行った。

注意

  • 周波数設定したら、最後に Write を押す事。そうしないと反映されない



● .hex(ブートローダー本体)の書き込み

●EraseDeviceする

どのHPを見ても最初に EraseDevice をやってるので念のため中身を消しておく。
この時 EraseOK が出ないようなら、AVRチップと AVR-ISPmkII 間の通信がうまく行ってないので色々検討する事。
大抵消せる。物理的な問題の方が多いと思う。

●.hex の指定

Arduinoのhardwareフォルダに入っている物でも良さそうだけど、今回は本家にある
http://www.arduino.cc/playground/uploads/Learning/bootloader168.zip
を使用した。
本家にも使うように書いてある。
引用:A copy of the the Atmega8 or Atmga168 bootloader hex file. The 168 bootloader is here, and here is the bootloader for the Atmega8.

●書き込む

Program ボタンで書き込む。
一瞬で終わるのでビックリする。
このブートローダーを書き込むとヒューズビットが上書きされる。あとでヒューズビットを書き込む必要がある。
エラーウインドウが出るようならうまく行ってない証拠
  • 書き込み周波数がおかしい
  • AVRチップに電源が入って無い
などのエラーが多い





●ヒューズビットを書き込む

色々カチカチといじれるのだが、本家 ATmega168 Fuse Settings にあるように
  • EXTENDED 0xF8
  • HIGH 0xDF
  • LOW 0xFF
に書き換える。この数値は ATmega168 の場合なので、他チップを使う際は変更が必要かもしれない。

注意

  • この値が違うとダメっぽい
    ダメだとそもそも動かなかったりするらしい。
  • 最後に Program ボタンを押して書き込む
    この時出るエラーは「.hex(ブートローダー本体)の書き込み」と同じ対処する。
  • ブートローダー(.hex)を書き込み直すとヒューズビットは変更されてしまう






●ロックビットを書き込む

これも本家の ATmega8 and ATmega168 LockBit Settings にあるように
  • LOCK BIT 0xCF
に書き換える。この数値は ATmega168 の場合なので、他チップを使う際は変更が必要かもしれない。

注意

  • この値が違うとダメっぽい
    ダメだとそもそも動かなかったりするらしい。
  • 最後に Program ボタンを押して書き込む
    この時出るエラーは「.hex(ブートローダー本体)の書き込み」と同じ対処する。
  • ブートローダー(.hex)を書き込み直すとヒューズビットは変更されてしまう





以上で書き込み作業は全て終了。
Arduinoとして使えるようになる。







●自動焼き込みの設定

この作業は不必要。
本家に書いてあるので一応解説しておく。

11. With the above settings entered, AVR PROG can automatically burn chips. On the Auto panel, select the following: 

(超訳:自動で焼けるようになるからさ。下の項目にチェック入れてみなって)
  • Erase Device
  • Program FLASH
  • Verify FLASH
  • Program Fuses
  • Verify Fuses
  • Program lock bits
  • Verify lock bits

Hit "Start" to program. It should be automatic from there. To program another, just connect it to the programmer, and hit 'Auto.'

(超訳:スタートボタンで書き込めるよ。自動なんだぜ。)



●参考になるHP

書き込む上で参考にしたページ達。先駆者の方ありがとうございます!



●ATmega328ブートローダー書き込みへ向けての情報

ATmega328Pのfuse - AVR etc
ATmega328Pのfuseに関する驚愕の事実!
ATmega328PのfuseビットはATmega88P/168Pと異なっています。
拡張fuseのbit2:0と、High fuseのbit2:0が、(mega168Pと比べると)入れ替わっています。

コチラでは何も無かったらしい
ジャンク宿: Atmega328ブートローダ



●感想

苦行。
9時間もかかりました。今は自営業なので時間が使えてよかったけど。
サラリーマンには過酷なのでは?
いくつかHP見てると「ブートローダーにはうんざりしましたが」とか散見できる。
やっぱり皆さん苦労してるのね。
ほんと先駆者の方々には感謝です。
英語読みまくった自分もよくがんばった。

車で言うと、エンジン始動までに9時間かかったようなもんです。
知り合いに愚痴ったら「外車だとよくあるよね」とのこと。
あーそういえば、AVRはアメリカの企業だった。
カッコいいけどとんでもないところで・・・みたいな。でも、好きなんですけどね。そういうの。


この記事が皆さんの参考になれば嬉しいですー!
感想とかはメールはお気軽にどうぞ→ sugan@mua.biglobe.ne.jp
「うまく動かない」などのサポートはあまりできないと思います。

Twitterもどうぞ→ @sugan777


by:菅野 (2009/11/13)

Comments