はじめに
M5StackにI2Cで接続して使うUnit Encoderを入手しました。
商品ページによると、どうやらファームウェアを書き換えることができるとあります。それならばと書き換えてにチャレンジしてみました。
ファームウェア
GitHubに、説明とバイナリファイルがおいてあります。基本的にこのとおり進めていきました。I2Cプロトコルマップをみると、MODEとRESETが追加されているとあります。カウンターの値を書き込めるのが、地味に嬉しい追加機能です。
V1.1のファームウェアをダウンロードします。
Unit Encoder分解
分解といってもネジひとつはずすだけです。基板にSTM32F030が実装されています。写真上部のスルーホールがフラッシュするためのピンに繋がっているので、ここにライターを接続します。
ライター
本来であればSTMicroelectronics社のSTLINKを使って書き換えます。まあまあの値段でして、私は所有していません。そこでどうするかというと、安いコンパチのSTLINK/V2を使用します。数百円程度で手に入ります。
検索したら、いろいろなところで売ってますね。信頼できるのかどうかはご自身で判断してください。
フラッシュ
フラッシュにはSTM32CubeProgが必要です。STLINKとUnit Encoderを表を参考に繋いでください。まちがえて3.3Vを5Vにしがちですので注意しましょう。
STLINK | Encoder |
---|---|
(1) RST | R |
(2) SWCLK | C |
(4) SWDIO | D |
(6) GND | G |
(8) 3.3V | V |
ジャンパーワイヤーを使いますが、スルーホールにはんだ付けはしたくありません。バラバラのワイヤーをまとめるため、ピンソケットに挿してまとめました。マスキングテープで留めてもいいかもしれません。
気合で手でおさえます。このままGitHubの説明に従ってSTM32CubeProgで書き込みます。
基板を手でおさえながら、STLINKをPCに接続し、アプリを操作してフラッシュ。これがなかなかうまくいかず、10回目くらいで成功しました😅
I2Cレジスタマップ
GitHubの説明にひとつだけ追加しています。それはRGBのLED NUMを0にすると、2つのLEDをまとめてセットできます。exampleのソースコードには書いてあるのに、なぜかドキュメントには書いてありません。
OPERATION | REG MAP | 0 | 1 | 2 | 3 |
---|---|---|---|---|---|
MODE (W) | 0x00 | 0=PULSE 1=AB |
|||
COUNTER (R/W) | 0x01 | COUNTER VALUE L |
H |
||
SWITCH (R) | 0x02 | SWITCH 0 or 1 |
|||
RGB (W) | 0x03 | LED NUM 0, 1, 2 |
R | G | B |
RESET | 0x04 | 1 >= RESET COUNTER |