STLinkV2やFTDI232Hのデバッグプルーブは、STLINKV2_1とは異なり、VCOMがついていません。しかし、Blue Pillの場合、VCOM付のCMSIS-DAP SWD/JTAG プローブにすることができるようなのでやってみました。別途シリアル変換ケーブルなどを用意する必要がなく便利なので本稿を上げた次第です。
まず、CMSIS-DAPプローブにするためのバイナリーをダウンロードします。
#remap版 wget https://github.com/RadioOperator/STM32F103C8T6_CMSIS-DAP_SWO/blob/master/build/F103-DAP-SWO-CDC-BLUEPILL-SWD_REMAP.hex #pb8pb9版 wget https://github.com/RadioOperator/STM32F103C8T6_CMSIS-DAP_SWO/blob/master/build/F103-DAP-SWO-CDC-BLUEPILL-SWD_PB8PB9.hex続いて、ダウンロードしたバイナリーをBluePillに焼き込みますが、Windows環境下では方法として以下の様にいくつかあります。
1. 別にあるSTLINKを使う場合(Cube Programmer(STLink mode)/STLINK utility/Openocd経由) 2. 別にあるFT232Hを使う場合(OpenOCD経由もしくはCube Programmer(UART mode)経由/Flash Loader Demonstrator経由) 3. シリアルポート接続し、Flash Loader Demonstrator経由/Cube Programmer(UART mode)経由 4. FT232Rを使い、OpenOCD(注4)もしくはFlash Loader Demonstrator経由/Cube Programmer(UART mode)経由 注4. OpenOCDはビルドが必要な場合が多く、Windowsでつかう場合はzadigでドライバをWINUSBにする必要がある。 また、FT232RはzadigでドライバをWinUSBにするとシリアルポートとしてつかえなくなる。追記:2021/02/20 こちらのソフトをつかうと、シリアルドライバとWinUSBドライバの切り替えを比較的簡単にできます。 Flash loader demonstrator/Cube Programmer(UART mode)はUSBシリアル変換ドングル・USBシリアル変換器/ケーブルによっては書き込めない場合があるので、注意してください。参考までに、Aliexpressだと一番安いのは、3のUSBシリアル変換ドングル/ケーブルですが、STLINK-V2クローンも似たような値段(2ドル前後)で、送料込みとなるとほとんど差はありません。ですが注意点があります:FT232RLの場合だと、USB mini のものが多く、USB mini ケーブルを国内で調達すると300-500円も別途かかってしまうので、usbシリアル変換器はbluepillとおなじ100均で調達できるusb micro 対応のcp210xがおすすめです。つまりどうしてもクローンを使いたくない場合は、シリアルポート経由で書き込み実績のあるCP2102とBluePill/BlackPill二個以上(一つは開発用、一つはCMSIS-DAPデバッガとして、CP210xは予備のファーム書込および予備のシリアル通信テスト用。これに加えてジャンパー線(メス-メス)を含めると(送料込みで1000円前後なので)コスパがよいのでおすすめです。 閑話休題...(追記:一旦CMSIS-DAPを焼きこんだ後、他のプログラムを書き込む場合、usbポートを左側にして上側のジャンパー(Boot0)を1側・右側にすると書き込めます。追記2:Flash Loader DemonstratorあるいはCube Programmer(UART mode)を使う場合も、前述と同じく、Boot0を一側・usbポートを左側にして右側にすると書き込めます。書き込みが済んだらかならずBoot0を0側に戻してください。) 書き込みが済んだら、早速接続してみます。 接続は以下の通りです。
#REMAP版 Pin BP STM32 =================== TDI---PB5 ---PA15 TCK---PA14---PA14 TMS---PA13---PA13 TDO---PB7 ---PB3 RST---PB6 ---RST GND---GND ---GND 33v---3.3 ---3V(BluePillから給電を行う場合) #PB8PB9版 Pin BP STM32 =================== TDI---PB5 ---PA15 TCK---PB8 ---PA14 TMS---PB9 ---PA13 TDO---PB7 ---PB3 RST---PB6 ---RST GND---GND ---GND 33v---3.3 ---3V(BluePillから給電を行う場合)Windows上ではシリアルポートとして認識されますが、CMSIS-DAPプローブとしてももちろん使えます。 また、Linuxでは以下の様に認識されます。
[66380.711437] usb 3-3.3: new full-speed USB device number 43 using ehci-pci [66380.942168] usb 3-3.3: New USB device found, idVendor=0483, idProduct=572a, bcdDevice= 1.00 [66380.942180] usb 3-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [66380.942187] usb 3-3.3: Product: CMSIS-DAP [66380.942193] usb 3-3.3: Manufacturer: CMSIS-DAP by ARM [66380.942199] usb 3-3.3: SerialNumber: 0001A0000000 [66380.944895] cdc_acm 3-3.3:1.0: ttyACM0: USB ACM device [66380.950380] hid-generic 0003:0483:572A.0008: hiddev0,hidraw0: USB HID v1.00 Device [CMSIS-DAP by ARM CMSIS-DAP] on usb-0000:00:16.2-3.3/input2前述の通り、デバッグプローブと同時にttyACMが使えるのがGoodですね。 追記1:ユーザ権限で使用する場合、udevの設定が必要です。まず先にttyACM用の設定は以下の様になります。
$ sudo vi /etc/udev/rules.d/99-usb-serial.rules ACTION=="remove", GOTO="serial_end" SUBSYSTEM!="tty", GOTO="serial_end" KERNEL=="ttyUSB*", MODE="0666" KERNEL=="ttyACM*", MODE="0666"続いて、cmsis-dapをユーザ権限でつかえるようにする設定は、以下の様になります。
$ sudo vi /etc/udev/rules.d/99-usb-hidraw.rules KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", GROUP="plugdev"udevのルールを設定したら、udevの設定を反映させます。
$ sudo udevadm triggerなお、CMSIS-DAPプローブ化したBluePillのシリアルピンは
TX ---- PA2 RX ---- PA3ですので、TXをターゲットのRXに、RXをターゲットのTXに接続してください。 参考までに、OpenOCDをlinuxで実行するとこのようになります。
$ /usr/bin/openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg Open On-Chip Debugger 0.11.0-rc1-snapshot (2021-01-17-16:38) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html DEPRECATED! use 'adapter driver' not 'interface' Info : auto-selecting first available session transport "swd". To override use 'transport selectなお、jtagは(追記2021/02/07:本ファームウェアでは)ボード側にダンピング抵抗が入っているもの/入っていないものいずれも(追記2021/02/20)接続確認できました。jtag接続時、ターゲット側に単独で電源があると安定して接続できました。また、BluePillのldo経由の3.3vではなくUSBからの5Vを渡す場合も安定して接続できました。追記のファームウェアでも動作確認できましたが、前述と同じくターゲット側の電源が不足不良の場合、接続が安定しないのは同じでした。(追記1:Keil5では本ファームウェアで本プローブのSWO機能を使えました。追記2:別途のUSBシリアル経由ですが、OpenOCを使い、プログラム上にてSWO出力を有効にしたところ、swo出力確認ができました。) 今回は以上です。それでは。 ============================================== 追記訂正 2021/02/20:jtag接続時、電圧不足あるいは電源不良の場合、jtag swd接続ともに安定しません。下記のファームの場合、BluePill単体でたまたまjtag接続ができているだけであり、BluePill単体でのターゲットへの電源供給は不足する場合があるので、なんらかの形で安定した電源をターゲット側に供給しなければ、こちらのファームウェアをつかっても、swd接続でもjtag接続でも接続が不安定になる場合がありますので、この場をお借りして訂正の上、お詫び申し上げます。'. DEPRECATED! use 'adapter speed' not 'adapter_khz' DEPRECATED! use 'adapter srst delay' not 'adapter_nsrst_delay' Info : Listening on port 6666 for tcl connections Info : Listening on port 4444 for telnet connections Info : CMSIS-DAP: SWD Supported Info : CMSIS-DAP: JTAG Supported Info : CMSIS-DAP: FW Version = 2.0.0 Info : CMSIS-DAP: Interface Initialised (SWD) Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 1 nTRST = 0 nRESET = 1 Info : CMSIS-DAP: Interface ready Info : clock speed 1000 kHz Info : SWD DPIDR 0x1ba01477 Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints Info : starting gdb server for stm32f1x.cpu on 3333 Info : Listening on port 3333 for gdb connections
wget https://github.com/RadioOperator/STM32F103C8T6_CMSIS-DAP_SWO/blob/master/build/F103-DAP-SWO-CDC-STLINK_V2B-SWO_PA10.hex1. ターゲット(STM32f1x/f4x)との結線
PA10 ------------ JTDO/SWO(to target PB3) PB13 ------------ JTCK/SWClK(to target PA14) PB14 ------------ JTMS/SWDIO(to target PA13) PB8 ------------ JTDI(to target PA15) PB6 ------------ RST(to target RST) GND ------------ GND(to target GND) 3V3 ------------ 3V3(必要ならto target 3V3) PA2 ------------ TX(to target RX) PA3 ------------ RX(to target TX)2. 前述の"F103-DAP-SWO-CDC-STLINK_V2B-SWO_PA10.hex"をBluePillに書き込み、OpenOCDでjtag接続の確認。
$ openocd.exe -f interface/cmsis-dap.cfg -c "transport select jtag" -f target/stm32f1x.cfg Open On-Chip Debugger 0.10.0 (2020-07-29) [https://github.com/sysprogs/openocd] Licensed under GNU GPL v2 libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3 For bug reports, read http://openocd.org/doc/doxygen/bugs.html jtag Info : Listening on port 6666 for tcl connections Info : Listening on port 4444 for telnet connections Info : CMSIS-DAP: SWD Supported Info : CMSIS-DAP: JTAG Supported Info : CMSIS-DAP: FW Version = 2.0.0 Info : CMSIS-DAP: Interface Initialised (JTAG) Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 0 nTRST = 0 nRESET = 1 Info : CMSIS-DAP: Interface ready Info : clock speed 1000 kHz Info : cmsis-dap JTAG TLR_RESET Info : cmsis-dap JTAG TLR_RESET Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b (ARM Ltd.), part: 0xba00, ver: 0x3) Info : JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020 (STMicroelectronics), part: 0x6410, ver: 0x1) Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints Info : starting gdb server for stm32f1x.cpu on 3333 Info : Listening on port 3333 for gdb connections追記(2021/02/10)は以上です。
The best Article that I have never seen before with useful content and very informative.Thanks for sharing the info.
返信削除JTAG