chakokuのブログ(rev4)

テック・コミック・ごくまれにチャリ

cygwin環境でST Link toolをビルド

Cygwin環境でST Link Toolを使いたいのでビルドしてみる。かなり場当たり的なやっつけ仕事。。
libusbとstlinkのソース一式をGitHubからDL
cygwin環境で展開、stlinkのディレクトリで、cmake -> makeを実行

cmake -D LIBUSB_INCLUDE_DIR=~/tech/arm/stm32/libusb/include/libusb-1.0  -D LIBUSB_LIBRARY=~/tech/arm/stm32/libusb/MinGW64/dll/libusb-1.0.dll
make

st-flash.exe , st-link.exeはバイナリはできたが、、実行するとライブラリがないと怒られる。LD_LIBRARY_PATHで指定しても見つけられないエラーが続いた。
調べるのが手間なので、、st-flash.exe , st-link.exeを置いているのと同じディレクトリに、libusb-1.0.dll  を置いた。
すると動作した。

$ ./st-info.exe --flash
0x40000
$ ./st-info.exe --chipid
0x0423
$ ./st-info.exe --probe
Found 1 stlink programmers
 serial: 18470xxxxxxxxxxxx4b4e00
openocd: "\x18\x47\x04\x02\x32\x12\x43\x53\x35\x4b\x4e\x00"
  flash: 262144 (pagesize: 16384)
   sram: 65536
 chipid: 0x0423
  descr: F4 device (low power)  // なぜかターゲットの電源が落ちる

st-flash.exeを使うことで、Make等のバッチ実行でファームをフラッシュに焼くことが可能になる。。はず。。
試しにLチカプログラムを焼いてみた。
またまた、coreidが異常と怒られる(unknown coreid 2ba01477)。st-flashに対して、手パッチが必要かも。

$ ~/tech/arm/stm32/stlink/st-flash.exe write ../bin-stm32-smallest/blink.bin 0x08000000
st-flash 1.3.1
2020-03-18T23:36:46 INFO src/common.c: Loading device parameters....
2020-03-18T23:36:46 INFO src/common.c: Device connected is: F1 Medium-density device, id 0x20036410
2020-03-18T23:36:46 INFO src/common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
2020-03-18T23:36:46 INFO src/common.c: Attempting to write 6096 (0x17d0) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08001400 erased
2020-03-18T23:36:46 INFO src/common.c: Finished erasing 6 pages of 1024 (0x400) bytes
2020-03-18T23:36:47 INFO src/common.c: Starting Flash write for VL/F0/F3 core id
2020-03-18T23:36:47 ERROR src/flash_loader.c: unknown coreid, not sure what flash loader to use, aborting! coreid: 2ba01477, chipid: 410
2020-03-18T23:36:47 WARN src/flash_loader.c: Failed to write flash loader to sram!
2020-03-18T23:36:47 ERROR src/common.c: stlink_flash_loader_init() == -1
stlink_fwrite_flash() == -1

st-flashに手パッチを当てろという記事あり(flash_loader.c か)
CKS32: Unable to flash STM32F103C8T6 with stlink 1.5.1.1 · Issue #833 · texane/stlink · GitHub

■追記
chip_id自体はchipid.hにSTLINK_CHIPID_STM32_F1_MEDIUM として定義済みだが、ソース内(flash_loader.c のstlink_flash_loader_write_to_sram関数)にそのマクロが使われていなかった。サポートしていないから外されているように思う(推測)。試しに、stm32vlの判断ルーチンにSTLINK_CHIPID_STM32_F1_MEDIUM を加えた。

            || sl->chip_id == STLINK_CHIPID_STM32_F334
   	    || sl->chip_id == STLINK_CHIPID_STM32_F1_MEDIUM // add for BluePill
    ) {
        loader_code = loader_code_stm32vl;
        loader_size = sizeof(loader_code_stm32vl);

結果、FLASHに書き込みが正常に行えてLチカが動作

$ ./st-flash.exe write miniblink.bin 0x08000000
st-flash 1.3.1
2020-03-20T22:20:41 INFO src/common.c: Loading device parameters....
2020-03-20T22:20:41 INFO src/common.c: Device connected is: F1 Medium-density device, id 0x20036410
2020-03-20T22:20:41 INFO src/common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
2020-03-20T22:20:41 INFO src/common.c: Attempting to write 284 (0x11c) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08000000 erased
2020-03-20T22:20:42 INFO src/common.c: Finished erasing 1 pages of 1024 (0x400) bytes
2020-03-20T22:20:42 INFO src/common.c: Starting Flash write for VL/F0/F3 core id
2020-03-20T22:20:42 INFO src/flash_loader.c: Successfully loaded flash loader in sram
  0/0 pages written
2020-03-20T22:20:42 INFO src/common.c: Starting verification of write complete
2020-03-20T22:20:42 INFO src/common.c: Flash written and verified! jolly good!

■関連URL
GitHub - texane/stlink: stm32 discovery line linux programmer
libusb