APM32F103でQMK/VIAL対応の自作キーボードを作った話。STM32F103の互換品の模様。

最近たまに意味もなくキーボードを設計して遊んでいます。一般的にコストが一番かかるのはキースイッチ類で、基板(PCB)が占めるコストというのはそこまで大きくありません。なので、小数生産の場合はProMiocroのような製品を外付けしたりして作成することが多いかと思います。

一方で企業や大量生産する場合という場合はその小さなコストにすら目を向ける必要が出てきます。1枚100円違うだけで利益が大きく変わってくるからですね。色々調べてみるとAliExpressなどではQMKで公式にはサポートされていないマイコンを搭載した製品があります(QMK公式サポートリスト)。その非公式対応マイコンの一つにAPM32F103というものがあります。今回のタイトルの製品ですね。

他に非公式対応の製品はCH582MのようなWCHのBluetooth対応マイコンなどもあったりするのですが、ここら辺は魔改造した専用ブランチを使って実装する必要があるのに対して、APM32F103は普通のQMKやVIALブランチを使ってファームウェア(FW)を作成できるよいうです。AliExpressで販売されているAPM32F103搭載キーボードをVIAL対応に改造した話というのを書かれている方いました(該当記事)。

記事を拝見した感じだとあまり著者の方はマイコンやプログラミングに詳しくはなさそうなのですが、何かしら小細工すれば動くこと自体は間違いなさそうです。あとは、純粋に興味があったのでAPM32F103について調べてみるのと、実際にボードを作って実験してみようと思います。

結論としてはAPM32F103で問題なく作れます。大量生産する場合、APM32F103を使うのも自然だなと感じました。STM32F103を使うよりも明らかに安いですしね。というわけで以下から本文です。

目次

APM32F103は何者?

これはGeehyというメーカが作っている32bitマイコンで露骨にSTマイクロエレクトロニクス(ST)のSTM32F103を意識したラインナップです。公式サイトはこちら

このサイトを見てみるとラインナップも酷似していることがわかりますね。型番もSTM32F103C8T6に対して同等品がAPM32F103C8T6と後ろの命名規則も一緒です。

簡単に比較してみるとAPM32F103の方が上限のクロックスピードが速かったり(72MHz→96MHz)、ペリフェラルの対応が若干違う(例えば一部でCAN x 2対応)していたりと若干のスペック差があることがわかります。

なお、メインの処理部分はARMコアのCortex-M3だったりとそこらへんは全く同じです。メモリの量もですね。また見た感じレジスタの配置もほとんど同じですね。メモリマップドIOでアドレスもほとんど一緒です。ペリフェラルに違いがあるので、上位グレードなら一部追加になっている配置がありそうですが細かいことは確認していません。

今回は検証でAPM32F103C8T6を使いますが、これに限ってい言うと配置は見た限り一緒です。使わない部分には差があるかもしれませんが…。

というわけでマイコンスペック的にはほとんど上位互換であるような感じです。APM32F103にあってSTM32F103にない機能は無さそうな気がします。

また、価格的には1000個単位だと1.5ドルくらいがSTの想定する正規の価格のようですが、APM32F103は小ロットでも半額から手に入るような感じっぽいので量産するメーカが採用するのも納得だったりします。

STに訴えられないのだろうか

色々調べてみたり実験してみて気づいたのですが、バイナリ互換のようです。インターフェイスが違う部分があるので完全な互換ではないと思うのですが、おそらくその差異のない範囲で使う分には問題なさそうです。そんなことマニュアルにはもちろん書けませんが、STM32F103C8T6で使えるバイナリはAPM32F103C8T6で使えると考えてもよさそうです。その逆は難しい場合はがあるとは思います。例えば動作周波数は上限に違いがあるので96MHzで稼働させるプログラムは怪しいですね。もしかしたら自己責任なら使えるのかもしれませんが、STのマイコンでオーバークロックして使うということがないのでわかりません。

バイナリ互換というのが結構怪しい要素で、いわゆるデッドコピーなのではという気がしてきます。色々海外のフォーラムを見てみると同じようなことを気にしている方が結構います。指摘されているのがST純正のSTM32CubeMXなどといったツールを直接使えることです。ST-LINK v2を使って確認してみましょう。こういうデバイスを使ったり細かく見る際は持っておいた方が良いです。高いものでもないので。

確認してみたところ、STM32F103C8T6だとこんな感じです。

STM32F103C8T6の場合

普通に正規品なので何ら普通に正しい情報が表示されていますね。次にAPM32F103C8T6を見てみましょう。

APM32F103C8T6の場合

Flash Sizeが128KBとおかしいですね。本来は64KBです。出しているDeviceID一緒のようなので、他の要素で区別されていると思うのですが、APM32F103はこれが全て一緒なのではないかと推測します。おそらくピン数さえあっていればOKぐらいの感じで作られているのではないでしょうか。

読み取れる情報が若干間違いがあれど、ST純正のツールにただ乗りできることや、バイナリ互換であることを考えると結構怪しいマイコンな気がします。とはいえ、品番によっては通信インターフェイスが増えていたりすることを見るに、完全に同じ動きをしているわけではなさそうなので、グレー感はありますが黒ではないのでしょう。ホワイトかと言われると違う気はしますが。

