ProMicroのブートローダーをQMK-DFUにする

動機

4x4_hotswapには物理リセットボタンがないためキー操作でブートローダーに入れるようにしたいが, (ProMicroに初めから入っている)CaterinaブートローダーではRESETキーを押しても反応しなかった(今は対応しているかもしれない。試していない。)

追記 2018/11/19

config.h#define CATERINA_BOOTLOADERと書くことでCaterinaのままでRESETキーに対応することがわかった。FatProMicroの死が無駄だったことがわかって完全に虚無。

方法

  1. 余っているProMicro(Caterina)にArduinoISPを書き込む
  2. QMK Firmwareを書き換え, makeする
  3. ISP化したProMicroにブートローダーを書き換えるProMicroを繋ぐ
  4. 書き込む

余っている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.mkBOOTLOADER = 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_OUTPUTQMK_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