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

1.0版

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

1

概要

2

• STM32G4はデバッグのための充実したサポートを提供• プログラムをRAMまたはFlashメモリにダウンロード• メモリとレジスタの内容を確認• ブレーク･ポイントを挿入してプロセッサを停止• ブログラムを実行またはシングル･ステップ実行• ARM CoreSightアーキテクチャ･ベース• 広範囲な互換ツール• STリンクなど、プローブ･デバッグするための標準のシリ
アル･ワイヤ･デバッグ･インタフェース

STM32G4には、STM32ファミリMCUが提供するお馴染みのデバッグ機能（Flashダウンロード、ブレークポイントデバッグ、レジスタ表示とメモリ表示）がすべて内蔵されています。デバッグとトレースのインフラストラクチャは、ほとんどのツールプロバイダによってサポートされているARM® CoreSight™規格を採用しています。

2

デバッグ･アーキテクチャ
プロセッサコア
3段パイプライン
SIMDインストラクション
単精度FPU

NVIC
SCS

インストラクションETM

トレース

SWJ-DP

デバッグ

ROMテーブル

DWT
MPU

PPB

TPIU
ITM

データ

FPB

3

バスマトリクスICODE
AHB-Lite
マスタポートDCODE
AHB-Lite
マスタポートシステム
AHB-Lite
マスタポートArm®Cortex®-M4

STM32G4バスマトリクス

内蔵メモリ

外付けメモリ内蔵
ペリフェラル

外付け
ペリフェラルSWJ-DP
SWD
PPB
FPB
DWT
ETM
ITM
TPIU
SCS

= シリアルワ･イヤJTAGデバッグ･ポート= シリアル･ワイヤ･デバッグ= プライベート･ペリフェラル･バス= Flashパッチとブレーク･ポイント= データ･ウォッチポイントとトレース= 組込みトレース・マクロセル= 計装トレース・マクロセル= トレース･ポート･インタフェース･ユニット= システム制御スペース

デバッグプロセスに関与するすべてのユニットは、コアとSWJ-DPの両方からプライベートペリフェラルバス（PPB）を介してアクセス可能なメモリマップレジスタを持っています。
デバッガは、プロセッサの実行中にメモリにマップされたリソースにアクセスできます。たとえば、プロセッサが命令を実行している間に、プライベートペリフェラルバスに接続されているFPBユニットにアクセスし、デバッガによってブレークポイントを設定できます。

3SWJ-DPとトレース･ピンプロセッサコア
3段パイプライン
SIMDインストラクション
単精度FPU

NVIC
SCS

インストラクション

ETM
SWO/
パラレルトレース

SWJ-DP

SWD/JTAG

DCODE
AHB-Lite
マスタポート

デバッグ
プローブ
デバッグ･アプリケーション
実行中のPC

バスマトリクスICODE
AHB-Lite
マスタポート

トレース
ポート
アナライザ

ROMテーブル

DWT
MPU

PPB

TPIU
ITM

データ

FPB

4

システム
AHB-Lite
マスタポートArm®Cortex®-M4

STM32G4バスマトリクス

内蔵メモリ

外付けメモリ内蔵
ペリフェラル

外付け
ペリフェラルSWJ-DPを使用すると、外部デバッグプローブは、Cortex®-M4コ
アからもアクセス可能なメモリにマップされたリソースにアクセスできます。
メモリ保護ユニット（MPU）は、SWJ-DPによって開始されたリクエストをインタセプトしないことに注意してください。
SWJ-DPは、デバッグプローブとデータを交換する2つのプロトコルをサポートします。
• 2線式シリアルワイヤデバッグ（SWD）プロトコル• または5線式JTAGプロトコル
SWJ-DPは、使用されているプロトコルを自動的に検出します。
トレース出力に関しては、TPIUは2つの可能性を提供します。
• シリアルワイヤ出力（SWO）と呼ばれる非同期の1線トレースポート• または、クロック信号と1、2または4ビットのデータを含む同期5線トレースポート
SWOはJTAG JTDO信号で多重化されます。したがって、JTAGプロトコルと同時に使用することはできません。SWDを選択する必要があります。
4柔軟なSWJ-DPとトレース･ピンの割り当て

5• デバッグが必要ではない場合、すべてのデバッグ･ピンは機能用として再割当て可能

ピンアウト

PA13

PA14

SWD

SWDIO

SWCLK

JTAG

JTMS

JTCKSWO

PA15

JTDI

PB3

PB4

JTDO

JTRST

PE2

PE3

PE4PE6TRACED2

TRACED2

TRACESWO

