NUCLEO ST-Link/V2 で外部ターゲットの電圧が 0V になる問題の解決

はじめに

NUCLEOボードから分離した ST-Link/V2 を、自作基板(AT32F405RTC7)のデバッグに使おうとしていました。しかしOpenOCD が ターゲット電圧を 0V と認識してしまい、接続できない問題に遭遇しました。

原因は NUCLEO ボード上の抵抗の配置にあり、抵抗を移植することで解決しました。この記事ではその原因と対処法を紹介します。

症状

OpenOCD を起動すると、以下のようにターゲット電圧が 0.0V と表示され、デバッグが開始できません。

Target voltage: 0.000000

テストポイントの電圧を測ると 3.3V が正しく供給されているにもかかわらず、ST-Link 側がそれを検出できていない状態です。

ST-Link/V2 は、デバッグ対象の電源電圧(VDD)を検出して、SWD の I/O レベルを合わせる仕組みを持っています。NUCLEO ボードでは、この電圧検出回路がオンボード MCU(STM32F303K8)の VDD に接続されています。

つまり、オンボード MCU に対してデバッグする前提の回路構成になっているため、外部ターゲットの VDD は ST-Link の電圧検出ピンに届きません。

NUCLEO ボードの回路図を見ると、ST-Link 内部の STM32F103 が電圧を検出するための分圧抵抗が、ボード上のはんだブリッジ(SB)を介してオンボード MCU 側に接続されています。

解決方法:抵抗の移植

外部ターゲットの電圧を ST-Link に認識させるために、以下の修正を行いました。

  1. NUCLEO ボード上の電圧検出に関わる抵抗を特定(今回は R23
  2. R23 をオンボード MCU 側の VDD パッドから取り外し
  3. SWD コネクタの VDD ピン(Pin 1)側のパッド R9 に移植

これにより、外部ターゲットの VDD が ST-Link の電圧検出回路に入力されるようになります。

修正後の確認

抵抗の移植後、OpenOCD を起動すると正常にターゲット電圧が検出されました。

Target voltage: 3.271672

これで外部ターゲットの AT32F405 に対して SWD 経由のデバッグが可能になりました。

SWD 接続の配線

参考までに、NUCLEO-F303K8 の CN4(SWD コネクタ)から外部ターゲットへの配線は以下の通りです。

CN4 ピン信号名接続先
1VDDターゲット 3.3V
2SWCLKターゲット SWCLK
3GNDターゲット GND
4SWDIOターゲット SWDIO
5NRSTターゲット NRST

まとめ

NUCLEO ボードの ST-Link を外部ターゲット用に流用する場合、電圧検出回路の経路変更が必要です。回路図を確認して、ターゲット電圧の検出パスを SWD コネクタ側に切り替えることで、正しく動作するようになります。

「Target voltage: 0.0V」で悩んでいる方は、まずボード上の電圧検出用の抵抗・はんだブリッジの接続先を確認してみてください。

参考資料