前回、STM32F446書込&デバッグを行いました。
そこで、ST-LINKについて疑問を持ったので、メモ代わりにまとめておこうと思います。
ST-LINKは、STマイクロエレクトロニクス社がSTM8&STM32マイコン向けに提供しているライタ&デバッガの呼称です。
ST-LINKのバージョン
以下の種類の違いがあります。
- ST-LINK
- ST-LINK/V2 OpenOCDが使用可能
- ST-LINK/V2-1 V2の機能に、仮想シリアルポート機能とUSBマスストレージ機能が追加
- ST-LINK/V3 USB速度が最大480Mbps、SPI/I2C/CAN/GPIOのブリッジ機能が追加
商品ラインナップ
STマイクロエレクトロニクス社製
- ST-LINK/V2、ST-LINK/V2-ISOL(絶縁タイプ)
- STLINK-V3SET
- STLINK-V3MINI
- STLINK-V3MODS
各社
- ST-Link V2 プログラミング ユニット amazonで最安523円
デバッガ接続とソフトウェアシステム図
パソコンの内部でのソフトウェア間でのデータやり取りです。
マニュアルに図がないので、おそらくこんな感じではないかという図になります。
デバッガとターゲットマイコンの接続
JTAGの場合
以下のようにターゲットマイコンと接続します。
- TDI (Test Data In)
- TDO (Test Data Out) デイジーチェーン接続時に次のデバイスに接続
- TCK (Test Clock)
- TMS (Test Mode Select)
- TRST (Test Reset) オプション
- GND
SWDの場合
SWDはSerial Wire Debuggingの略です。以下のように接続します。
- SWCLK (Serial Wire Clock)
- SWDIO (Serial Wire Data I/O)
- SWO (Serial Wire Output):デバッグに必須ではないがprintf関数や各種データが取得できるようになるので便利
- RESET:ソフトリセットがあるので必須ではない。Standbyモードなど低消費電力にするとハードリセットが必要
- GND
JTAGと配線を共有できると書かれており、以下のように書かれた資料を見つけました。
SWDは、ARM社が定めたJTAGと共存可能な2線式のデバッグインタフェースです。JTAGとの互換性はなく、端子を共有しているだけにすぎません。特別なパターンをTMSに送ることでJTAGからSWDに切り替わります。
SWDのプロトコルは、ADI(ARM Debug Interface)v5とCoreSight用に特化されていて、ICの中に作られたデバッグポートやアクセスポートを通じて、レジスタに32bitの値を書き込んだり読み出したりする目的に特化されています。
デバッグ用のレジスタの機能はCoreSightの規格で定められていて、SWDはその物理層を担っているにすぎません。
SWDのプロトコルにはバージョン1とバージョン2があります。バージョン1では、デバッグアダプタとターゲットは1対1で接続しなければなりませんが、バージョン2では複数のターゲットをスター配線できるようになりました。このような接続をマルチドロップといいます。
引用:https://happytech.jp/wordpress/tag/st-link-v2-1/
SWIMの場合
SWIMは、Single-Wire Interface Moduleの略で、以下のように接続します。
- SWIM
- RESET:ソフトリセットがあるので不要。Standbyモードなど低消費電力にするとハードリセットが必要
- GND
デバッグで使用するソフトウェア
こういったソフトウェアを介して、デバッグをアプリケーションで行えるようです。
通信規格(プロトコル)
ARM社が定めた、Cortex-M搭載CPUに対して統一的な方法でハードウェアにアクセスできるインタフェース規格として、CMSIS(シーエムシス)というのがあります。
さらに、ターゲットのDAP(デバッグアクセスポート)への標準化されたアクセス方法を提供するものとしてCMSIS-DAPがあります。ホストコンピュータとUSBで接続し、ターゲットマイコンとはJTAG/SWDで接続するというJTAGエミュレータ(デバッガ)の標準的な規格、またはそれを実現するためのソフトウェアになります。
統合開発環境(IDE)にCMSIS-DAPのプラグインがあれば、Cortex-Mマイコンを手軽にデバッグできるようになります。
CorexのARMコアを実装した各マイコンメーカやサードパーティーは、このプロトコルに対応したハードウェア&ソフトウェアのデバッガを提供してくれています。
オープンソースプロジェクトとして有名なのはDAPLinkです。
Arm Mbed DAPLinkは、Arm Cortex CPU上で動作するアプリケーションソフトウェアのプログラミングとデバッグを可能にするオープンソースのソフトウェアプロジェクトです。一般的にインターフェイスファームウェアと呼ばれるDAPLinkは、アプリケーションMCUのSWDまたはJTAGポートに接続されたセカンダリMCUで動作します。この構成は、ほぼすべての開発ボードはこの構成になっています。開発用ターゲットMCUとCPUデバッグアクセスポートの間にブリッジを作成します。 DAPLinkを使用すると、ドラッグアンドドロッププログラミング、シリアルポート、CMSIS-DAPベースのデバッグが可能になります。
LPC11U35ボードで自作してみるのも面白いかもしれません。
参考URL
https://www.st.com/ja/development-tools/st-link-v2.html
http://blog.livedoor.jp/prittyparakeet/archives/1070961147.html
https://happytech.jp/wordpress/tag/st-link-v2-1/
http://akizukidenshi.com/catalog/g/gM-14361/
https://denshikousakusenka.jimdofree.com/%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89/stm32/st-link/
https://blog.st.com/stlink-v3set-in-circuit-debugger-programmer/
http://www.besttechnology.co.jp/modules/knowledge/?OpenOCD
https://ja.wikipedia.org/wiki/JTAG
http://www.tokudenkairo.co.jp/jtag/adv2018/08.php
http://www.gnu.org/software/gdb/
https://www.segger.com/downloads/jlink/
http://openocd.org/
http://idken.net/posts/2017-08-31-jlink/
http://rx.tokudenkairo.co.jp/cmsisdap/cmsisdap.html
https://blueeyes.sakura.ne.jp/2017/10/20/604/
https://lowreal.net/2020/10/31/1
https://blog.mmaakkyyii.com/posts/post22/