TRACECK TRACED0 TRACED1• リセット時、これらのピンはSW/JTAGデバッグ代替機能として設定される

トレース･ポートPE5• コントロールされていないI/Oのレベルを回避するため、デバイスはJTAG入力ピンに内部プルアップとプルダウンを設定

SWJ-DPのSTM32G4からの出力として、5本のピンが汎用I/O（GPIO）の代替機能として使用されます。
これらのピンは、すべてのパッケージで使用できます。
リセット解除後、SWJ-DPに使用される5つのピンはすべて、デバッガホストとして使用できる専用ピンとしてすぐに割り当てられます。
ただし、STM32G4 MCUは、SWJ-DPポートの一部またはすべてを無効にする可能性があるため、接続を切断したままにできるが、デバッガ接続を失うことなくGPIOとして使用できないNJTRSTを除き、GPIOの使用のために関連ピンを解放する可能性があります。
注意：デバッガホストによって明示的にプログラムされている場
合を除き、パラレルトレースポートは割り当てられません。
JTAGピンには内部プルアップとプルダウンがあり、デフォルトはアクティブです。
• プルアップオンNJTRST、JTDI、JTMS/SWDIO• プルダウンオンTCK/SWCLK

5CoreSight™トポロジ検出
プロセッサコア
3段パイプライン
SIMDインストラクション
単精度FPU

NVIC
SCS

インストラクション

ETM
SWO/
パラレルトレース

SWJ-DP

SWD/JTAG

DCODE
AHB-Lite
マスタポート

デバッグ
プローブ
デバッグアプリケーション
実行中のPC

バスマトリクスICODE
AHB-Lite
マスタポート

トレース
ポート
アナライザ

ROMテーブル

DWT
MPU

PPB

TPIU
ITM

データ

FPB

6

システム
AHB-Lite
マスタポートArm®Cortex®-M4

STM32G4バスマトリクス

内蔵メモリ

外付けメモリ内蔵
ペリフェラル

外付け
ペリフェラルROMテーブルには、コアから見ることが出来る各デバッグコン
ポーネントのベースアドレスへのポインターが含まれています。
一部のデバッグツールでは、ターゲットのCoreSight™インフラスト
ラクチャのトポロジを自動的に検出するために使用されます。
SWJ-DPにはROMテーブルを指す読み取り専用レジスタが含まれています。
SCS（システム制御スペース）は、CPUの参照とリビジョンを示すCPUIDレジスタを含むレジスタのブロックであり、デバッガがHALTモードへの入り口と終了を制御するために使用します。

6

侵略性デバッグ
プロセッサコア
3段パイプライン
SIMDインストラクション
単精度FPU

NVIC
SCS

インストラクション

ETM
SWO/
パラレルトレース

SWJ-DP

SWD/JTAG

DCODE
AHB-Lite
マスタポート

デバッグ
プローブ

デバッグアプリケーション
実行中のPC

バスマトリクスICODE
AHB-Lite
マスタポート

トレース
ポート
アナライザ

ROMテーブル

DWT
MPU

PPB

TPIU
ITM

データ

FPB

7

システム
AHB-Lite
マスタポートArm®Cortex®-M4

STM32G4バスマトリクス

内蔵メモリ

外付けメモリ内蔵
ペリフェラル

外付けペリフェラル

侵略性デバッグは、デバッグイベントが発生したときにプロセッサを停止します。
2つのユニットは、侵襲性デバッグに関与しています:• フラッシュパッチとブレイクポイント（FPB）• データウォッチポイントとトレース（DWT）

7

非侵襲性デバッグ
プロセッサコア
3段パイプライン
SIMDインストラクション
単精度FPU

NVIC
SCS

インストラクション

データFPB

ATB

ITM

ATB

TPIU

SWO/
パラレルトレース

SWJ-DP

SWD/JTAG

DCODE
AHB-Lite
マスタポート

デバッグ
プローブ

デバッグアプリケーション
実行中のPC

バスマトリクスICODE
AHB-Lite
マスタポート

トレース
ポート
アナライザ

ROMテーブル

DWT
MPU

PPB

ETM

8システム
AHB-Lite
マスタポートArm®Cortex®-M4

STM32G4バスマトリクス

内蔵メモリ

外付けメモリ内蔵
ペリフェラル

外付け
ペリフェラル

