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