現在のプロジェクトで使っているATmega32U4にArduino Leonardoブートローダを書き込むのに苦労したので、Tipsや書き込み方を紹介します。
ハードウェア
自作のPCBです。モータドライバー、センサー関係、昇圧回路など色々、乗っけました。
フラックスが残っていて汚いのは許してください笑
- マイコン ATmega32U4
- クロック 16MHz
- インターフェース ICSP,MicroUSB対応
失敗 Arduino Leonardoから書き込み
Arduino LeonardoをISPとして使いブートローダーを使う方法。
この方法では結局うまくいかなかったのですが、参考としてご覧ください。
Arduino LeonardoにはATmega32u4が乗っているので、ATmega32u4にブートローダを焼く場合は同じチップからの方が相性がいいらしい。書き込み機として使うLeonardoのリセットとGNDの間に10µFのコンデンサを挟んでもうまく行きませんでした。具体的には以下のエラーが出ました。
ArduinoIDEではブートローダーの書き込みを簡単にするため、対象を選択してボタンを押すだけで書き込めるようになっていますが裏ではavrdudeというコマンドが動いています。
デフォルト設定では実行コマンドや進渉が見えないのでverbose outputをIDEの設定からアップロードとコンパイル中に有効にします。これでコマンドが確認できます。
/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega32u4 -cstk500v1 -P/dev/cu.usbmodem1101 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0xcb:m -Uhfuse:w:0xd8:m -Ulfuse:w:0xff:m
エラーメッセージで-Fオプションをつけて試してくださいとあるので最後に-Fをつけて実行。
/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega32u4 -cstk500v1 -P/dev/cu.usbmodem1101 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0xcb:m -Uhfuse:w:0xd8:m -Ulfuse:w:0xff:m -F
やはりエラー、データの読み込みは完了しましたが、ブートローダーの書き込みがされず終了してしまいます。
対処法
結論から言うとUSBaspを使えば問題なく書き込みできました。
USBaspはAtmel社AVRマイコン用のプログラムライタです。10ピンなので、ICSP経由で書き込む場合は__6ピンに変換__が必要です。
画像では自作の変換ケーブル使ってます。
- USBasp
- 6ピン変換
使い方
使い方は簡単でPCとUSBaspをUSBポートから接続します。
変換ケーブルを自作したい方のためにUSBaspのピンアサインを載せておきます。
さらに変換した6ピンのケーブルをターゲットのICSPに接続すれば配線は完了です。
PC側ではArduinoIDEを起動します。__メニュー>ツール__から書き込みたいブートローダーの名前をボードから選択します。(この場合はLeonardoを選択)
ポートは何も選ばなくて大丈夫です。さらにUSBaspをプログラマとして選びます。最後にブートローダー書き込むを押せば書き込みGA開始されます。
書き込みが正常に終了すると以下のように表示されます。今回の環境では書き込みには30~40秒ほどかかりました。またエラーが出た際は、変換や差し間違えなど接続を再度確認してみてください。
書き込みが終了しボードをPCと直接繋ぐとATmega32U4がArduino Leonardoとして認識されArduinoIDEからスケッチが書き込めるようになります。
お疲れ様でした!