非侵襲性デバッグは、プロセッサのパフォーマンスに影響を与えることなく、プロセッサで何が起こるかをトレースすることを目的としています。これはリアルタイムトレースに基づいています。
ETMおよびITMモジュールは、トレースパケットを合成し、AMBAトレースバス（ATB）を介して発行する機能を備えています。
TPIUはトレースパケットを受信し、外部インタフェースを介して出力するため、トレースポートアナライザ（TPA）はパケットをキャプチャできます。
通常、トレースポートアナライザはデバッグプローブと同じデバイスに含まれています。
TPAにトレースパケットを転送するために2つのインタフェースがサポートされています。
• 非同期式シングルワイヤ出力（SWO）• または同期式パラレルトレースポート
TPIUで競合が検出されると、オーバーフロー状態が発生します。
これはトレースポートの帯域幅が、すべてのトレースパケットをエクスポートするのに十分な大きさではないことを意味します。
トレースパケットはITMモジュールとETMモジュールでタイムスタンプ付きであることに注意してください。
8Flashパッチとブレークポイント（FPB）

9• FPBはハードウェアのブレークポイントを設定可能• これは、不揮発性メモリにブレークポイントを設定できる6つのコンパレータが含まれる• 2つのコンパレータがデータ･アクセスをモニタリング• FPBは、STM32G4のFlashメモリの0~0x1FFFFFFFの範囲内のアドレスコンペアのみをサポート• アドレス0x20000000以上では、コードはRAMから実行しDWTを使用してデータ･アクセスを停止する場合に、ソフトウェア･ブレークポイントが使用可能• これらの8つのコンパレータのどれでも、CPUを停止する代わりにインストラクションの変更またはデータを出力するように設定可能

Flashパッチとブレークポイントユニット（FPB）では、ハードウェアのブレークポイントを設定できます。
これは、不揮発性メモリにブレークポイントを設定する6つのコンパレータが含まれています。一致が検出されると、命令フェッチアドレスを監視し、ブレークポイント命令を返します。ブレークポイ
ント命令が実行されると、プロセッサはデバッグモードで停止します。
2つのコンパレータは、不揮発性メモリに存在する特定の定数がアクセスされたときにプロセッサを停止するために使用されるデータアクセスを監視します。
FPBは、STM32G4のFlashメモリに対応する0~0x1FFFFFFFの範囲内のアドレスコンペアのみをサポートします。
アドレス0x20000000以上では、RAMからコードを実行し、DWTを使用してデータアクセスを停止する場合に、ソフトウェアブレークポイントを使用できます。
ソフトウェアブレークポイントを使用すると、デバッガは、ユーザーが停止する命令をBKPTという専用の命令に置き換えます。
これらの8つのコンパレータのどれでも、CPUを停止する代わりにインストラクションの変更、または定数データを出力するように設定できます。
9データ･ウォッチポイントとトレース･ユニット• DWTは自律的にデータ･ウォッチポイントを設定、およびトリガするために使用可能

DWT

データアドレス

ETM

ETMトリガ

データ値

10==ATB• ETMトリガ信号をアサートするようにコンパレータを設定できるプロセッサ停止

データトレース
インストラクションアドレス
スタシスティック
カウンタ

32ビット
タイマ

同期パケットのタイムアウト

オーバー
フロー

ITM

ATB

• DWTモジュールはITMと連携し、さまざまなリアルタイム･トレース機能をサポート:• データ･トレース

PCサンプリング• スタティスティック･カウンタ･オーバーフロー• 定期的なPCサンプリング

DWTは、単にデータウォッチポイントを実装するよりも多くの機能をサポートします。
図の左側にある4つのコンパレータは、データアドレスまたは命令アドレスの一致条件を検出します。
コンパレータ1は、データ値の一致条件を検出するように構成することもできます。
一致条件が発生した場合、次のアクションがサポートされます。
• コアを停止、これはウォッチポイント機能• ETMへのトリガ信号のアサート• データアクセスを報告し、それをITMに渡してエクスポートできるようにトレースパケットを生成します。トレース情報を補完するために、現在のデータとPCの値をキャプチャすることもできます。
複雑な条件、混合アドレスとデータ比較はプログラム可能です。
比較ロジックに加えて、DWTには8ビットスタティスティックカウンタが含まれています。それらのいずれかにオーバーフロー条件が発生すると、DWTは、このオーバーフローをデバッガに報告するトレースパケットを発行するようにITMに通知します。
DWTは、トレースポートアナライザとの同期を維持するために必須の同期パケットの定期的な生成をトリガも担っています。
これは32ビットタイマによって実現され、トレースパケットに格納するためにITMに渡されるPCの値の定期的なサンプリングをトリガするためにも使用できます。

10データ･ウォッチポイントとトレース･ユニット

