またしてもお久しぶりです。訳あって最近 ST-Link/V2 を入手したので、使用した際の記録をします。
一通りネットを検索した感想ですが、案外情報少ないですね。まあ無くはないんですが、ちらほらくらいしか無いです。
「ST-Link」自体は検索に引っかかるのですが、大体 Nucleo の上部を指していることが多いですね〜まあアレが Nucleo の本体だから
そんなこともあって、自分のメモも兼ねて公開したいと思います。
買った
秋月で購入しました。壊れては困るので2機購入。567 ウィルスの影響も鑑み、オンラインで注文をしました。たしかお盆明けのまぁまぁ混雑している時期でしたが、2〜3日程度で埼玉の家に到着したと思います。通販センターの方々、お疲れさまです。
これで何が出来るのかというのですが、そりゃデバッグです。マイコンのデバッグプロトコルを利用してのプログラム書き込みも当然可能。詳細に述べると以下が出来るようです(買うときは全く調べなかった)。
- STM32 マイコンのデバッグ
- SWD に対応(JTAG には対応してない)
- SWO が出ているので、IDE で printf が出来そう
- STM8 マイコンのデバッグ
- SWIM で出来る
- 過去の記事...を書いたつもりだったが、そう言えば書いていなかった。後日書きたいと思います。
- ST-Link 自身のアップデート
- USB DFU を用いる
- IDE で使う際はアップデート必須
STM32 マイコンのデバッグで買う人が多いと思いますが、なんか他の ARM マイコンもデバッグできそうですよね。試してみたいなあとは思いますが。
箱を開封しましたが、本体は想像よりかなり小さめでした。以前インターンで J-Link の黒いやつを使っていたのでそのへんのギャップかも。
付属品
本体の他に各種ケーブルが付いています。
- USB ケーブル
- mini USB ケーブルです。今どき micro でさえ無いとは...
- リボンケーブル
- 20pin(2 x 10) のケーブル for STM32
- 4ピンのケーブル(通常ピッチ) for STM8
- 4ピンのケーブル(ハーフピッチ) for STM8
- 紙
そう言えば前のロットではドライバ用の CD-ROM が付いていたようですが、イマドキなのでこれは廃止したようです。必要な方は ST の公式サイトでダウンロードしましょう。
配線
マイコンに配線をしていきます。これがハマることハマること。原因はデータシートの不親切な説明にあると思います。
まず、僕はリボンケーブルをつなぎ、そこにジャンパワイヤを挿し込んでブレッドボード上にマイコンと接続していますので、その状況下でのお話です。
ピンアサイン
ピン配置を調べようと、僕はデータシートを見ました。すると SWD 通信をするのには以下のピンを接続すれば良いのだと判明。
ST-Link 側ピン番号 | ピン名 | 備考 |
---|---|---|
1 | TVcc | Vccに接続 |
7 | SWDIO | |
9 | SWCLK | |
19 | Vcc | 3.3V電源 |
20 | GND |
1番ピンの TVcc は、デバッガ側でのターゲット電圧検知ピンです(入力ピン)。ここに接続された電圧によって SWD 信号を出すみたいで(多分)、繋がないと怒られたり、接続がそもそも確立しなかったりします。リセット端子もありますが、まあ SWD はソフトリセットが出来るのでまずいらないでしょう。マイコンをディープスリープさせている時だったら必要かもですが。
ピンの配置
では これらのピンがどこにあるか、ですが、気を付けないとハマります。
データシートには以下のような図があります。
まあここでよく英文に忖度しないとハマります。僕はリボンケーブルの出っ張りを上にし、ソケットの穴を見た時の配置だと思っていました。違うようです。
Viewed from above PCB とありますよね。この解釈を間違えていました。正しい解釈を知りたい人は直後のセクションを読み飛ばしてください。
解釈の間違い
考えた結果間違って悔しいので、僕の解釈を載せておきます。
まず、from above
は前置詞を二重に用いたもの。通常前置詞は目的語に名詞を取りますが、このように2つ適用して動きを描写することが可能です。例えば、My cat suddenly appeared from under the desk. とすると「下から」という表現になります。この from above の後の目的語である PCB に冠詞がついていないのがいささか不満ですが、まあ良いということにします。以上から僕は「PCB(ST-Link 内部にあるプリント基板)の下から見た図です」と解釈しました。つまり ST-Link の背面から、上下逆さまにみた図だと感じたわけです。すると、リボンケーブルの出っ張りを上にすると、ソケットの穴を見た時に一番右が1番ピンだと思うじゃないですか。違うみたい。
正しい解釈
この図の前に、リボンケーブルを用いて外部のマイコンボードと接続している写真が載っています。この脚注にある above PCB とは、この 写真中の PCB ボードであるという解釈をすると、ピン配置が正しいです(いや、だったら順番おかしいだろ above は副詞として使っているなら名詞の後ろから PCB above って修飾してくれ。こう書かれると二重前置詞と区別がつかん。)。
...とつらつら書きましたが、要は ST-Linkにリボンケーブルを差し、基板に差す側においてリボンケーブルの出っ張りを上にしてソケットの穴を見た時、左上が1番ピンになるということです。ST-Link から直接ピンをジャンパワイヤ等で取る場合も同様です。正しいかどうかは、OpenOCD のコマンドを叩いて確認しています。
アプデ
せっかくなのでアップデートを掛けておきましょう。
STM32CubeIDE にアップデートツールが内包されているので、こちらを使いました。
IDE を起動し、メニューバーのヘルプから「ST-LINK 更新」(多分これ中国語)を選択するとツールが起動します。
続いて ST-Link を DFU モードで起動しファームウェアを書き込みます。まず ST-Link から USB ケーブルを抜いて差し直します。その後数秒以内にツールで Refresh device list → Open in update mode と押します。
これで DFU ブートが完了しました。最後に update を押してアプデです。終わったら再度接続し直して認識されていることを確認してください。
ここまでくればあとは簡単です。いやぁ長かった...
OpenOCDでつなげる
やはり ST-Link を使うなら CLI がおすすめです(個人的に GUI が嫌いなだけ)。例えば STM32F3xx シリーズにつなぎたいのであれば、
$ openocd -f interface/stlink.cfg -f target/stm32f3x.cfg
Open On-Chip Debugger 0.10.0+dev-01266-gd8ac0086-dirty (2020-05-28-17:49)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 1000 kHz
Info : STLINK V2J33S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 2.941530
Info : stm32f3x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f3x.cpu on 3333
Info : Listening on port 3333 for gdb connections
とすればよいだけ。簡単ですね。これでサーバーが立つので GDB 等でアクセスすることが可能です。
書き込むならばこんな感じですね。
openocd -f interface/stlink.cfg -f target/stm32f3x.cfg -c 'program Binary.elf; reset; exit'
書き込んでみましたが、非純正の自作アダプタに比べて格段に速いですね〜〜〜
STM32CubeIDEでつなげる
当初はどうやっても接続できなかったのですが、まさかの痛恨のミス、ST-Link Server をインストールしていませんでした。STM32CubeIDE の配布 dmg イメージに入っていますので、こちらをインストールします。すると再起動せずにすぐに使えるようになりました。
プロジェクト開いて上部ツールバーで、再生ボタンを押すとそのまま書き込みが行われ、虫ボタンを押すとデバッグセッションに入ります。
コメント
ピン番号は本当に困りますね。 写真に番号を振った説明があればいいのですが、説明書を書く人が初めての人を意識して間違いが生じないように記載してくれれば良いのですが、使い方のわかっている人が説明すると、こんな事でまごつく人なて、いないだろうと気になることは無いだろうな。世の中の説明書は、わかっている人に説明しているように思えてなりません。
本当、このSTマイクロは配慮が足りないんだよなぁ...と思います。
STM32 HALでもマニュアルが何も説明していないし、何ならバグだらけです。ろくな仕様説明もできないなんてひどすぎる...
というのは置いておきまして、このピン番号の件は初心者を挫く、本当に困ってしまう事例だと思います。
上級者のみならず一念発起した初心者もデバッガは使う人いると思うので、口汚く言いますが害悪です。
この記事は煮詰まった初心者の助けになればなあ...と書いた次第です。コメントありがとうございました。
この文章で間違った解釈をするのは単に英語力の問題だと思いますよ…
非ネイティブの読者にも配慮して書いてほしいのはその通りですが