前回までで CubeMX Programmer の説明は完了しました。...が、僕みたいに何で GUI を操作しなきゃいけないんだ!! という重症患者がいると思いますので、そんじゃ、CLI で書き込みする方法を模索してやんよというのが本記事になります。変態集まれ。
Mac における CLI ツールの居場所
お察しの通り、CLI ツールが存在します。その場所は
/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin です。
はい、右にはみ出ました。
結構深いところに、STM32_Programmer_CLI
というまさにそれな実行バイナリがあります。これを実行すれば良いのですね。
以下、このディレクトリを PATH に含めていることを仮定します。
さてこのコマンドでどうやるかですが、とりあえず -h
でヘルプを見てみましょう。色々ズラッと出てきます。中でも「SWD」という項目があるのですが、実際 CMSIS-DAP では無理でした。やっぱり ST-Link 限定なんでしょうかね。
書き込み
動作確認したのは UART のみですのでご了承を。以下のコマンドで書き込み & リセットを行えます。
$ STM32_Programmer_CLI -c port=/dev/cu.usbmodem1422 -d ~/path/to/binary 0x8000000 -s
-c
でインターフェイスと接続、port=
とすることで接続先ポートを選べます。ここに tty を指定しても 出来たようでした。続いてデータの書き込み(ダウンロード)です。こちらは -d
で指定でき、続けてバイナリ(.bin or .elf)のパスを指定します。更に続けて、Flash 領域の先頭アドレスを指定です。これは固定でいいでしょう。最後は必須ではないのですが、-s
を付けることで書き込み後のリスタート(リセット)を指示します。以上が書き込みコマンドです。
実行結果は一部抜粋で以下のようになります。
-------------------------------------------------------------------
STM32CubeProgrammer v1.0.0
-------------------------------------------------------------------
Serial Port /dev/tty.usbmodem1422 is successfully opened.
Port configuration: parity = even, baudrate = 115200, data-bit = 8,
stop-bit = 1.0, flow-control = off
Activating device: OK
Chip ID: 0x438
BootLoader protocol version: 3.1
Device name: STM32F303x4-x6-x8/F328xx/F334xx
Device type: MCU
Device CPU : Cortex_M4
...
Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 11]
Download in Progress:
[==================================================] 100%
File download complete
Time elapsed during the download operation is: 00:00:03.763
RUNNING Program ...
Address: : 0x8000000
Start operation achieved successfully
セクタの消去(イレース)
-e
でイレース指定です。続けて all
とすると全体イレースとなり、この代わりにセクタ番号を指定すると、その領域のみ削除がされるようです(全体イレース以外は動作が確認できなかった)。
以下は全体イレースの画面です。
-------------------------------------------------------------------
STM32CubeProgrammer v1.0.0
-------------------------------------------------------------------
Serial Port /dev/tty.usbmodem1422 is successfully opened.
Port configuration: parity = even, baudrate = 115200, data-bit = 8,
stop-bit = 1.0, flow-control = off
Activating device: OK
Chip ID: 0x438
BootLoader protocol version: 3.1
Device name: STM32F303x4-x6-x8/F328xx/F334xx
Device type: MCU
Device CPU : Cortex_M4
MASS ERASE ...
Mass erase command correctly executed.
Note: if there's any flash protection, it will not be erased.
オプションバイトの取得
不揮発性のレジスタによるオプションバイトの取得も出来ます。コマンドは以下。displ
で表示ということっぽいです。
$ STM32_Programmer_CLI -c port=/dev/cu.usbmodem1422 -ob displ
んで、実行結果の一部はこんな感じに。
OPTION BYTES BANK: 0
Read Out Protection:
RDP : 0xAA (Level 0, no protection)
User Configuration:
WDG_SW : 0x1 (Software watchdog)
nRST_STOP : 0x1 (No reset generated)
nRST_STDBY : 0x1 (No reset generated)
nBOOT1 : 0x1 (Boot from system flash when BOOT0=1)
VDDA_MONITOR : 0x1 (VDDA power supply supervisor enabled)
SRAM_PE : 0x1 (RAM parity check disabled)
User Data:
Data0 : 0xFF (0xFF)
Data1 : 0xFF (0xFF)
Write Protection:
nWRP0 : 0x1 (Write protection not active on this sector)
nWRP1 : 0x1 (Write protection not active on this sector)
nWRP2 : 0x1 (Write protection not active on this sector)
nWRP3 : 0x1 (Write protection not active on this sector)
...
とこんな感じに各ビットの意味も表示してくれて、非常に見やすく出来ています。
以上、狂ったコマンドライン屋さん(?)のための記事でしたー。<完>