Pro Micro と qmk_firmware と WSL-Ubuntu と avrdude のメモ
自作キーボードを Windows 10 な PC で楽しみたいけど WSL-Ubuntu でにゃんにゃんしたいメモ。
WSL-Ubuntu での AVR 開発環境の準備
sudo apt install -y gcc-avr avr-libc binutils-avr avrdude
WSL-Ubuntu での qmk_firmware の make
によるビルド
git clone git@github.com:qmk/qmk_firmware.git
cd qmk_firmware
make lets_split:default
開発環境に問題がなければ待っているだけ。
ls -la .build/*.hex
.hex
ができていなければ開発環境の install に何か忘れているか、 alias
なりシェル関数なり PATH
の優先順位なりで何かがおかしい。エラーログが出ていれば読んでどうにかする。
-rwxrwxrwx 1 usagi usagi 54K 2019-02-11T08:35:44 .build/lets_split_rev2_default.hex
WSL-Ubuntu での avrdude
による Pro Micro への .hex のアップロード
執筆時点の WSL では次のようにポートを指定せず qmk_firmware の make
に全自動でお任せしようとすると ERROR で期待動作しない😂
# これは失敗する例
make lets_split:default:avrdude
ERROR: AVR flashing cannot be automated within the Windows Subsystem for Linux (WSL) currently. Instead, take the .hex file generated and flash it using AVRDUDE, AVRDUDESS, or XLoader.
と、いうわけで、 Pro Micro を RESET
しつつ avrdude
を手打ちする。長いコマンドになるので予め入力して ENTER
するだけにしてから Pro Micro を RESET
して素早く ENTER
する。 avrdude
の -P
引数で指定すべき /dev/ttyS
系のポートが具体的にどれなのかはちょっとした注意が必用(後述)。
# これは成功する例 avrdude -p atmega32u4 -c avr109 -P /dev/ttyS4 -U flash:w:/mnt/c/Users/usagi/tmp/GitHub/qmk_firmware/.build/lets_split_rev2_default.hex
(note: -U
の引数は先に作った .hex
のパスへ読み替えて下さい。必用なら pwd
とかで確認してね♥ )
↓アップロード成功のログが流れてくれれば成功😃
Connecting to programmer: . Found programmer: Id = "CATERIN"; type = S Software Version = 1.0; No Hardware Version given. Programmer supports auto addr increment. Programmer supports buffered memory access with buffersize=128 bytes. Programmer supports the following devices: Device code: 0x44 avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e9587 (probably m32u4) avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "/mnt/c/Users/usagi/tmp/GitHub/qmk_firmware/.build/lets_split_rev2_default.hex" avrdude: input file /mnt/c/Users/usagi/tmp/GitHub/qmk_firmware/.build/lets_split_rev2_default.hex auto detected as Intel Hex avrdude: writing flash (19566 bytes): Writing | ################################################## | 100% 1.61s avrdude: 19566 bytes of flash written avrdude: verifying flash memory against /mnt/c/Users/usagi/tmp/GitHub/qmk_firmware/.build/lets_split_rev2_default.hex: avrdude: load data flash data from input file /mnt/c/Users/usagi/tmp/GitHub/qmk_firmware/.build/lets_split_rev2_default.hex: avrdude: input file /mnt/c/Users/usagi/tmp/GitHub/qmk_firmware/.build/lets_split_rev2_default.hex auto detected as Intel Hex avrdude: input file /mnt/c/Users/usagi/tmp/GitHub/qmk_firmware/.build/lets_split_rev2_default.hex contains 19566 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.58s avrdude: verifying ... avrdude: 19566 bytes of flash verified avrdude: safemode: Fuses OK (E:FB, H:D8, L:FF) avrdude done. Thank you.
WSL の /dev/ttyS
系と Pro Micro の RESET
の注意点
例えば、Pro Micro の初期状態あるいはファームウェアを再設定するなどして Arduino としてブートしている Pro Micro を PC へ挿しているとき、 WSL の外の Windows のデバイスマネージャーの Ports (COM & LPT)
に COM5
として認識されていたとしよう。この状態では Arduino IDE
で遊んだりする時には COM5
をポートに設定して扱える。
しかし、この状態の Pro Micro へ qml_firmware
をアップロードしようと avrdude
で -P
する場合に WSL 内で /dev/ttyS5
とすると接続できずに失敗する。
これは Pro Micro は RESET
状態では別の COM ポートへ認識されるためで、例えば、デバイスマネージャーを凝視しながら Pro Micro を RESET
すると COM5
だった認識がリセットで解除された直後は COM4
として認識され、書き込み可能時間が経過するとまた認識が解けて COM5
へ再認識される動作を確認できる。
↑RESET直後に再認識された COM4
の Pro Micro
と、いうわけで、この場合は avrdude
の -P
引数には /dev/ttyS4
を渡してあげると期待動作し、 WSL-Ubuntu だけで意図通り qmk_firmware を avrdude
でアップロードできる😃