⌨️

Rustで自作キーボードのファームを書きたい。

に公開

目的

RMK firmwareというRust製のフレームワークで自作キーボードのファームウェアを書いてみます。

なぜRMK?

  • 最近Rustに触れているから
  • 作りたいキーボードに求められる要件がクリアできそうだから

https://rmk.rs/

QMKやZMKと比較して

キーボードのコンセプト的に無線・Splitが大前提です。
そしてジョイスティックの実装が必須だと考えたため、ジョイスティックが公式実装できるRMKが選ばれました。

環境構築

RMKはクラウドコンパイルとローカルコンパイルに対応しています。
今回はローカルコンパイルで実装していきますので、以下のサイトを参考に環境構築を行います。

https://rmk.rs/docs/user_guide/2-2_local_compilation.html

ハードウェア環境

  • 開発マシン
    • 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のアップデート

最初からブートローダーは入っている様ですが、ファームのアップデートを行います。

  1. PCとUSB接続する
  2. ボード左上のResetボタンを素早く2回押下します。
  3. USBデバイスとして認識されます。

アップデートファイルの入手

以下のリポジトリから公式のアップデートファイルを入手します。
※おそらくupdate_xiao_...bootloader-{version}_nostd.uf2

https://github.com/adafruit/Adafruit_nRF52_Bootloader/releases

入手したアップデートファイルをボードにドラックアンドドロップで書き込みます。

memory.xの変更

今回は変更箇所なしです。

Vialの設定

飛ばします。

ファームウェアをコンパイルする

以下のコマンドでコンパイルします。

cargo build --release

uf2のコンパイル

デフォルトではELFファイルが生成されるので、uf2で書き出します。

cargo make uf2 --release

これをコピーすればOkです。

Discussion