🔮

Keyballの光学センサーのファームウェア(SROM)の謎

2024/03/20に公開
1

自作キーボードのKeyballシリーズに採用されているPMW3360DM-T2QU(以下PMW3360と表記)のファームウェアに関する、つい先日判明した事実とそこに至る経緯を紹介します。私はKeyballシリーズのファームウェアを担当しています。その延長でこの謎に迫ることができました。参考:Keyball61の一般販売に寄せて

前提知識

PMW3360とはゲーミングマウスなどに採用されるハイエンド寄りな光学センサーです。最大12000CPIという、1インチ動く際に12000カウントできる超高解像品です。そしてKeyballシリーズが採用しています。最近ではKeyball以外の自作キーボードや自作ポインティングデバイス(マウスなど)での採用例も増えているようで、高性能でポピュラーな光学センサーだと言えます。

KeyballシリーズはKeyball 46から始まった、PMW3360によるトラックボールが搭載された、Yowkeesさんが設計・製造・販売している自作キーボードです。

KeyballにおけるPMW3360のファームウェアの変遷

Keyballシリーズのデフォルトファームウェアは縁があり私が書きました。

シリーズ最初の機種であるKeyball 46では、世の中にオープンソースとして広まっていたPMW3360のドライバをそのまま使っていました。そののドライバは、SROMと呼ばれる約4KBのファームウェアを、PMW3360の電源を入れるたびにアップロードするようになっていました。これ自体はデータシートにも書かれています。問題となるのは4KBというそのサイズで、自作キーボードで使われているPro Microというマイコンボードの容量28KBの1/7を占めます。これは控えめに言っても巨大すぎました。結果、自作キーボードの機能としてはかなり絞り込む必要がありました。

続くKeyball 61は特殊な構成だったこともあり、このSROMのせいで基本的な機能すら実装できないということがわかりました。困った当時の私はいろいろ調べ、ついに「SROMをアップロードしなくてもPMW3360は機能した」との記述を見つけました。そこから試行錯誤の結果、SROMなしでPMW3360が動作することが確認でき、節約できた4KBを有効活用してKeyball 61登場以降のファームウェアは基本機能はもちろん、ギリギリまで自作キーボードとしての追加機能を盛り込んだものになりました。

こうなると果たしてSROMとは何だったのか、どんな機能を司っているのかという疑問が残ります。残りはしますが当時の自分はサイズが小さくなって、他の機能も盛り込める喜びでそんな疑問は脇に追いやって忘れてしまいます。その際に元のPMW3360のドライバには重大なバグがあることが判明し、フルスクラッチで書き直したりいろいろやっているのですが、本題のSROMとは関係ないので割愛します。

SROMに関する新たな発見

KeyballシリーズのファームウェアがSROMを使わなくなっておよそ2年、1つの不具合報告から新たな発見がもたらされました。その不具合というのは「カタログスペックの12000CPIを設定できない」という内容でした。

Keyball44使っています。DPIについて、3000くらいからカーソルの移動量上がらないのですが、皆さんはそんなことないですか?DPI 12000のときとDPI 3000の時でカーソルの移動量が変わらないんです。
引用元

ファームウェアを詳しく見てみましたが、特に問題は見つからず。。厳密には、私のKeyball44はcpi3400が限界みたいです。

cpiを設定する関数があるので、そこに直接8000とか入るようにしてみましたが、それでも3400より上がらず。
引用元

最初の報告からしばらくたったつい先日、実際に追試することにしました。試してみると確かに12000を指定したあとに、設定値を読み取ると3500に制限されてしまっています。そしてふと思いつきSROMをPMW3360アップロードしてみたところ、見事に12000CPIを設定できるようになったのです。

理由が判明しました。約4KBのSROMと呼ばれるファームウェアをPMW3360にアップロードすることで利用可能になります。Keyballシリーズのファームウェアは既に容量一杯なのでSROMの追加はできないですが、他の用途であれば足せるでしょう。
引用元

つまり謎のSROMの機能は高CPI設定をはじめ、PMW3360のデータシートに書かれたとおりの機能をフルで利用するには必須のものだったと考えられます。

しかしKeyballシリーズのデフォルトファームウェアにはそのサイズゆえに搭載することはできません。今回試したのも、Keyballシリーズのトラックボールモジュールを用いた自作のポインティングデバイスの試作機で、RP2040というMCUを用いた大きいファームウェアを書き込めるものを利用しました。

深まるSROMの謎

こうしてSROMに関する1つの謎が解けたわけですが、同時にいくつか別の疑問がわいてきます。

PMW3360のSROMには、私が認識しているだけで2つのバージョンがあります。IDが0x04のものと0x81のものです。何が違うんですかね?

SROMがないと動作しない機能には高CPI以外になにがあるんでしょう?

そもそもSROMの正しい入手経路は? 今回の試験ではqmk/qmkfirmware にバンドルされたものを使いましたが、彼らは果たしてどこから持ってきたんでしょうかね?

といった感じで謎はまだまだ残るのですが「まぁ動いてるし良いか」ってことで、この記事を書いていったんは忘れることにします。

まとめ

  • PMW3360DM-T2QUは高機能な光学センサーです
  • SROMをアップロードしなくても基本機能は動作します
  • しかしSROMをアップロードしないことで、制限を受ける機能があります
  • 制限の1つは高CPIの設定ができなくなることです
  • そのほかの機能がどのような制限を受けているかは不明です
  • SROMには複数のバージョンの存在が確認されています
  • 私が試したのは ID が 0x04 のものです
  • どのバージョンを使うのが良いかは不明です

Discussion

ykyk

そもそもSROMの正しい入手経路は? 今回の試験ではqmk/qmkfirmware にバンドルされたものを使いましたが、彼らは果たしてどこから持ってきたんでしょうかね?

興味本位で少しだけ考古学をした記録をここに残すことを許してください。

インターネットから得られる情報で遡れるだけ遡ると、どうも初出はここ (2017/5/9) のようです: https://github.com/mrjohnk/PMW3360DM-T2QU/commit/7ce26c04a2ece6553cb978485e3c53b69fef7161

作者のmrjohnk (X: @MisterJohnK) 氏はTindieでPMW3360 Motion Sensorというモジュールを売っている方。 https://www.tindie.com/products/jkicklighter/pmw3360-motion-sensor/

さらに、qmk_firmwareにこのファームウェアを持ち込んだdrashna氏がライセンスのことを質問すると「The manufacturer gave me the firmware for the chip.」と回答しています。 https://github.com/mrjohnk/PMW3360DM-T2QU/issues/27#issuecomment-748406389
(ライセンスの回答がないまま勝手にqmk_firmwareに追加しているように見えるが、いいのか?)

データシートに出てくるPixArt Imaging Inc. が作ったクローズドなコードからコンパイルされたアセンブリ、ということなのかな?
電子工作の土地勘がなさ過ぎて頓珍漢なことを言っているかもしれませんが、 mrjohnk氏はブレイクアウトボードを同人的に作った人ってこと……?

(Keyball61で執筆)