11• ウォッチポイントの機能• DWTは命令アドレスとデータ･アドレスを比較できる4つのコンパレータを提供• 選択可能な方向（読取り、書込み、またはその両方）で特定のデータにアクセスしようとする試みを検出するのに非常に便利• 命令アドレスの比較では、ウォッチポイント･イベントはフェッチ時に取られる• 統計カウンタ• DWTは、プロセッサのシステム･プロファイリングを提供• カウンタが含まれている:• クロックサイクル数、フォールドされた命令数、ロード･ストア･ユニット（LSU）の動作数、スリープ･サイクル数、命令当たりのサイクル数、例外マイクロコード実行数

DWTは、現在のデータまたは命令アドレスと、デバッガによってプログラムされたコンパレータの内容との一致によって発生するウォッチポイントイベントをトリガします。
アドレスの照合については、アドレスの範囲に照合出来るように、マスクを使用できます。
照合が成立すると、コンパレータはPC値またはアクセスされたデータアドレスに対してウォッチポイントデバッグイベントを生成します。
データ値との一致は、アドレス一致と組み合わせることが出来ます。
FPBは、命令が実行ユニットに入ろうとしたときにブレークポイントイベントが発生するため、命令ブレークポイントの実装に適しています。
したがって、フェッチされた命令が、分岐によって破棄された場合、ウォッチポイントイベントが発生する間、ブレークポイントイベントは発生しません。
R0などのコアレジスタを読み書きするには、デバッガはコアを停止する必要があります。
DWTには、プロセッサのシステムプロファイリングを容易にする統計カウンタが含まれています。
たとえば、カウンタは、例外の取得と終了を担当するマイクロコードがアクティブになっているクロック数をカウントします。

11

計装トレース･マクロセル（ITM）

12• ITMトレース･パケットの4つのソースは:• ソフトウェア･トレース• 32個のスティムラス･レジスタのいずれかへのソフトウェア書込み
コア
printf(“Hello”)

ITM
PPB

32ビットポート

ATB

TPIU

SWO/
4ビットデータトレース

Hello
デバッグプローブ/
TPA

USB• ハードウェア･トレース• DWTはパケットを生成し、ITMはパケットを出力• ローカル･タイムスタンプ• ITMトレース･パケットのタイミング情報を提供• グローバル･タイムスタンプ• タイムスタンプ生成コンポーネントから取得されるシステム全体の64ビットカウント値を使用して生成2種類のトレース情報がITMによって処理されます。
• DWTモジュールで説明されているハードウェア・トレース• ソフトウェアトレースは、デバッガウィンドウに表示されるデータをソフトウェアが送信できるようにします。
32のITM32ビットポートのいずれかでソフトウェアによって書き込まれたデータは、トレースパケットのペイロードでホストデバッガに転送されます。
printf関数は、コードインストルメンテーションを容易にするためにITMポートにリダイレクトできます。
ITMユニットでは、2つの連続したローカルタイムスタンプパケットとグローバルタイムスタンプの相対時間を示すローカルタイムスタンプという2種類のタイムスタンプがサポートされています。
グローバルタイムスタンプは、ETMユニットでも使用される専用の48ビットから来ています。

12組み込みトレース･マクロセル（ETM）

13• ETMは、プロセッサの命令トレースを提供するリアルタイム･トレース･モジュール• ETMは、クロックと最大4つのデータ出力TRACECLK、および4つのデータ出力TRACEDATA（3:0）からなるTPIUで使用される取得されたブランチ
例外

ETM

ATB

ETM

TPIU

（CLK,D0-D3）

トリガ

DWT

SWOは十分な帯域幅を提供しないため、ETMは4ビットのデータトレースポートを必要とします。
ITMとは異なり、コードインストルメンテーションは必要ありません。
取得されたブランチと例外イベントは、ETMユニットに対してCortex®-M4コアによって通知され、ATBポートに出力されるトレースパケットに変換されます。
トレースがキャプチャされると、デバッガはトレースを解凍して、実行されたコードの完全な逆アセンブリ（シンボル付き）を提供します。デバッガはまた、これを元の高レベルソースコードにリンクして、ターゲットでコードがどのように実行されたかを視覚化します。
ETMはCortex®-M4によって実行されるコードをプロファイリングし、複雑なソフトウェアバグを調査するのに役立ちます。

13

DBGMCU

14• 「MCUデバッグ」ブロックはデバイス固有のデバッグ機能を有効化• デバイスID• デバイスIDコード･レジスタを読み取るための標準の場所• 低電力モードのエミュレーション• デバイスが低電力モード（SLEEP、STOP、STANDBY）になったときに、デバッグ･アクセスが引き続き可能となるように電力とクロックを維持• デバッグモード時のペリフェラルクロックの「停止」• プロセッサが停止している間は、RTC、TIM、LPTIM、およびウォッチドッグ（IWDG、WWDG）タイマのカウンタ、ならびにSMBUSおよびFDCANタイムアウト･カウンタを停止• トレース･ピンの割当ての制御

