ブートローダーが書き込まれていないAVRマイコンにArduinoのブートローダーを書き込みたい場合があります。
方法の一つとして、正常に動作するArduinoにArduinoISPスケッチをコンパイル・書き込んで、このArduinoを書き込み装置とし、ブートローダーを書き込むことができます。この場合、書き込み装置としてのArduinoが必要になるのとそのための配線をしなければいけません。
安価なUSB接続のAVRライター「USBasp」を使うことで付属のケーブルと変換コネクタで簡単にできるようになります。
今回使用したAVRライターはアマゾン等でいくつか出てきますがこちらのKeeYees製のものを使いました。
Macの場合は手間要らず
このAVRライターはWindows10では素直にドライバーがインストールされないのでZadigを使うという一手間が必要になりますがMacの場合は特に何もする必要がありません。
Windows 10 ではZadigを使う
Windows 10の場合、USBaspをUSBに挿してもそのままでは使えません。デバイスマネージャーでは ? マークがついています。
そこで、Zadigというアプリを使います。Zadig は、WinUSB、libusb-win32/libusb0.sys、libusbK などの汎用 USB ドライバーをインストールして、USB デバイスへのアクセスを支援する Windows アプリケーションです。
Zadig – USB driver installation made easyからzadig-2.7.exeをダウンロードして実行すると、このようなウィンドウが現れるので赤丸のボックスで[libusbk(v3.1.0.1)]を選択して、「Install Driver」をクリックします。
これでインストールが開始されます。インストールが終了するとデバイスマネージャーに「libusbK USB Devices」という項目が追加されていてUSBaspが登録されているのが確認できます。
ピンヘッダーの設定
購入したAVRライターのJP2のピンヘッダーにはデフォルトでは2-3(3V)にショートピンが挿入されていました。ここでは5Vのデバイスに書き込むのでショートピンを1-2に挿入します。
接続方法
ブートローダーを書き込むデバイスはAtmega328P-PUとしてArduino UNO(互換基板)を使うことにします。書き込むデバイスはこの基板のソケットに挿入します。
付属の10ピンのフラットケーブルをAVRライターのコネクタとこれまた付属の10ピンから6ピンに変換する変換基板のコネクタに挿入します。この接続はケーブルの向きは間違えることはないです。
そして、変換基板の6ピンコネクタをArduino UNOのICSPコネクタに接続します。この変換基板の6ピンのコネクタはICSPコネクタにどちらの向きにでも挿入できてしまうので注意が必要です。画像のようにMISO、SCK、RST端子がArduino UNO基板の内側に向くように、MISO端子が1番ピン(内側の左端)になるように挿入します。
書き込み方法
AVRライターをMacとUSB接続してArduino IDEを起動します。
- 「ツール」>「ボード:」>「Arduino AVR Boards」でArduino UNOを選択し、
- 「ツール」>「書込装置:」でUSBaspを選択し、
- 「ツール」>「ブートローダーを書き込む」
で書き込まれます。
デバイスを復活させる
Arduinoのプログラミングをしていて、突然、以下のエラーメッセージが出て書き込みができなくなったことがありました。
avrdude: stk500_recv(): programmer is not responding
このAVRライターを使ってブートローダーを書き込んだら復活しました。原因はわかりませんがブートローダーが壊れていたのかもしれません。
ブートローダーを簡単に書き込めるのは何かと便利です。