ProMicroのブートローダーをQMK-DFUにする
動機
4x4_hotswapには物理リセットボタンがないためキー操作でブートローダーに入れるようにしたいが, (ProMicroに初めから入っている)CaterinaブートローダーではRESET
キーを押しても反応しなかった(今は対応しているかもしれない。試していない。)
追記 2018/11/19
config.h
に#define CATERINA_BOOTLOADER
と書くことでCaterinaのままでRESET
キーに対応することがわかった。FatProMicroの死が無駄だったことがわかって完全に虚無。
方法
- 余っているProMicro(Caterina)にArduinoISPを書き込む
- QMK Firmwareを書き換え, makeする
- ISP化したProMicroにブートローダーを書き換えるProMicroを繋ぐ
- 書き込む
余っているProMicroにArduinoISPを書き込む
Arduino IDEから ファイル>スケッチ例>11.ArduinoISP>ArduinoISP を選択し, そのままProMicroに書き込む。ArduinoにあるピンがProMicroにはないと言われているが, 動くものは動く。既にQMK Firmwareを書き込んでいる場合はリセットする必要があるかもしれない。
QMK Firmwareを書き換え, makeする
config.h
に
#define QMK_ESC_OUTPUT F1 // usually COL #define QMK_ESC_INPUT D5 // usually ROW #define QMK_LED B0
を書き足す。
rules.mk
にBOOTLOADER = qmk-dfu
と書く。
make keyboard:keymap:production
を実行する。
ProMicroをつなぐ
ArduinoISPを書き込んだProMicroとブートローダーを書き換えるProMicroのVCC, GND, 14番, 15番, 16番 を繋ぐ。ISP側の10番は書き換える側のRESETに繋ぐ。
Pro Micro(クローン)を文鎮化から復活 - Qiita
書き込む
ArduinoISPを書き込んだProMicroのポートが/dev/ttyACM0
の場合,
avrdude -c avrisp -p m32u4 -P /dev/ttyACM0 -U flash:w:"keyboard_keymap_production.hex":a -U lfuse:w:0x5E:m -U hfuse:w:0xD9:m -U efuse:w:0xC3:m -U lock:w:0x3F:m
を実行する。メモリ全域を書き換えるため, やや時間がかかる。
動作
リセットしたときにTX LEDが点滅するようになった。
ファームウェア書き込み時には make keyboard:keymap:avrdude
ではなくmake keyboard:keymap:dfu
とする必要がある。
分割キーボードで使うとRESET
キーを押したときに両手ともリセットされ, そのままコンピュータでファームウェアを書き込むとmicroUSBケーブルが挿さっているほうにだけファームウェアが書き込まれる。挿さっていないほうはTX LEDが点滅したままになる。
QMK_ESC_OUTPUT
やQMK_ESC_INPUT
が何なのかはわからない。
続き
本来の目的である4x4_hotswap用のFatProMicroに書き込もうとしたところ, 接触不良でFuse bitが全て0に書き換えられ, 何もできなくなった。買い直す必要がある。ブートローダーが壊れても同様にArduinoISPで直せるし, モゲMicroもArduinoISP経由でファームウェアを書き換えれば(分割キーボードの右手側であれば)使えるが, こうなってしまうと全くダメだ。(高電圧を掛ける装置を使えば直せると聞いたこともあるが, そんな装置は手元にない。) 接触不良には注意しよう!
なお, 文鎮化したFatProMicroは強いと言われるmicroUSB端子の耐久試験に使うつもりだ。
参考
Replace Pro Micro bootloader with QMK DFU : olkb
qmk_firmware/flashing.md at master · qmk/qmk_firmware · GitHub