STM32WB - DBG
デバッグとトレース

1.0 版

STM32 デバッグとトレース用インタフェースのプレゼンテーションにようこそ。STM32WB デバイスが備えているデバッグとトレース機能について説明を行います。

1

概要

2

• STM32WB はデバッグとトレースに充実したサポートを提供• プログラムを RAM または Flash メモリにダウンロード• メモリとレジスタの内容を確認• ブレークポイントを挿入してプロセッサを停止• ブログラムを実行またはシングルステップ実行• プログラムの実行をトレース• Arm® CoreSightTM アーキテクチャベース• 広範囲な互換ツール• 標準インタフェース（JTAG／シリアルワイヤ）

STM32WB には、STM32 ファミリ MCU が提供するお馴染みのデバッグ機能（Flash ダウンロード、ブレークポイントデバッグ、レジスタ表示とメモリ表示、シリアルワイヤトレース）がすべて内蔵されていますが、さらに、マルチコアバージョンにおける共同デバッグのためのクロストリガ機能が追加されています。デバッグとトレースのインフラストラクチャは、ほとんどのツールプロバイダによってサポートされている Arm CoreSight 規格を採用しています。

2デバッグアーキテクチャ
Debug Access Port (DAP)

1

JTAG/Serial-wire port
DAPBUS

JTMS/SWDIO
JTDI
JTDO

Trace port

Cortex-M4 core

AHB-AP1

デバッグ
アクセス
ポート

DWT

FPB

Cortex-M4core

JTCK/SWCLK1

ITM

TPIU1ROM
table1

ETM1

PPB

DDS

CTI：Cortex トリガインタフェース
DWT：データウォッチポイントおよびトレースユニット
ITM：計測トレースマクロセル
ETM：エンベデッド･トレース･マクロセル
TPIU：トレースポートインタフェースユニット
BPU：ブレークポイントユニット（M0+）
FPB：ブレークポイントユニット（M4）Cortex-M0+ core

CTI1

TRACED[3:0]
Serial Wire
Trace port

TRGIO

CTM
AHB-AP1

TRACECKTRACESWOCTI1nJTRST•••••••1

AHB

SWJ-DP13

DBG_MCU

Cortex-M4

AHB
ROM
table1

ROM
table1BPU1DWT1CortexM0+ core

Cortex-M0+• STM32WB 製品では、Cortex®-M0+ デバッグが無効化されています。

デバッグとトレースのインフラストラクチャは、次の 3 つの異なる機能ドメインで構成されています。
• デバッグアクセスインフラストラクチャ – ターゲットのトレース機能とデバッグ機能に外部デバッガがアクセス可能とするデバッグポート（SWJ-DP）とアクセスポート（AP）が含まれています。
• Cortex-M0+ コア - プロセッサならびにそれに対応したトレースとデバッグのユニット群（DWT、BPU、CTI）が含まれています。
• Cortex-M4 コア - プロセッサならびにそれに対応したトレースとデバッグのユニット群（DWT、FPB、ITM、ETM、TPIU、CTI）が含まれています。
さらに、次のものを含むシステムデバッグ機能もあります。
• クロストリガマトリックス（CTM）– CTI 同士を接続し、両方のコアの同時停止やトレースのトリガなどを可能とします。
• DBG_MCU – デバッグ中のタイマのフリーズのような独自機能を提供します。
• 外部トリガ入出力 – 外部信号によるデバッグまたはトレースのトリガを可能としたり、外部の装置やコンポーネントを同期するためのトリガパルスを生成したりします。
セキュアルートセキュリティサービスが含まれている STM32WB デバイスでは、Cortex-M0+ デバッグユニットが無効化されていることに注意してください。
3

デバッグポート4• デバッガは JTAG/SWD ポート経由で STM32WB にアクセスします• 標準の 5ピン JTAG ポートもバウンダリスキャンと DFT に使用• シリアルワイヤデバッグ（SWD）ポートはJTAG ポートのうち 2ピンだけ使用• デバッグが必要ではない場合、すべてのデバッグピンは機能用として再割当て可能
PA13

PA14

PA15

PB3

PB4

JTAG/SWD* すべて

JTMS

JTCKJTDI

JTDONJTRSTnJTRST を除く JTAG/SWD すべて

JTMS

JTCK

JTDI

JTDO

JTAG-DP 無効、SW-DP 有効

SWDIO

SWCLK

使用可能なデバッグポート

JTAG-DP と SW-DP がともに無効* リセット状態

