CH32V203 で Arduino UNO R4 の SWD 仕様の DAPLink を作る

tl;dr

  • DAPLink はオープンソースのARM MCU デバッガのファームウェアだよ。SWDの他にUARTも生えてて便利だよ。
  • DAPLink 仕様のフォークされた CH32V203 用のファームウェアがあるよ
  • SWD には 10ピンコネクタの仕様があるよ。Arduino UNO R4 の SWD はこれにUARTを足してあるよ。
  • Arduino UNO R4 の SWD 仕様の DAPLink を作ったよ。だけど、デバッグとかどうやるのかわかっていない。

DAPLink はオープンソースで開発されるARM MCU のデバッガです。 ARMマイコンのデバッガというと、ST-Link が浮かびますが、こちらはUSB-Cでなかったり、微妙に使い勝手が悪く感じていました。 DAPLink は OpenOCD ではサポートされていて、PlatformIO でも使うことができ、私は STM32、RP2040 のデバッグに重宝しています。

github.com

本家 DAPLink は STM32F103CB など、複数のMCU上で動くファームウェアとして開発されています。

aliexpress で検索すると、安価なデバイスが見つかります。私は Muse Lab の以下の Mini DAPLink をよく使っていました。

Mini DAPLink Debug Probe TYPE-C STM32 NRF51/52 ARM Cortex-M MCU JTAG/SWD/CDC Serial Port/Drag and Drop Program Keil/MDK OpenOCD

https://www.aliexpress.com/item/1005003197553949.html

DAPLink がオープンソースなのだけあって、公式がサポートしている MCU 以外にも実装したプロジェクトが見つかります。 その中に、CH32V203 を使ったプロジェクトがありました。

github.com

こちらを CH32V203 ProMicro に焼いてみたところ、DAPLink として SWD 経由で STM32F103 のファームウェアの書き込みを行うことができました。 そして、これを使って安価にオリジナルの DAPLink を作ってみたいと思うようになりました。

SWD のピン仕様

SWD には 10ピンコネクタには公式仕様があります。

Documentation – Arm Developer

Arduino UNO R4 の SWD の仕様から調べていたのですが、公式であるのはありがたく、この仕様で作れば良いことがわかります。

ESPProgのUART+BOOT IO+RESETを 1.27mm 6ピンに収めたパッケージが、電源供給とBOOT IOとUARTを一挙に接続できて便利に感じていて、私の作るESP32には必ずそのポートを持たせるようにしていました。ARM MCUでも同様のことができれば便利だと思っていました。

ただし、Arduino UNO R4 はこれにUARTを足した形になっていました。

https://docs.arduino.cc/resources/schematics/ABX00080-schematics.pdf

この UART が足してあるというのが、私にとってそのままデバッグする際に重宝するため、この仕様でいくつかものを作りたいと思いました。

CH32V203 はストックがあるので、このUART付きSWDのDAPLinkを作りたいと思い、作りました。 ついでに、Arduino UNO R4 の VCC は 5V であるため、3V3と5Vの切り替えスイッチ付きです。

1.27mmピッチのSWDコネクタはSWD+UART仕様です。

まずはボックスピンヘッダではなく、後ろのピンで、STM32F103で、SWD経由でファームウェアのアップロードができることを確認できました。

また、Arduino UNO R4 でのデバッグは、それができそうなオープンソースソフトウェアが見つかっておらず、確認はできていないのですが、意図したとおり電源供給できることと、裏のランドのSWDIO、SWCLK が繋がっていることは確認できました。まだ、SWDIO、SWCLKにレベル変換が必要なのかはわかりませんが、ソフトウェアが整ったらトライしてみたいところです。

このDAPLinkを3個つくったので、2個をBOOTHにて販売開始しました! STM32、RP2040のデバッグのお供にご利用ください。

74th.booth.pm

なお、このKiCADファイル自体は以下のリポジトリで公開しています。

github.com