RP2040 で QMK Firmware を使うメモ
前置き
天下一キーボードわいわい会 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 |
---|---|---|---|
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 }
左右間のシリアル通信の設定
Pro Micro を使うときは rules.mk
に SPLIT_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.h
の SOFT_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.mk
に SERIAL_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
ファイルを書き込めるようになりますので、ファームウェア更新の手間を減らすため設定を追加した。
参考にしたウェブページ
sekigon-gonnoc/pico-micro: A Pro Micro compatible board with RP2040 and mid-mount USB-C receptacle