デバッグ用の最小構成には、PA13 と PA14 をシリアルワイヤデバッグ（SWDIO と SWCLK）に割り当てる必要があります。
シリアルワイヤデバッグには、SWDIO（JTMS）入力に接続されたデバッガにより入力される特殊シリアルコードを使用します。このコードは、SWD モード（リセット後にデフォルトで JTAG モードに設定）に切り換わって SWJ-DP によって認識されます。
ST-Link ならびに大半のサードパーティーデバッグアダプタ（Ulink など）は、シリアルワイヤデバッグに対応しています。

4アクセスポート5• 2 本のアクセスポート（AP）がバスマスタとして機能し、メモリとレジスタの読出し／書込みトランザクションをデバッガが実行可能• デュアル CPU デバックが可能

JTAG/SWD

SWJ-DPDAPBUS

AP0(AHB-AP)

Cortex-M4

AP1(AHB-AP)

Cortex-M0+

アクセスポート AP0：内部 AHB バスを介して、Cortex-M4 プロ
セッサコアに組み込まれているデバッグおよびトレース機能と、DBG_MCU へのアクセスが可能
アクセスポート AP1：内部 AHB バスを介して、Cortex-M0+ プロ
セッサコアに組み込まれているデバッグおよびトレース機能へのアクセスが可能
シングルアクセスポートによりデュアル CPU デバッグが可能

5

Cortex-M0+ T&D 機能

6• The Cortex-M0+ コアには以下のデバッグコンポーネントが含まれます• システム制御空間（SCS）• データウォッチポイントおよびトレースユニット（DWT）• ブレークポイントユニット（BPU）• クロストリガインタフェース（CTI）• ROM テーブル

Cortex-M0+ コアのデバッグ関連レジスタには、専用 AHB アク
セスポート AP1 経由でアクセスします。
ROM テーブルには、アクセスポート（AP）から見える各デバッグコンポーネントのベースアドレスへのポインタが含まれています。
これらは、ターゲットの CoreSight インフラストラクチャのトポロジを自動検出するデバッグツールによって使用されます。
SCS（システム制御空間）には、デバッグモードでプロセッサコアを制御するレジスタが含まれています。
その他のユニットについては、以降のスライドで説明します。
Cortex-M0+ プロセッサコアはトレースに対応していないことに注意してください。

6Cortex-M4 T&D 機能

7• The Cortex-M4 コアには以下のデバッグコンポーネントが含まれます• システム制御空間（SCS）• データウォッチポイントおよびトレースユニット（DWT）• ブレークポイントユニット（FPB）• 計装トレースマクロセル（ITM）• 組み込みトレースマクロセル（ETM）• トレースポートインタフェースユニット（TPIU）• クロストリガインタフェース（CTI）• ROM テーブル

Cortex-M4 コアのデバッグ関連レジスタには、専用 AHB アクセ
スポート AP0 経由でアクセスします。
ROM テーブルには、アクセスポート（AP）から見える各デバッグコンポーネントのベースアドレスへのポインタが含まれています。
これらは、ターゲットの CoreSight インフラストラクチャのトポロジを自動検出するデバッグツールによって使用されます。
SCS（システム制御空間）には、デバッグモードでプロセッサコアを制御するレジスタが含まれています。
その他のユニットについては、以降のスライドで説明します。

7データウォッチポイントおよびトレースユニット

8• DWT には 4 つのコンパレータがあり、それぞれ以下の役割に使用できます。
• ウォッチポイント• ETM トリガ（C-M4 のみ）• PC サンプリングトリガ• データアドレスサンプリングトリガ• データコンパレータ• クロックサイクルカウンタコンパレータ• ソフトウェアプロファイリング用のカウンタも内蔵しています。
• クロックサイクル数• フォールドされた命令数• ロードストアユニット（LSU）の動作数• スリープサイクル数• 命令当たりのサイクル数• 割込みオーバーヘッドの回数

DWT コンパレータは、以下の項目のうちの 1 つを、
DWT_COMP レジスタに保持されている値と比較します。
• データアドレス• 命令アドレス• データ値• サイクルカウント値（コンパレータ 0 のみ）
アドレス照合の場合、コンパレータはマスクを使用することができるため、あるレンジのアドレスと一致します。
照合が成立すると、コンパレータは以下のうちの 1 つを生成します。
• 1 つ以上の DWT データトレースパケットで、以下を 1 つ以上含むもの。
• データアクセスを伴う命令のアドレス• アドレスオフセット（データアクセスアドレスのビット[15:0] ）• 一致したデータ値。
• PC 値またはアクセスしたデータアドレスのいずれかで発生するウォッチポイントデバッグイベント。
• DWT ユニット外での一致を信号で伝える CMPMATCH[N]イベント。
8

ブレークポイントユニット

9• FPB（Cortex-M4）と BPU（Cortex-M0+）を使用することでハードウェアのブレークポイントを設定することができます• 命令フェッチアドレスをモニタし、一致が検出されたときにブレークポイント命令を返すコンパレータが内蔵されています。
• ブレークポイント命令の実行時には、プロセッサはデバッグモードで停止します。

