ALUNAR M508 メインボードのファームウェアをアップデートして !!! バグに対応する
以前、3D プリンタ ALUNAR M508 のファームウェア (正確にはブートローダだが) には問題があって、!!!
をシリアル通信で受信するとモニタモードに変わるという問題があった。
色々ググってみると、ファームウェアをアップデートするとこの問題に対応できるので、対応してみた。
Table of Contents
必要なもの
今回の問題は、ALUNAR M508 の CPU である ATmega2560 ではなく、USB – シリアルブリッジとして使われている ATmega16U4 側にある。なので、ATmega16U2 が DFU (Device Firmware Update) に移行するようにジャンパでショートさせる必要がある。
一番楽なのはメス – メスのジャンパ線だが、ここは割と何でもいい。導通すればいいのでピンセットでもいいし、自分の場合はオス – メスのジャンパ線とブレッドボードを組み合わせた。
書き換え
dfu-programmer をインストール
DFU モードになった AVR に対してプログラムを書き込むためのプログラムが必要になる。今回は Mac でやったので、dfu-programmer をインストールした。
sudo brew install dfu-programmer
Windows の場合は Flip をインストールすればいいらしい。
DFU モードに移行
DFU モードに移行するために、まずジャンパ線か何かで ATmega16U2 側の ICSP コネクタの RESET を GND に接続する。ICSP は 2 つあるので、ICSP2 かどうか確認する。
この状態で電源を供給するか、リセットボタンを押してボードをリセットする。これで DFU モードに移行する。
ファームウェアを書き換える
DFU モードに入ったら、あとはファームウェアを書き換える。ファームウェアは Arduino IDE のパッケージ内に含まれている。Mac の場合はコンソールからファームウェアのあるディレクトリに移動する。
cd /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/firmwares/atmegaxxu2
ファームウェアを書き換える前に、まずは既存のファームウェアを削除する。
$ sudo dfu-programmer atmega16u2 erase Password: Checking memory from 0x0 to 0x2FFF... Not blank at 0x1. Erasing flash... Success
削除が終わったら、修正済みのファームウェアを書き込む。
$ sudo dfu-programmer atmega16u2 flash Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex --suppress-bootloader-mem Checking memory from 0x0 to 0xFFF... Empty. 0% 100% Programming 0x1000 bytes... [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success 0% 100% Reading 0x3000 bytes... [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success Validating... Success 0x1000 bytes written into 0x3000 bytes memory (33.33%).
これでファームウェアの書き込みは完了。
最新の Marlin をインストールする
ここまで来れば !!!
を含むデータをやりとりしても問題はない。なので、ALUNAR M508 用にいじった最新の Marlin を持ってきて Arduino IDE から書き込む。
なお、自分の環境ではちょくちょく timeout になることがある。USB ケーブルを抜き差しして何度か試すとデータが流れるようにはなるが、Arduino を触るときのように常に成功するわけではないので、若干モヤモヤする。