はじめに
手持ちのPicoCalcでUF2Loaderをインストールして使うと初回起動時はファームウェア選択画面が表示され、選択したファームウェアが起動しました。しかし、それ以降の起動でファームウェア選択画面を表示するキー操作ができない問題が発生しました。そこで新しいBIOSに書き換えたら動作するのではないかと思い、BIOSファイルの書き込みを試しました。PicoCalcへのBIOS書き込みについてまとめました。
検証環境
- macOS : 15.6.1
- MacBook Pro 14インチ 2023
PicoCalcのBIOS
PicoCalcはRaspberry Pi Picoをコアに、LCD、キーボード、SDカードリーダ、スピーカを搭載した昔のポケコンのようなコンピュータです。Raspberry Pi Pico以外の入出力装置はSTM32チップ(CKS32F103Rx)が制御しています。PicoCalcの製品紹介ページ、回路図にその記載があります。
BIOSファイルはPicoCalcのGithubのページ公開されています。自分が購入した時期よりも後に公開されたv1.4があるのでそれをインストールスことにしました。
PicoCalcへのBIOSファイルの書き込み
PicoCalcへのBIOSファイルの書き込み手順はSetting Up Arduino Development for PicoCalc keyboardに記されていますのでこれに従って作業しました。
BIOSファイルの書き込みは次の3つのいずれかの方法で実行できると説明されています。英語の説明ですが必要なツールやファイルをダウンロードして作業します。
- Arduino IDEでソースから構築し、PicoCalcへ書き込む
- 事前コンパイルされたファイルを
stm32flashコマンドでPicoCalcへ書き込む - 事前コンパイルされたファイルをSTM32CubeProgrammerでPicoCalcへ書き込む
このなかでMacからPicoCalcへBIOSファイルを正常に書き込めたのは2番目のstm32flashコマンドを使った場合だけでした。
Arduino IDEとSTM32CubeProgrammerではそれぞれのツールからシリアル経由のSTM32への書き込み時に応答がなく、書き込みできませんでした。
なお、STM32へのBIOSの書き込みにはPicoCalcのマザーボードのDIPスイッチ1をONにする必要があるため、PicoCalcの裏ぶたを外す必要があります。
stm32flashコマンドでの書き込み
stm32flashコマンドはmacOS標準コマンドではないためbrewでインストールしました。下記コマンドでインストールします。
$ brew install stm32flash
BIOSファイルの書き込みの操作手順は英文ドキュメントに示されているので、そのとおりに操作しますがその前に PicoCalcのGithubのページ公開されていBIOSファイルPicoCalc_BIOS_v1.4.binをブラウザでダウンロードしておきます。~/Downloadsフォルダにダウンロードしました。
stm32flashコマンドはMacのUSBシリアルケーブルのデバイスファイル名を指定するのでls /dev/cu.usb*コマンドで調べます。
$ ls /dev/cu.usb*
/dev/cu.usbserial-210
今回はデバイスファイル名/dev/cu.usbserial-210を使います。この名前はケーブルを接続するポートで名前が変わります。
BIOSファイルのダウンロード、USBシリアルケーブルのデバイスファイル名がわかったので次の手順でBIOSファイルの書き込みを実行します。
- PicoCalcの裏ぶたを開ける
- DIPスイッチ1を
ONにします(上ににスライド) - MacとPicoCalcをUSB タイプCケーブルでで繋ぐ(Raspberry Pi PicoのUSB端子ではないので注意)
- ターミナルで次のコマンドを実行して、BIOSファイルをPicoCalcに書き込みます
$ cd ~/Downloads $ sudo stm32flash -w PicoCalc_BIOS_v1.4.bin -v -S 0x08000000 /dev/cu.usbserial-xxx - マザーボードのDIPスイッチ1をOFFに戻します(下にスライドする)
- USBケーブルを外す
- PicoCalcの裏ぶたを閉じる
実際の実行結果を以下に示します。
$ cd ~/Downloads
$ sudo stm32flash -w PicoCalc_BIOS_v1.4.bin -v -S 0x08000000 /dev/cu.usbserial-210
stm32flash 0.7
http://stm32flash.sourceforge.net/
Using Parser : Raw BINARY
Location : 0x8000000
Size : 65536
Interface serial_posix: 57600 8E1
Version : 0x22
Option 1 : 0x00
Option 2 : 0x00
Device ID : 0x0410 (STM32F10xxx Medium-density)
- RAM : Up to 20KiB (512b reserved by bootloader)
- Flash : Up to 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote and verified address 0x08010000 (100.00%) Done.
以上でPicoCalcにBIOSファイルが書き込まれ、起動時にUF2Loaderのメニュー表示ができるようになりました。
この操作をする時はPicoCalcのバッテリを外しておいたほうが良いようです。
さいごに
Arduino IDEやSTM32CubeProgrammerで書き込みに失敗した後、ファームウェアの起動ができなかったりと文鎮になってしまったかと焦ってしまいましたが何とか回復し、作業を完了できました。これらのツールで書き込みに失敗したのは原因を特定できていません。権限の問題だったのかもしれないと思っています。
Windowsで実行したら上手くいくのかな?