怪しい製品だとARMのライセンスも怪しい気がしますが、そこらへんはARMのライセンスが取得されているようで、マイコン表面にも堂々と「arm」の表記が載っています。

APM32F103C8T6、右下にarmの表記

余談ですが、「ARM」と私自身も昔のAdvanced RISC Machine略の大文字で書く文化の人なのですが、現在の表記としては小文字で「arm」と書くのが正規の表記なのでマイコン側の表記は最新で正しいです。

名前ある製品に使われていないか調べてみたところM5Stack用の拡張ボードで採用例がありますね。さすがにここら辺の大手がやばい製品を採用することは稀だと思います。おそらく何かしら裏付けや問題ないというエビデンスをもって採用しているものだと思われます。いちユーザー目線で見ると若干怪しい気もしますが、動作の違いや採用実績という点で個人的には問題ないという判断にしておきます。

基板設計

チャプターをわけましたが、基本的にはボード自体も互換に等しいのでSTM32F103の設計ベースにして設計を行うだけで十分です。互換品だと基本的にマイコン部を置き換えるだけで動くものがほとんどなので当然ですね。通信周りのインピーダンスコントロールをやりつつオシレータあたりの配線を気を付ければ最低限動いてくれるはずです。STM32F103ベースの設計で問題なく動けばAPM32F103はソフト的にだけでなくハード的にも互換があるということになります。

というわけで簡単に作ってみました。

とりあえず実験用に作った自作キーボード基板

STM32CubeProgで認識することと、CubeMXで作ったプログラムが動いたのでやはりバイナリ互換であることは事実として間違いなさそうです。

少し事前情報と違ったのが、NoteでAPM32F103のことを書いていた方の情報だとBootloaderがuf2を使う形式だったとのことだったのですが、そんなことはなかったです。普通にSWDかUARTでUSBブートローダを何かしら書いておかないとUSB経由では書けませんでした。それにはuf2用のブートローダーが書かれていただけの話で、その実は普通にSTM32F103と同じように何かしらブートローダーを書く必要があったということですね。

QMK/VIALの話

これはバイナリ互換なので、boardをSTM32F103として、bootloaderはstm32duinoにしておけば、ベーシックなSTM32F103のQMKファームウェアが作成できると思います。USBブートローダーの書き込みはUARTかSWDで行います。検証のときのことを考えるとST-LINKの方が持っていて便利だと思います。USBブートローダーを書き込み→QMKファームウェアを書き込みでないと動かせないのがSTM32F103の面倒なところです。

VIAL対応に関してもSTM32F103の方法と変わらないので、viblブートローダーを書き込み、その設定でvialファームウェアを作るだけです。ここら辺の話は以下の別記事で書いています。

STM32F103だけ他のキーボードと違って特殊なやり方で対応しないといけないのも互換品のAPM32F103では同じです。

なので、ここら辺を対応すれば問題なく動きます。STM32F103仕様も併せて別で作成して確認してみました。

STM32F103C8T6

使っているときに差は感じられませんでした。そりゃコアも一緒で周波数も一緒で動かせば、バイナリ互換なら一緒のはずですからね。もしかしたらスタートアップの時間とか細かいところは違うのかもしれませんが。

なので、APM32F103を使って自作キーボードを作ることは問題なくできますし、STM32F103とやるべきことが一緒です。なので、製造側に立てば基本的にはマイコンを置き換えるだけでコストダウンが達成できるということになるので、大量生産する企業などではこちらが使われるのが自然だと感じました。何かしらに差があると完成検査とかで時間に差は生まれるかもしれませんが、ちょっとした調整で済むでしょう。

まとめ

APM32F103は普通に使えます。STM32F103の互換品だと考えて間違いなさそうです。ですが、一部ペリフェラルが違ったりするので、完全に互換品というわけではないです。紹介した通り最大動作周波数も違います。

ただ、基本的なレジスタ設定が一緒であることや、Cortex-M3を採用しているなど共通点が多く、単純な自作キーボードに限って言うのであれば、一緒の動きをしているといって問題ないレベルのようです。実際にQMKでSTM32F103の設定で作ったファームウェアをそのまま書き込めることからも基本的にSTM32F103に存在するスペック・インターフェイスでで使う限りはバイナリ互換であると言えます。STM32F103と同様にUSBのブートローダー書き込み→QMKやVIALファームウェアを書き込みという動きも変わっていませんでした。

なので、自作キーボードで使う限りは基本的にSTM32F103の互換品であると言えそうです。加えてハード的にも互換性があるためSTM32F103で設計したものからマイコンを直接置き換えるという使い方ができます。それ故AliExpressなどではAPM32F103を搭載したQMK/VIA/VIAL対応のキーボードが販売されているという理由にも納得がいきます。

ADCを使うようなデバイスでは今のところ実験していませんが、磁気スイッチとホール効果を使った検出のキーボードも試作しているのでどこかで試してみたいですね。この感じからするに普通のキャリブレーションで吸収できる差になってしまいそうな気がします。

以上です。お読みいただきありがとうございました。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です