Seeed K.K.の松岡です。
reTerminalにはSTM32G030というマイコンを内蔵していて、ディスプレイ(LCD)を制御するプログラムが入っています。(以下、「STM32ファームウェア」と書きます。)
STM32ファームウェアは製品製造時に書き込んでいるので、通常は触る必要ありませんが、この部分のバグに遭遇してしまい、アップデートが必要になることがあります。
製品製造時に書き込まれているバージョンは、ここで確認できます。
ここでは、STM32ファームウェアのバージョンを確認する方法と、STM32ファームウェアをアップデートする手順を書いておきます。
概要
STM32G030に書きこまれているSTM32ファームウェアのバージョンを確認して、必要に応じて、新しい(古い?)STM32ファームウェアにアップデートします。バージョン確認やアップデートするときは、これらの操作がデバイスドライバと競合しないように、デバイスドライバの読み込みを停止しておきます。
STM32ファームウェアがV1.7以降はi2ctransferコマンドでバージョンの取得、stm32flashコマンドでアップデートできますが、V1.6以前だとバージョンは正確に知ることができず、アップデートに追加の配線が必要です。(つまり手間がかかる)
V1.6以前
- RPi GPIOとSTM32G030を結線(リード線2本)する。
- OpenOCDコマンドでSTM32ファームウェアを書き込む。
V1.7以降
- i2ctransferコマンドとstm32flashコマンドでSTM32ファームウェアを書き込む。
デバイスドライバの読み込みを停止/復旧
デバイスドライバの読み込みを停止したいときは、/boot/config.txtに含まれているdtoverlay=reTerminalをコメントアウト(先頭に#を加える)して、reTerminalを再起動してください。
復旧したいときは、コメントアウトを戻して再起動してください。
$ sudo vi /boot/config.txt $ sudo reboot
STM32ファームウェアのバージョンを確認
実施前に、デバイスドライバの読み込みを停止しておくこと!
i2ctransferコマンドで、STM32G030にバージョン番号を問合せしてください。
表示される1バイト目がメジャーバージョン、2バイト目がマイナーバージョンです。例えば、0x01 0x08
と表示されたときはv1.8です。'0x01 0x00'のように、v1.6以前が表示されたときは、v1.6以前なのでご注意を。(v1.0ではない。)
$ i2ctransfer -y 1 w1@0x45 0x97 r2
STM32ファームウェアをアップデート(v1.6以前)
wgetコマンドで、OpenOCDをネットからダウンロードしてください。
32bit OSの場合:
$ wget -O - 'https://github.com/xpack-dev-tools/openocd-xpack/releases/download/v0.11.0-2/xpack-openocd-0.11.0-2-linux-arm.tar.gz' | tar zxvf -
64bit OSの場合:
$ wget -O - 'https://github.com/xpack-dev-tools/openocd-xpack/releases/download/v0.11.0-2/xpack-openocd-0.11.0-2-linux-arm64.tar.gz' | tar zxvf -
STM32ファームウェアもネットからダウンロードしてください。
バージョンによってダウンロードURLが違います。ReleaseのAssetsを確認して、書き込みたいバージョンのURLからダウンロードしてください。
$ wget https://github.com/Seeed-Studio/seeed-linux-dtoverlays/releases/download/2022-05-29-reTerminal-V1.9/STM32G030F6_R2.bin
下図のとおり、reTerminal基板のSWCLKとSWDIOのパッドを、RPi GPIOのGPIO11とGPIO25に結線してください。
OpenOCDコマンドで、STM32ファームウェアをSTM32G030に書きこんでください。
** Programming Finished **
と** Verified OK **
が表示されれば成功です。
$ ./xpack-openocd-0.11.0-2/bin/openocd -f interface/sysfsgpio-raspberrypi.cfg -c "transport select swd" -f target/stm32g0x.cfg -c "program STM32G030F6_R2.bin verify 0x08000000;shutdown"
poweroffコマンドでシャットダウンしてください。
$ sudo poweroff
必要に応じて、STM32ファームウェアのバージョンを確認した後に、デバイスドライバの読み込みを復旧してください。
STM32ファームウェアをアップデート(v1.7以降)
wgetコマンドで、stm32flashをネットからダウンロードしてください。
$ wget https://github.com/Seeed-Studio/seeed-linux-dtoverlays/releases/download/2021-08-20-reTerminal-V1.7/stm32flash $ chmod +x stm32flash
STM32ファームウェアもネットからダウンロードしてください。
バージョンによってダウンロードURLが違います。ReleaseのAssetsを確認して、書き込みたいバージョンのURLからダウンロードしてください。
$ wget https://github.com/Seeed-Studio/seeed-linux-dtoverlays/releases/download/2022-05-29-reTerminal-V1.9/STM32G030F6_R2.bin
i2ctransferコマンドとstm32flashコマンドで、STM32ファームウェアをSTM32G030に書きこんでください。
$ i2ctransfer -y 1 w2@0x45 0x9b 0x01 $ ./stm32flash -a 0x56 -o /dev/i2c-1 $ ./stm32flash -a 0x56 -w STM32G030F6_R2.bin -v -g 0x0 /dev/i2c-1 $ i2ctransfer -y 1 w2@0x45 0x9b 0x00
poweroffコマンドでシャットダウンしてください。
$ sudo poweroff
必要に応じて、STM32ファームウェアのバージョンを確認した後に、デバイスドライバの読み込みを復旧してください。
変更履歴
日付 | 変更者 | 変更内容 |
---|---|---|
2021/11/24 | 松岡 | 作成 |
2024/1/11 | 松岡 | STM32ファームウェアのダウンロードURLを更新 |
2024/1/11 | 松岡 | 64bit OSの場合のOpenOCDダウンロードコマンドを追記 |