reTerminalのSTM32ファームウェアのバージョン確認とアップデート

Seeed K.K.の松岡です。

reTerminalにはSTM32G030というマイコンを内蔵していて、ディスプレイ(LCD)を制御するプログラムが入っています。(以下、「STM32ファームウェア」と書きます。)

f:id:matsujirushix:20211124135544p:plain

STM32ファームウェアは製品製造時に書き込んでいるので、通常は触る必要ありませんが、この部分のバグに遭遇してしまい、アップデートが必要になることがあります。

製品製造時に書き込まれているバージョンは、ここで確認できます。

ここでは、STM32ファームウェアのバージョンを確認する方法と、STM32ファームウェアをアップデートする手順を書いておきます。

概要

STM32G030に書きこまれているSTM32ファームウェアのバージョンを確認して、必要に応じて、新しい(古い?)STM32ファームウェアにアップデートします。バージョン確認やアップデートするときは、これらの操作がデバイスドライバと競合しないように、デバイスドライバの読み込みを停止しておきます。

STM32ファームウェアがV1.7以降はi2ctransferコマンドでバージョンの取得、stm32flashコマンドでアップデートできますが、V1.6以前だとバージョンは正確に知ることができず、アップデートに追加の配線が必要です。(つまり手間がかかる)

V1.6以前

  1. RPi GPIOとSTM32G030を結線(リード線2本)する。
  2. OpenOCDコマンドでSTM32ファームウェアを書き込む。

V1.7以降

  1. i2ctransferコマンドとstm32flashコマンドでSTM32ファームウェアを書き込む。

デバイスドライバの読み込みを停止/復旧

デバイスドライバの読み込みを停止したいときは、/boot/config.txtに含まれているdtoverlay=reTerminalをコメントアウト(先頭に#を加える)して、reTerminalを再起動してください。
復旧したいときは、コメントアウトを戻して再起動してください。

$ sudo vi /boot/config.txt
$ sudo reboot

f:id:matsujirushix:20211124131959p:plain

STM32ファームウェアのバージョンを確認

実施前に、デバイスドライバの読み込みを停止しておくこと!

i2ctransferコマンドで、STM32G030にバージョン番号を問合せしてください。

表示される1バイト目がメジャーバージョン、2バイト目がマイナーバージョンです。例えば、0x01 0x08と表示されたときはv1.8です。'0x01 0x00'のように、v1.6以前が表示されたときは、v1.6以前なのでご注意を。(v1.0ではない。)

$ i2ctransfer -y 1 w1@0x45 0x97 r2

f:id:matsujirushix:20211124132546p:plain

STM32ファームウェアをアップデート(v1.6以前)

wgetコマンドで、OpenOCDをネットからダウンロードしてください。

$ 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 -

STM32ファームウェアもネットからダウンロードしてください。
バージョンによってダウンロードURLが違います。ReleaseのAssetsを確認して、書き込みたいバージョンのURLからダウンロードしてください。

$ wget https://github.com/Seeed-Studio/seeed-linux-dtoverlays/releases/download/2021-09-13-reTerminal-V1.8/STM32G030F6_R2.bin

下図のとおり、reTerminal基板のSWCLKSWDIOのパッドを、RPi GPIOのGPIO11GPIO25に結線してください。

f:id:matsujirushix:20211124180445p:plain

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"

f:id:matsujirushix:20211124133740p:plain

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/2021-09-13-reTerminal-V1.8/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 松岡 作成