MCUデバッグコンポーネント以下を提供します。
• MCU ID
• 低電力モード• ブレークポイント時のタイマ、ウォッチドッグ、I2C、およびbxCANのクロック制御• トレースピンの割り当ての制御
DBG_IDCODEレジスタは、STM32標準フォーマットのデバイスIDおよびリビジョンコードが格納されています。この情報は、SWJ-DPまたはユーザーソフトウェアからアクセスできます。
低電力モードのエミュレーションは、低電力モードに入ってもデバッガとの接続が失われないことを意味します。この機能により、低電力に入力されるコマンド（WFI/WFEなど）をwhile()ループに置き換える必要がなくなります。終了時に、デバイスはエミュレーションがアクティブでなかった場合と同じ状態になります（低電力モードエミュレーション中にデバッガが行った変更を除く）。
ペリフェラルクロックのフリーズは、デバッガを用いてウォッチドッグを再設定をする必要が無く、デバッグ中にウォッチドッグタイムアウトがデバイスをリセットするのを防ぐのに特に便利です。また、タイマ値の検査と、対応する割り込みを「通常の」操作が再開するまでサスペンドすることが可能です。
DBGMCU_CRレジスタには、トレースポートを構成する制御フィールド（非同期SWOモードまたはTRACEDATAサイズが1、2、または4の同期モード）を設定するフィールドが含まれています。
14

ST-LinkV3の主な機能

15• パフォーマンス向上
ST-Link V2（KHz）

ST-Link V3（KHz）

SWD

4000

24000

JTAG

9000

21333

• ブリッジ機能の概要

STM32
ターゲット

UART
I2C
SPI
CAN
GPIO

ST-Linkv3

USB

USB
ホスト(PC)• STLINK-V3SETは複数のプロトコルのSTM32ターゲットとの通信を可能にする独自のUSB
インタフェースを提供:SPI、I2C、CAN、UART、GPIO• このインタフェースは、ターゲット･ブートローダと通信するために使用可能

ST-LinkはSTによって開発されたデバッガで、SWおよびJTAGデバッグプロトコルとSWOトレースポートをサポートします。
ST-Linkの第3世代は、SWDおよびJTAGの早い通信速度をサポートしています。
ST-LinkV3は、UART、I2C、SPI、CAN、またはGPIOを使用してターゲット上のデータを送受信するために使用できます。同時にアクティブにできるのは、これらのインタフェースの1つだけです。
たとえば、STM32G4のUARTは、ST-LinkV3経由でホストPCに接続しテスト可能です。キャラクタストリームは、USB経由で透過的に転送されます。
さらに、ST-LinkV3では、ホストPCからのUARTまたはCANリンクを使用してユーザイメージのダウンロードがサポートされ、STM32G4のリセットデアサーションでブーストラップモードが選択されます。

15

STM32CubeProgrammer

16• STM32CubeProgrammerは、既存のプログラミング･ソフトウェア･ツールを1つのソリューションに統合します• コマンドラインおよびグラフィカル･ユーザ･インタフェースで利用可能• 主な特長• マルチプラットフォーム（Windows®、Linux®、macOS®）• デバッグ･インタフェースおよびブートローダ･インタフェースのサポート• JTAG/SWD（ST-LinkV2、V3）• ブートローダ･インタフェース（UART、USBデバイス･ファームウェア･アップグレード･クラス）• ST-LinkV3ブリッジ• STM32内蔵/外付けFlashの消去、プログラム（セキュア、またはノン・セキュア）• オプション・バイト・プログラミング

STM32CubeProgrammerはSTM32のマイクロコントローラをプログラミングするためのオールインワンマルチOSソフトウェアツー
ルです。
STM32CubeProgrammerはGUI(グラフィカルユーザインタフェース)およびCLI(コマンドラインインタフェース)バージョンで提供されます。
デバッグインタフェース（JTAGとSWD）とブートローダインタフェース（UARTとUSB）の両方を使用して、デバイスメモリの読取り、書込み、およびベリファイを行うための、簡単で効率的な環境を提供します。
追加された機能は、:• マルチOSサポート:Windows®、Linux®、macOS®
• デバッグインタフェースおよびブートローダインタフェースのサポート• ST-LinkV3ブリッジ
STM32CubeProgrammerは、USBデバイスにファームウェアイメー
ジをダウンロードするように設計されたデバイスファームウェア
アップグレード（DFU）USBクラスをサポートしています。

16