キーボード自作キット (Lily58 Pro)

# Lily58 Proとは

ビルドガイド:https://kata0510.github.io/Lily58-Document/Lily58_Pro_BG/
ファームウェアとしてQMKを使用している。

# raspiでファームウェアを書き込む

必要なもの

* raspberry pi
* ジャンパー線
* ブレッドボード


## avrdudeをインストールする

```shell
% sudo vi /etc/avrdude.conf
```

## GPIOを結線する

Ground, Reset, SCK, MISO, MOSI, VCCを繋ぎます。

## ProMicroと繋ぐテスト

```shell
% avrdude -c linuxgpio -p atmega32u4 -v
```

## ファームウェアを書き込む

```shell
% avrdude -c linuxgpio -p atmega32u4 -U flash:w:<hex>
```

[Caterina-Leonardo.hex]を書き込みました。

# remapでファームウェアを書き込む

https://remap-keys.app/catalog/jztXFjMO9ZAIzyFT7CSe/firmware

# トラブル： デバイスを認識しない

Raspberry PIのGPIO経由でhexを書き込んだところ、2台のProMicroのうち1台はHIDデバイスとして認識されるようになりました。

正常ログ

~~~shell:/var/log/kern.log
Jul  5 21:25:05 raspberrypi kernel: [ 9031.081979] usb 1-1.1.3: new full-speed USB device number 93 using dwc_otg
Jul  5 21:25:05 raspberrypi kernel: [ 9031.195228] usb 1-1.1.3: New USB device found, idVendor=04d8, idProduct=eb2d, bcdDevice= 1.00
Jul  5 21:25:05 raspberrypi kernel: [ 9031.195294] usb 1-1.1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jul  5 21:25:05 raspberrypi kernel: [ 9031.195317] usb 1-1.1.3: Product: Lily58
Jul  5 21:25:05 raspberrypi kernel: [ 9031.195336] usb 1-1.1.3: Manufacturer: liliums
Jul  5 21:25:05 raspberrypi kernel: [ 9031.208342] input: liliums Lily58 as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.3/1-1.1.3:1.0/0003:04D8:EB2D.0011/input/input37
Jul  5 21:25:05 raspberrypi kernel: [ 9031.272813] hid-generic 0003:04D8:EB2D.0011: input,hidraw2: USB HID v1.11 Keyboard [liliums Lily58] on usb-3f980000.usb-1.1.3/input0
Jul  5 21:25:14 raspberrypi kernel: [ 9040.914392] usb 1-1.1.3: USB disconnect, device number 93
~~~

エラーログ

~~~shell:/var/log/kern.log
Jul  5 21:25:33 raspberrypi kernel: [ 9059.246235] usb 1-1.1.3: new full-speed USB device number 94 using dwc_otg
Jul  5 21:25:33 raspberrypi kernel: [ 9059.352662] usb 1-1.1.3: unable to read config index 0 descriptor/all
Jul  5 21:25:33 raspberrypi kernel: [ 9059.352694] usb 1-1.1.3: can't read configurations, error -32
Jul  5 21:25:33 raspberrypi kernel: [ 9059.430212] usb 1-1.1.3: new full-speed USB device number 95 using dwc_otg
Jul  5 21:25:33 raspberrypi kernel: [ 9059.531408] usb 1-1.1.3: device descriptor read/all, error -32
Jul  5 21:25:33 raspberrypi kernel: [ 9059.531508] usb 1-1.1-port3: attempt power cycle
Jul  5 21:25:34 raspberrypi kernel: [ 9060.134140] usb 1-1.1.3: new full-speed USB device number 96 using dwc_otg
Jul  5 21:25:44 raspberrypi kernel: [ 9070.818218] usb 1-1.1.3: device not accepting address 96, error -110
Jul  5 21:25:44 raspberrypi kernel: [ 9070.898293] usb 1-1.1.3: new full-speed USB device number 97 using dwc_otg
Jul  5 21:25:44 raspberrypi kernel: [ 9070.932917] usb 1-1.1.3: New USB device found, idVendor=04d8, idProduct=eb2d, bcdDevice= 1.00
Jul  5 21:25:44 raspberrypi kernel: [ 9070.932943] usb 1-1.1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jul  5 21:25:44 raspberrypi kernel: [ 9070.932953] usb 1-1.1.3: Product: Lily58
Jul  5 21:25:44 raspberrypi kernel: [ 9070.932962] usb 1-1.1.3: Manufacturer: liliums
Jul  5 21:25:44 raspberrypi kernel: [ 9070.936091] usbhid 1-1.1.3:1.0: can't add hid device: -32
Jul  5 21:25:44 raspberrypi kernel: [ 9070.936175] usbhid: probe of 1-1.1.3:1.0 failed with error -32
Jul  5 21:25:55 raspberrypi kernel: [ 9081.044318] usb 1-1.1.3: USB disconnect, device number 97
~~~

結局この一台は不良品ということで購入元に交換の対応をしていただき、問題は解決しました。

キットとはいえ、自作なのでこういったリスクはあるということだと思います。何か起きたときのために自分で問題を調査するスキルや覚悟はある程度必要だと思います。

# QMKとは何か

QMK = Quantum Mechanical Keyboard
入力装置に関するオープンソースのコミュニティである。
QMK Firmware, QMK Configurator, QMK Toolboxをメンテしている。

# ProMicro

プロセッサとしてATmega32U4を搭載するボード。
元々はArduino Leonardoの互換機としてSparkFunが開発したものらしい (https://www.sparkfun.com/products/12640)

## Bootloader

オリジナルのArduino Leonardoのブートローダーは、Caterinaと呼ばれるもので、リセットをすると直後の8秒間はブートローダーモードとなり、その8秒後にユーザーコードの実行に遷移する。

しかし、これではユーザーコードの開発に支障があることから、SparkFunのCaterinaは、リセットスイッチをダブルタップしたときだけ、ブートローダーモード(その8秒後にユーザーコードの実行)となる。リセットスイッチのシングルタップはブートローダーモードをスキップし(正確には750ms程度走り)、ユーザーコードの実行となる。([Firmware Note])

# 参考
ATmega16U4,ATmega32U4:https://avr.jp/user/DS/PDF/mega16U4.pdf

[Firmware Note]:https://cdn.sparkfun.com/datasheets/Dev/Arduino/Boards/32U4Note.pdf?_gl=1*f2y9ri*_ga*MTU2NTM3OTcwMy4xNjg4MzkwNjk4*_ga_T369JS7J9N*MTY4ODc3MzEzMi4yLjEuMTY4ODc3Mzc0OS4wLjAuMA..
[Caterina-Leonardo.hex]:bootloaders/caterina/Caterina-Leonardo.hex