スキップしてメイン コンテンツに移動

Blue Pill (stm32f103c8t6)をVCOM付のCMSIS-DAP SWD/JTAG デバッグプローブにする

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 '.
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
なお、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接続でも接続が不安定になる場合がありますので、この場をお借りして訂正の上、お詫び申し上げます。
wget https://github.com/RadioOperator/STM32F103C8T6_CMSIS-DAP_SWO/blob/master/build/F103-DAP-SWO-CDC-STLINK_V2B-SWO_PA10.hex
1. ターゲット(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)は以上です。

コメント

  1. The best Article that I have never seen before with useful content and very informative.Thanks for sharing the info.
    JTAG

    返信削除

コメントを投稿

このブログの人気の投稿

Hyper-V Server2019にワークグループ環境下でWindows10(1809)から接続

Hyper-V server 2019に、ワークグループ環境にてWindows10(1809)から接続してみました。Windows10にHyper-V管理ツールがインストールされていることと、Hyper-V Serverをインストール済であることが前提です。以下、Hyper-V serverは名前がHyperVSV、アドレスは192.168.1.110としています。 まず、Hyper-V server上で、powershellを起動し、以下のコマンドを入力します。 Enable-WSManCredSSP -Role Server -Force 続いて、クライアントのWindows10のpowershell で以下のコマンドを入力します。 winrm quickconfig -Force Enable-WSManCredSSP -Role Client -DelegateComputer * -Force さらに、クライアントマシンで、gpedit(グループポリシーエディタ)を起動し、以下の要領でポリシーを設定します。 a. [コンピューターの構成]->[管理テンプレート]->[システム]->[資格情報の委任]->[NTLMのみのサーバー認証で新しい資格情報の委任を許可する] を有効にし、サーバを一覧に追加[表示...]ボタンをクリックして、「WSMAN/*」を追加 b. [コンピューターの構成]->[管理テンプレート]->[システム]->[資格情報の委任]->[NTLM のみのサーバー認証で保存された資格情報の委任を許可する] を有効にし、サーバを一覧に追加[表示...]ボタンをクリックして、「*」を追加 また、名前解決できるように、(notepadを管理者権限で実行し)C:\Windows\System32\Drivers\etc\hostsにサーバ名とIPアドレスの対を追加。 192.168.1.110 HyperVSV 最後に、Hyper-Vマネージャーを起動し、Windows10からHyper-V サーバに接続します。手順は以下の通りです。 「サーバーに接続」->コンピュータの選択->別のコンピューターに[HyperVSV]と入力し、[別のユーザーとして接続する

wsdd を使ってSamba サーバをネットワークに表示

Windows 10のアップデートで、セキュリティー対応のため、smbv1がデフォルトではインストールされなくなり、Samba serverがエクスプローラーのネットワークに表示されなくなってしまいました。そこで、いくつか方法を調べたのですが、linuxでwsdの実装がないか探したところ、 https://github.com/christgau/wsdd が、見つかりましたので、さっそくインストールしてみました。まだパッケージにはないようですが、インストール自身は簡単です。wsdd自体は以下のように取得し、linkを張っておきます。 cd /usr/local/bin/ sudo wget https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py sudo chmod 755 wsdd.py sudo ln -sf wsdd.py wsdd こちらのsambaサーバはDebianなので、/etc/systemd/system/wsdd.serviceは以下のようにしました。 [Unit] Description=Web Services Dynamic Discovery host daemon Requires=network-online.target After=network.target network-online.target multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/wsdd -d MYDOMAIN [Install] WantedBy=multi-user.target wsdd -d MYDOMAINのところを、環境にあわせて書き換えてください。 次に、systemdに登録・起動テストを行います。 systemctl enable wsdd systemctl start wsdd 起動に成功すると、エクスプローラーのネットワークに表示されます。  なおこのwsddはpython3が必要です。一度試してみてください。SMBv1/CIFSを停止していても、大丈夫です。 cで書かれたほかのwsddの実装もあるようなので、いずれパッケージになるかもしれませ

フレッツ光クロス:MAP-E ROUTER by Debian Box (iptables)

フレッツ光クロスがようやく開通したので、Debianにてrouterを構成し接続してみました。なお、プロバイダーを選ぶにあたっては、IPoE方式がそれぞれ異なるため検討したところ、IPoEでは、MAP-Eでもv6plusとocnバーチャルコネクトがあり、前者がポート数240なのに対し、後者は約4倍のポート数が使えるようなネットの情報をみて、OCNバーチャルコネクトを選択しました。(プロバイダーとしてはぷららです。なおDS-LiteはCE側でのNATではないので今回は見送りました。)そこで、OCN バーチャルコネクトをDebian(iptables)で実現するとどうなるかと思い、ネットの情報を頼りにしつつ、設定した次第です。 実際に試した結果、とりあえず通信できていますが、MAP-Eは本来マッピングルールをマップサーバから取得するはずなので、今回のやり方が正解とはいえませんし、仕様変更されると通信できなくなる可能性があります。あくまでも参考程度ですが、本稿をUPしてみました。 2023/03/16追記: こちら にゲームコンソールNAT越え(Nintendo Switch ナットタイプ A判定)対応版を投稿しました。 2023/03/28追記:※1の記述および3行無効化によりNAT越え(Nintendo Switch ナットタイプ B判定)できるようになりました。 構成は以下の通りです。 ルーターがDebianで回線がOCNバーチャルコネクトであること以外はなにも特別なところはない構成です。 さて、いきなり設定ですが、まず、割り当てられたプレフィックスを確認します。 確認は、 dhclient -6 -d -P enp2s0 とします。出力の中に 前略 RCV: | | X-- IAPREFIX 2400:4050:5c71:af00::/56 後略 このようにプレフィックスが表示されるので、その確認したプレフィックスを書き留めておきます。これを こちらで 入力します。すると、 CE: 2400:4050:5c71:af00:99:f171:c600:2f00 IPv4 アドレス: 153.241.113.198 ポート番号:(1776-1791 2800-2815 3824-3839) 4848-4863 5872-5887 6896-