• FPB は Flash メモリのパッチにも対応しています。
• この機能は、実行を揮発性メモリに迂回させることにより、エラーを含むコードにパッチをあてるためのものです。

Cortex-M0+ プロセッサコアには、命令フェッチアドレスのマッチング用に割り当てられたコンパレータ が 8 個備わっています。
Cortex-M4 プロセッサコアには、命令フェッチアドレスのマッチング用のコンパレータが 6 個、リテラルロードアドレスのマッチング（コード空間へのデータ読出し）用が 2 個備わっています。後者は、パッチのためにのみ使用可能です。

9

計装トレース（C-M4 のみ）

10• ITM は次の 3 種類のソースからトレースパケットを生成• ソフトウェアトレース：
ソフトウェアは、32 本のスティムラスレジスタのいずれかに書込みを行う• DWTからのハードウェアトレースパケット
これはデータトレースイベント、PC サンプル、カウンタの折り返しの可能性がある• ローカルタイムスタンプ
ITM の 21bit カウンタが、前のパケットと比較したタイムスタンプを各トレースパケットに供給• トレースパケットは TPIU または SWO トレースポート経由で出力

ソフトウェアは、32 x 32bit の ITM スティムラスレジスタのいずれかに直接書込みを行って、パケットを生成します。各ポートの許可レベルはプログラムで設定できます。ソフトウェアが有効なスティムラスポートに書き込むと、ITM は FIFO に書き込むパケットの中に、ポートの ID、書込みアクセスのサイズ、および書き込まれたデータを統合します。ITM は FIFO からトレースバスにパケットを出力します。スティムラスポートレジスタを読み出すと、
ビット 0 のスティムラスレジスタのステータス（エンプティまたはペンディング）を返します。
パケットが複数のソースから同時に生成される場合、ITM はパケットの出力順番についてアービトレーションを行います。このシートには、優先度の高いものから順にソースがリストアップされています。

10

命令トレース（C-M4 のみ）

11• ETM はソフトウェアの実行を観察できるトレースパケットを生成します。トレース情報には次の情報が含まれます。
• 同一サイクルで実行される命令の数• プログラムフローの変更• プロセッサの現在の命令ステート• ロードおよびストア命令によってアクセスされるメモリ位置のアドレス• 転送のタイプ、方向、およびサイズ• 条件コードに関する情報• 例外情報• 割込み待ちステートに関する情報• トレースパケットは TPIU または SWO 経由で出力されます。

STM32WB では、組み込みトレースマクロセル（ETM）は命令トレース専用に設定されているため、トレース情報にデータアクセスは含まれません。

11

トレースシンク（C-M4 のみ）

12• トレースパケットは次の 2 種類の転送先（シンク）の1 つに送られます。
• トレースポートインタフェース（TPIU）• トレースパケットは、同期クロック信号とともに、4 ピンパラレルポートを通じてデバイスから出力されます。これには、
ULINKpro や DStream などのトレースポートアナライザプローブを接続する必要があります。

• シングルワイヤトレースポート（SWO）• ITM トレースは、SWO に導くことが可能であり、非同期プロトコル（NRZ またはマンチェスタ）を用いて出力されます。この出力は、ST-Link その他のアダプタと多くの市販デバッガツールを用いて読込み可能です。

トレースポートインタフェース（TPIU）は、パラレルトレースポートに対応している STM32WB パッケージからのみ使用可能です。
シングルワイヤトレースポート（SWO）は、すべての STM32WBパッケージで使用できます。

12トレースポート（C-M4 のみ）

13• TPIU パラレルポート• 1～4 本のデータピンとクロックをトレースに割当て可能（デフォルトは GPIO）• TRACECLK は最高 32MHz の DDR モードで動作可能
 最大帯域幅 256Mbps• SWO シングルワイヤシリアルポート• 1 本の非同期データピンが JTDO とマルチプレクス• 帯域幅 100Mbps（マンチェスタ符号化）

トレースポートの幅は 1～4 ピンにプログラム可能です。帯域幅は、ピン数と TRACECLK 周波数（RCC の分周器で選択可能）に比例して変化します。
トレースソース（特に ETM）にフィルタとトリガを適用することにより、トレースデータの平均量を減らすことが可能となり、クロックレートの低減やピン数の削減が行えます。
TRACESWO ピンには、JTAG インタフェースの一部である
JTDO 信号がマルチプレクスされています。したがって、シングルワイヤトレースは、シリアルワイヤデバッグ（SWD）インタフェースが有効化されている場合にしか使用できません。

13

クロストリガインタフェース

