3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Linux/Macのターミナルだけで自作キーボードのファームウェアを書き込む一例

Last updated at Posted at 2020-01-19

ターミナルにコマンドを入力するだけで、他のツールはトラブルシューティングぐらいにしか使用しません。
以下の内容は基本的にLinux/Mac共用となっているので、コマンドなどはそのまま実行できます。
ただし、MacOSの場合は、brewコマンドが実行できるようになっている必要があります。

記事の内容

  • Linuxにファームウェア書き込み環境を準備
  • キーマップの作成、ファームウェアデータの作成
  • ファームウェアデータの書き込み
  • トラブルシューティング

事前準備

  • キーボードの作成
    • ファームウェア書き込み後の動作確認のため、スイッチの半田付けまではやっておく必要がある。
  • PCB名の判別
    • 購入時に判明している筈であるが、販売者が独自の名前を使っていたりする場合もある。
    • 製品ページにPCB名が明記されていない場合、販売者が案内しているファームウェア書き込み方法を参照すると、本来のPCB名が記載されている場合がある。

ファームウェア書き込み環境の準備

qmk-firmware をダウンロード。

  • Githubページから直接ダウンロードしてもOK
  • 今後も使用することになるので、ダウンロード場所は良く考えること。
$ git clone https://github.com/qmk/qmk_firmware

必要なツール類の自動インストール

  • ダウンロードしたqmk-firmwareのディレクトリにあるシェルスクリプトを実行
$ ./qmk_firmware/util/qmk_install.sh

キーマップのmakeテスト

  • カレントディレクトリを./qmk_firmwareに移してから、下記コマンドを実行してテスト。
  • ./qmk_firmware/xd60_rev3_default.hexが作成されればOK
$ make xd60/rev3:default
※ PCB名/バージョン名:キーマップ名
  • もしもSome git sub-modules are out of date or modified, please consider running: make git-submoduleとエラーが出る場合、下記のコマンドを実行してから再度テストする。
$ make git-submodule

ファームウェアデータの作成

オリジナルのキーマップを作成・編集

  • 下記コマンドを実行すると、編集用のキーマップファイルとディレクトリが作成される。
  • 例文の場合だと、./qmk_firmware/keyboards/xd60/keymapsmy_keymapと言う名前のディレクトリとkeymap.cが作成される。
  • PCB名は目的とするPCBの名前に合わせて変更すること。
$ ./qmk_firmware/util/new_keymap.sh xd60 my_keymap
※シェルのパス PCB名 作成するキーマップ名
  • 作成されたkeymap.cを編集し、自分の最強キーマップを作成する。
  • 編集方法に関する記事は他の記事等を参照

ファームウェアデータのmake

  • デフォルトキーマップでのmakeテストと同様、下記コマンドでファームウェアデータを作成
  • キーボードの中にはxd60/rev3の様にサブディレクトリを指定する必要がある場合もあるので、./qmk_firmware/keyboardsの中にあるPCB名のディレクトリの中を事前に確認しておく。
$ make xd60/rev3:my_keymap

ファームウェアデータの書き込み

キーボードをブートローダーモードで接続

  • PCに接続してからPCB背面のリセットスイッチを押したり短絡させることでブートローダーモードで接続できる。
  • ブートローダーモードで接続できたかどうかは、lsusbコマンドで確認する。
  • 下記の例はatmega32u4チップを搭載したPCBの場合。他のチップの場合、03eb:2ff4の部分のID番号をこちらのページで参照し、コマンドで使用するチップ名を把握しておく。
$ lsusb
.
Bus 020 Device 002: ID 03eb:2ff4 Atmel Corporation ATm32U4DFU  Serial: 1.0.0
.

PCBに書き込み済みのファームウェアデータを消去

  • ./qmk_firmwareで実行
$ sudo dfu-programmer atmega32u4 erase
※MacOSの場合はsudo不要。以下同じ。

PCBに作成したファームウェアデータを書き込み

  • ./qmk_firmwareで実行
$ sudo dfu-programmer atmega32u4 flash xd60_rev3_my_keymap

PCBをリセット

  • 物理的にキーボードを付け外ししても同じ効果。./qmk_firmwareで実行
$ sudo dfu-programmer

トラブルシューティング

1. Chip already blank, to force erase use --force.

$ dfu-programmer atmega32u4 erase
Chip already blank, to force erase use --force.
  • すでにチップのメモリーが消去されている場合のメッセージ。
  • 強制的に消去する場合はsudo dfu-programmer erase --forceを実行する。

2. Devic is write protected.

$ dfu-programmer atmega32u4 flash xd60_rev3_vimlike.hex
Checking memory from 0x0 to 0x587F...  Empty.
0%                            100%  Programming 0x5880 bytes...
[Device is write protected.
  X  ERROR
Memory write error, use debug for more info.
  • チップのメモリが erase されていない場合に表示される。
  • 書き込みするファームウェアデータの指定を誤った後に出る場合がある。この場合、メモリを erase しようとしても上述1のエラーにより正常に消去できなくなる。
  • sudo dfu-programmer atmega32u4 erase --forceを実行してから書き込みを試行する。

3. 入力されるキーがおかしい

  • Linuxであればxev、MacOSであればKeyCastなどを使用し、キースイッチを押した場合に入力されるキーコードを確認する。
  • 特にデフォルトとは異なるレイアウトで組んだ場合によく陥る。
  • 一度デフォルトのキーマップを書き込みし、デフォルトのkeymap.cと入力されるキーコードを見比べて修正するのが簡単

記事作成の経緯

家にあったのがLinuxマシンとMacbookだったので。
使用ツール数の少ない汎用性の高いファームウェア書込み方法を模索して、最も簡単そうな方法がコレでした。

3
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?