<<
Arduino UNOとAVRISPmkIIを使用してATmega328P-PUにブートローダを書き込む †
Arduino UNO(非SMD版)には「ATmega328P-PU」というICが搭載されており、取り外しが可能です。
つまりICが手に入れば交換可能になるのですが、Arduino IDEからスケッチを書き込むためにはあらかじめ「Arduino UNO用のブートローダ」というプログラムが書き込まれている必要があります。
ブートローダを書き込む方法はいくつかありますが、ここでは「Arduino UNO」本体と「AVRISPmkII」というAVRライタ*1を使用した方法についてメモしておきます。
補足 †
現在国内でATmega328P-PUを購入しようとした場合、メジャーなところでは秋月の「ブートローダ無しタイプ」(250円、14個以上230円)かスイッチサイエンスの「ブートローダ入りタイプ」(350円)の2つの選択肢があります。(「こちら」は「Arduino Duemilanove」という前のモデルのものでUNOには使用できない(試してないのでたぶん)ので注意)
差額は100円なので、AVRライタの価格(秋月で購入すると3300円)や送料、必要となる頻度などを考慮してどちらか選択すればよいと思います。
必要なもの †
- Arduino UNO(本体)
- AVRISPmkII(AVRライタ)
- A-BタイプのUSBケーブルx2本(1本はAVRISPmkIIに付属している)
- ATmega328P-PU(参考)
- (あると便利)28ピンICソケット(300mil)(丸ピン)(参考)
手順 †
手順は以下のとおりです。
- AVR Studio4をインストール
- Arduino UNOに書き込み対象のATmega328P-PUを挿す
- Arduino UNOと電源を接続する
- Arduino UNOとAVRISPmkIIを接続する
- AVRISPmkIIをPCと接続する
- AVR Studio 4を起動する
- ATmega328P-PUに接続する
- 設定が読み取り可能か確認する
- ブートローダを書き込む
- ヒューズビットを変更する
- ロックビットを変更する
- 動作確認
AVR Studio4をインストール †
AVRライタソフトウェアの「AVR Studio4」をインストールします。(インストーラーにはAVRISPmkIIのドライバも含まれているので先にインストールする必要があります)
AVRISPmkIIにDVDが付属していますが、念のためAtmelの公式サイトから「最新版」をダウンロードします(ダウンロードにはメールアドレスの登録が必要です)。2011/07/18現在、最新版は「4.18SP3」で、無印(build 684)をインストールした後にSP3(build716)のパッチをあてる必要があります。
Arduino UNOに書き込み対象のATmega328P-PUを挿す †
ICの足は柔らかいので脱着は慎重に行ってください<自分は精密ドライバーでこじってます。
この時、28ピンICソケット(丸ピン)を間にかませると脱着が楽になるのでおすすめです。
Arduino UNOと電源を接続する †
Arduino UNOとPCをUSBで接続、もしくは外部電源と接続して電源を確保します。
Arduino UNOとAVRISPmkIIを接続する †
Arduino UNO上の6ピンにAVRISPmkIIを接続します。接続する向きは、6ピンのそばに小さい白い点が打ってありますので、その側にAVRISPmkIIのケーブルの赤いライン側に合わせます。
AVRISPmkIIをPCと接続する †
ドライバはAVR Studio 4のインストール時に一緒にインストールされているので問題ありません。
AVR Studio 4を起動する †
「Welcome to AVR Studio 4」というダイアログが表示されたらCanceを押下。
ATmega328P-PUに接続する †
画面上部に並んでるアイコンの中から「ICマークにCONと書かれているアイコン(Display the Connect Dialog)」をクリックします。
AVRライタの種類を選択するダイアログが表示されたら「Platform:AVRISP mkII」、「Port:USB」を選択して「Connect」ボタンを押下します。
- 初回接続時には「AVRSIPmkIIのファームアップを実行するか?」といった旨のダイアログが表示されたら「OK」を押下してから次のダイアログで「Start Upgrade」を押下します。
設定が読み取り可能か確認する †
「Main」タブ内の「Device and Signature Bytes」で「ATmega328P」を選択します。
「Read Signature」を押下してデバイスIDの「0x1E 0x95 0x0F」が取得できるか確認します。
ブートローダを書き込む †
「Program」タブ内の「Flash->Input HEX File」を選択し、ブートローダ用のHEXファイルを指定します。
Arduino UNO用のものはArduino IDE内の「\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex」になります。
ファイルを指定したら「Program」ボタンを押下して書き込みます。
ヒューズビットを変更する †
ヒューズビットをArduino UNOに最初から付属していたATmega328Pに書きこまれていた「0xFD 0xD6 0xFF」に変更します。
「Fuses」タブを開き、以下のように設定します。
- BODLEVEL:Brown-out detection at VCC=2.7 V
- RSTDISBL:(none)
- DWEN:(none)
- SPIEN:check
- WDTON:(none)
- EESAVE:check
- BOOTSZ:Boot Flash size=256 words start address=$3F00
- BOOTRST:check
- CKDIV8:(none)
- CKOUT:(none)
- SUT_CKSEL:(一番下のもの)Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 16K ...
設定したら「Program」を押下して設定を書き込みます。
ロックビットを変更する †
ロックビットをArduino UNOに最初から付属していたATmega328Pに書きこまれていた「0xCF」に変更します。
「Lock Bits」タブを開き、以下のように設定します。
- LB:No memory lock features enabled
- BLB0:No lock on SPM and LPM in Application Section
- BLB1:LPM and SPM prohibited in Boot Section
設定したら「Program」を押下して設定を書き込みます。
動作確認 †
AVR Studio 4を終了し、AVRISPmkIIを外してからArduino IDEから適当なスケッチを書きこんで動作を確認します。