絶縁ST-Linkを作った

2017年11月26日

はじめに

STM32マイコンの開発の際に,プログラマ兼デバッガとしてST-Linkを使っています.


このST-Link,単体で販売されているものや,stm32f4discoveryにはV2のものが搭載されています.対して,同じ開発ボードであるNucleoにはST-Link V2-1が搭載されています.これらのバージョンの違いとして,シリアルポートの有無が挙げられます

モータドライバなどの開発の際,安定化電源やバッテリを接続してモータ制御のデバッグを行うことが多いです.この時,PCのUSBポートと比較して電圧や電流が大きい電源と接続されるため,もしもの場合,回路の損傷が生じた際に場合によってはPCにその電力が流れ込み,最悪PCを破壊してしまう可能性があります.
これを防ぐため.ST-Linkで書き込みをした後,ST-Linkを取り外し,データ受信用のシリアルポートはアイソレータを噛ませて接続し,電源やバッテリと接続された回路から電気的に絶縁を施して,動作テストやデバッグを行います.
本来であれば,回路自体をマイコンなどの制御部分とHブリッジなどのパワー部分をアイソレータを噛ませて絶縁するのが望ましいですが,場合によっては絶縁できない,しない回路となることもあります.

これらの問題に対し,書き込み,シリアル通信が可能かつ,PCと電気的に絶縁を施したいというモチベーションからST-Linkを絶縁化しようと思い立ちました.

作った回路

タイトルの通りST-Link V2-1を絶縁化した基板を作成しました.
回路CADにはKiCadを使用しました.
基本的にはNucleoに搭載されているST-Linkを参考に,USBまわりや電源を変更しつつも,なるべくコンパクトに抑えました.
今回作成した基板のCADデータはGitHubにて公開しています.
Yuqlid/Isolate_ST-Link

特徴

  • Nucleoに搭載されているST-Link V2-1の機能を完備(SWD,シリアルポート).
  • Analog Devices社のUSBアイソレータ「ADuM4160」を用いてPCのUSB電源と回路を絶縁
  • 絶縁DCDCコンバータを搭載することで,絶縁状態でもある程度の容量の回路であれば,この基板単体で書き込み,デバッグ,シリアル通信,電源供給が可能

動作テスト

実際にはんだ付けしてのがこれです.(右側の基板)

一応EclipseからOpenOCDを起動することには成功しましたが,少しcfgファイルに変更を加える必要がありました.

SW4STM32を使用している場合,OpenOCDでデバッグをする設定を行うのですが,この時にOpenOCDに渡すための.cfgファイルが生成されます.
基本的にこの.cfgファイルに編集を加える必要はありませんが,僕が作った絶縁ST-Linkの場合,.cfgファイルの「Mode Setup」→「Reset Mode:」の項目を「Software system reset」に書き換える必要がありました.
ここの設定を変更しないと,ターゲットマイコンがhaltされず,OpenOCDでのデバッグが行なえませんでした.
おそらく僕がどこか回路のミスをしているのでしょうが,それが特定しきれない状況です…
「Reset Mode:」の部分を書き換えることで,OpenOCDがST-Linkに対してどのような操作を命令しているかがわかれば,基板側のミスも見つけれられると思いっています.

調べていたところ,まったく同じ症状例を見つけました.
電子工作専科 STLink
NRSTの配線もしたはずですが,接続のミスが生じている可能性が出てきました.
オシロスコープを使って信号を眺める必要がありそうですね.

2017-10-15追記
どうやらはんだ付けがNRSTピンだけうまくいっていなかったようで,はんだ付けし直したら無事に「Connect under reset」でもOpenOCDが起動しました.
NRST意外はちゃんとはんだ付けできていたため,中途半端に動作してしまい,原因の特定に時間がかかりました.はんだ付けはちゃんとチェックしないとね…

まとめ

開発の効率を上げるため,ST-Linkを絶縁化しました.
何か知見がありましたらコメントをお願いします.

Wiki