前置き#

天下一キーボードわいわい会 Vol.4 - connpass にキーボードを出展するためにケースを新規作成しましたが、それに合わせて、以前から実現したかった USB Type-C 化を実現するため、以前購入して上手く使えなかった sekigon-gonnoc/pico-micro: A Pro Micro compatible board with RP2040 and mid-mount USB-C receptacle を使いました。RP2040 で QMK Firmware を動かすのは初めてで、使えるようになるまで多少の試行錯誤がありましたので、備忘録として必要な作業をまとめました。

なお、RP2040 を使う前は Pro Micro を使っており、その時の設定ファイルは qmk_firmware/keyboards/yamanami at yamanami_keyboard · s-show/qmk_firmware · GitHub のとおりで、RP2040 を使う場合の設定ファイルは qmk_firmware/keyboards/yamanami_rp2040 at yamanami_keyboard · s-show/qmk_firmware · GitHub のとおりです。

ボードと MCU の変更#

まず、マイコンボードを Pro Micro から PICO Micro に切り替えるため、MCU とブートローダーの設定を次のとおり変更しました。

1- MCU = atmega32u4
2+ MCU = RP2040
3- BOOTLOADER = caterina
4+ BOOTLOADER = rp2040

ピン指定の変更#

PICO Micro は Pro Micro との間でフットプリントとピン配置に互換性がありますが、RP2040 を使う時はピンの指定を GPIO の番号で指定する必要があるため、以下の対応表を作成してピンの指定を修正しました。

Pro Micro と PICO Micro のピンの対応表
Pro Micro PICO Micro Pro Micro PICO Micro
D3 GP0 B5 GP9
D2 GP1 F4 GP29
D1 GP2 F5 GP28
D0 GP3 F6 GP27
D4 GP4 F7 GP26
C6 GP5 B1 GP22
D7 GP6 B3 GP20
E6 GP7 B2 GP23
B4 GP8 B6 GP21
1- #define MATRIX_ROW_PINS { F4, C6, D7, E6 }
2+ #define MATRIX_ROW_PINS { GP29, GP5, GP6, GP7 }
3- #define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B6 }
4+ #define MATRIX_COL_PINS { GP28, GP27, GP26, GP22, GP20, GP21 }
5- #define MATRIX_ROW_PINS_RIGHT { F7, B1, B3, B2 }
6+ #define MATRIX_ROW_PINS_RIGHT { GP26, GP22, GP20, GP23 }
7- #define MATRIX_COL_PINS_RIGHT { D4, C6, D7, E6, B4, B5 }
8+ #define MATRIX_COL_PINS_RIGHT { GP4, GP5, GP6, GP7, GP8, GP9 }
PICO Micro のピン配置

左右間のシリアル通信の設定#

Pro Micro を使うときは rules.mkSPLIT_KEYBOARD = yes を指定して config.h#define USE_SERIAL#define SOFT_SERIAL_PIN D2 を追加すれば左右間のシリアル通信を設定できましたが、RP2040 では SOFT_SERRIAL_PIN が定義されていないため、次の順番で設定を修正しました。

まず、公式リファレンスで「RP2040 を使う時は SOFT_SERIAL_PIN の代わりに SERIAL_USART_TX_PIN を使うこと」と指定されており、私の設計では Pro Micro の D2 ピンでシリアル通信していましたので、config.hSOFT_SERIAL_PIN D2#define SERIAL_USART_TX_PIN GP1 に修正しました。

1- #define SOFT_SERIAL_PIN D2
2+ #define SERIAL_USART_TX_PIN GP1
私のキーボードの回路図

それから、私のキーボードではシリアル通信に使える線が一本だけで全二重通信によるシリアル通信はできないため、半二重通信でシリアル通信するために #define USE_SERIAL#define SERIAL_USART_HALF_DUPLEX に変更しました。

1- #define USE_SERIAL
2+ #define SERIAL_USART_HALF_DUPLEX

そして、rules.mkSERIAL_DRIVER = vendor を追加すれば左右間のシリアル通信の設定は完了です。

1SPLIT_KEYBOARD = yes
2+ SERIAL_DRIVER = vendor

その他の設定#

Pro Micro を使っているときはキーボードのリセットボタンを押せば Pro Micro がブートローダーモードになってファームウェアを更新できましたので、同じ機能を追加するため config.h に次の設定を追加しました。

1+ #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
2+ #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U

これでキーボードのリセットボタンを2連打すれば PICO Micro がブートローダーモードになって uf2 ファイルを書き込めるようになりますので、ファームウェア更新の手間を減らすため設定を追加した。

参考にしたウェブページ#

‘serial’ Driver

Raspberry Pi RP2040

sekigon-gonnoc/pico-micro: A Pro Micro compatible board with RP2040 and mid-mount USB-C receptacle

Lunakey PicoでQMK Firmwareを動かしてみました