14• CTI は、その他のデバッグコンポーネントとトレースコンポーネントに対するトリガイベントを伝播します。
• トリガイベントソースの例：• データ･ウォッチポイント• ハードウェアブレークポイント• プロファイリングカウンタイベント

AHB
HALTED
CortexM0+CPU

EDBGRQDBGRESTARTPPBETMTRIGGER0DWTHALTED
CortexM4 CPU• トレースの開始／停止• トレースバッファのフラッシュ

EDBGRQDBGRESTARTETMTRIGOUTETMETMEXTIN0ETMEXTIN1• プロセッサの停止／再起動

TRGIN• 外部トリガ信号出力• プロセッサ割込み

ETMTRIGGER1ETMTRIGGER2• プロセッサの停止／再起動• トリガイベントにより転送先で発生する事象：

TRIGIN0TRIGOUT0TRIGOUT7Cortex-M0+• トレースバッファのフル／エンプティ• 外部トリガ信号

Cortex-M0+ CTI

TRGOUT

Cortex-M4 CTI

CTM channels [3:0]

TRIGIN4TRIGIN5TRIGIN6TRIGIN0TRIGOUT0TRIGOUT7TRIGIN7TRIGOUT4TRIGOUT5TRIGIN3TRIGOUT3Cortex-M4

クロストリガは、デュアルコアデバイスで使用して両方のコアを同時に停止させることができます。片方のコアがブレークポイントをヒットすると、その「停止状態」出力（デバッグモードに入ったことを示します）がもう一方のコアに伝搬して、そちらもデバッグモードに入ります。同様に、両方のコアが同時に再起動することもできます。
クロストリガ機能は、外部トリガ信号（IO ピン 1 本のエッジなど）でプロセッサを停止させるためにも使用できます。
Cortex-M プロセッサ群にはそれぞれクロストリガインタフェース（CTI）が存在します。
いずれかのクロストリガ機能を使用するには、デバッガによりCTI をしかるべくプログラムする必要があります。必要なトリガ入力信号（TRIGINn）とトリガ出力信号（TRIGOUTn）は、クロストリガマトリックス（CTM）に接続する必要があります。CTM は最大4チャネルから構成されており、4 つの異なるイベントを並列に伝搬可能です。トリガ入力は CTIに束ねることが可能ですので、束ねられた入力のどの 1 本によっても接続されたチャネルにイベントが発生します。同様に、1 つのチャネルを複数のトリガ出力に接続できますので、1 つのイベントで複数の動作をトリガ可能です。
14

DBGMCU15• 「MCU デバッグ」ブロックによりデバイス専用のデバッグ機能が実現• デバイス ID• デバイス ID コードレジスタを読み出す標準位置• 低電力モードのエミュレーション• デバイスが低電力モード（SLEEP、STOP、STANDBY）に入った場合にもデバッグアクセスが可能であるように、電源とクロックを維持します。

• デバッグモードにおけるペリフェラルクロックの「フリーズ」• プロセッサが停止している間に、RTC、TIM、LPTIM、ウォッチドッグ（IWDG、WWDG）タイマカウンタ、SMBUS タイムアウトカウンタをフリーズします。

• 外部トリガ方向• 双方向 TRGIO 外部トリガピンの方向（入力／出力）を制御します。

DBGMCU は C-M4 PPB バス上に位置しており、AHB アクセスポート
AP0 経由でデバッガからアクセス可能です。また、Cortex-M4ソフトウェアからもアクセス可能です。
DBGMCU_IDC レジスタには、デバイス ID とリビジョンコードが STM32標準フォーマットで格納されています。この情報は、デバッグポート（DP_TARGETID レジスタ – 外部デバッガのみアクセス可能）でも入手できます。
低電力エミュレーションとは、低電力モードに入ってもデバッガとの接続が切れないことを意味します。これにより、低電力に入るコマンド（WFI/WFEなど）を while() ループで置き換える必要がなくなります。終了時に、デバイスは、エミュレーションが有効ではなかった場合と同じ状態となります（低電力モードエミュレーション中にデバッガにより行われた変更を除く）。
ペリフェラルクロックのフリーズは、デバッガを用いてウォッチドッグを再設定する必要なく、デバッグ中にウォッチドッグタイムアウトによってデバイスがリセットするのを防ぐために特に便利です。また、それによってタイマ値の検査と、「通常」動作が再開されるまで対応する割り込みのサスペンドが可能です。
TRACECLKEN ビットによって、必要時にのみクロックがトレースポート出力に供給されることが保証されます。これにより、不要な電力消費が避けられます。
特定のパッケージでは、TRGIN ピンと TRGOUT ピンが存在せずに双方向ピンのみが使用され、その方向は TRGOEN ビットを用いて選択する必要があります。
15