⌨️
Rustで自作キーボードのファームを書きたい。
目的
RMK firmwareというRust製のフレームワークで自作キーボードのファームウェアを書いてみます。
なぜRMK?
- 最近Rustに触れているから
- 作りたいキーボードに求められる要件がクリアできそうだから
QMKやZMKと比較して
キーボードのコンセプト的に無線・Splitが大前提です。
そしてジョイスティックの実装が必須だと考えたため、ジョイスティックが公式実装できるRMKが選ばれました。
環境構築
RMKはクラウドコンパイルとローカルコンパイルに対応しています。
今回はローカルコンパイルで実装していきますので、以下のサイトを参考に環境構築を行います。
ハードウェア環境
- 開発マシン
- MacStudio M1max
- 開発ターゲット
- XIAO nRF52840 Plus
Rustのインストール
私は普段からRustで開発しているので、今回は割愛します。
nRF52840のコンパイルターゲット追加
無線Splitキーボードでは一般的なnRF52840を使用して開発していきます。
以下のコマンドを実行してターゲットを追加しましょう。
rustup target add thumbv7em-none-eabihf
rmkitのインストール
RMKプロジェクトを作成するために、公式ガイドに則ってインストールします。
cargo install rmkit
追加で必要になる他のツールもインストールします。
cargo install flip-link cargo-make
ファームウェアプロジェクトを作成
rmkitでプロジェクトを作成します。
% rmkit init
> Project Name: GT30
> Choose your keyboard type? split
> Choose your microcontroller or board nrf52840
⇣ Download project template for nrf52840_split...
✅ Project created, path: GT30
今回はGT30という名前のキーボードを作成していきます。
xiao nRF52840のアップデート
最初からブートローダーは入っている様ですが、ファームのアップデートを行います。
- PCとUSB接続する
- ボード左上のResetボタンを素早く2回押下します。
- USBデバイスとして認識されます。
アップデートファイルの入手
以下のリポジトリから公式のアップデートファイルを入手します。
※おそらくupdate_xiao_...bootloader-{version}_nostd.uf2
入手したアップデートファイルをボードにドラックアンドドロップで書き込みます。
memory.xの変更
今回は変更箇所なしです。
Vialの設定
飛ばします。
ファームウェアをコンパイルする
以下のコマンドでコンパイルします。
cargo build --release
uf2のコンパイル
デフォルトではELFファイルが生成されるので、uf2で書き出します。
cargo make uf2 --release
これをコピーすればOkです。
Discussion