STM32H7 - DBG
デバッグとトレース
1.0版

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

1

概要

2

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

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

2デバッグ･アーキテクチャ
デバッグ
ポート

JTDI

ITM1

AHB

nJTRST

Cortex-M7 core

AHB-AP1

ROM
table1

DWT1

FPB1

ITM1

AHBD

System busmatrix

DBG_MCU

Timestamp

Cortex-M4(デュアルコア･デバイスのみ)

ROM
table1

Cortex-M7core

EPPB

ETM1

CTI1

APB mux
ROMtable1

ATB(Trace Bus)
CTM
(Cross Trigger Matrix)

ETM1

CTI1

APB-AP1DAPBUSPPB

JTCK/SWCLK

AHB-AP1

APB-D(System Debug Bus)

ROM
table1

Cortex-M4core

SWJ-DP1

JTDO

FPB1

ReplicatorDAPBUS

JTMS/SWDIO

DWT1

Replicator

JTAG/Serial-wire port

AHB-AP1

Cortex-M4 core

Debug subsystem

Cortex-M7

APB-D
Timestamp
generator1

CTM

ROM
table1

Funnel1

Funnel1
Serial Wire
Trace port

ETF1

Trace Subsystem

TRGOUT
TRGIO
TRGIN

3

CTI1

SR
A
M

SWO1

TRACESWO

Trace port
TPIU1

トレース
インタフェース

TRACECKTRACED[3:0]

デバッグとトレースのインフラストラクチャは、次の4つの異なる機能ドメインで構成されています。
• デバッグアクセスインフラストラクチャ - デバッグポート（SWJ-DP）およびアクセスポート（AP）を含み、外部のデバッガがターゲットのトレースおよびデバッグ機能にアクセスできるようにします。
• トレースインフラストラクチャ：シリアル（SWO）およびパラレル（TPIU）のト
レースポート、トレースフローを平滑化するためのトレースFIFO（ETF）、各ソースからのトレースを1つのフローにまとめるためのトレースファンネルなどがあります。
• Cortex-M7コア-プロセッサと関連するトレースおよびデバッグユニット（DWT、FPB、ITM、およびETM）を含みます。
• Cortex-M4コア（デュアルコアデバイスのみ）
さらに、次のものを含むシステムデバッグ機能もあります。
• クロストリガインターフェイスとマトリックス(CTI、CTM)-これらは、両方のコアの同時停止、トレースのトリガなどを可能にします。
• グローバル・タイムスタンプ・ジェネレーター：異なるトレース・ソースに共通の時間基準を提供• DBG_MCU – デバッグ中のタイマのフリーズのような独自機能を提供します。
• 外部トリガ入出力 – 外部信号によるデバッグまたはトレースのトリガを可能としたり、外部の装置やコンポーネントを同期するためのトリガパルスを生成したりします。
3デバッグ･ポート4• デバッガはJTAG/SWDデバッグ･ポート経由でSTM32H7にアクセス• 標準の5ピンJTAGポートもバウンダリスキャンとDFTに使用• シリアル･ワイヤ･デバッグ（SWD）ポートはJTAGポートのうち2ピンだけ使用• デバッグが必要ではない場合、すべてのデバッグ･ピンは機能用として再割当て可能
PA13

PA14PA15PB3PB4JTAG/SWD*すべて

JTMS

JTCK

JTDI

JTDO

NJTRSTnJTRSTを除く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• 4つのアクセス･ポート（AP）がバス･マスタとして機能し、メモリとレジスタの読出し／書込みトランザクションをデバッガが実行可能
JTAG/SWDSWJ-DPDAPBUS

AP0(AHB-AP)

Cortex-M7(AHBポート)

AP1(AHB-AP)

D3 AHB相互接続

AP2(APB-AP)

システムデバッグバス(APB-D)

AP3(AHB-AP)

Cortex-M4(デュアルコアデバイスのみ)

AP0：Cortex-M7プロセッサコアに搭載されているデバッグ機能やトレース機能に、プロセッサのAHBDポートに接続されたAHBLiteバスを介してアクセスすることができます。
AP1：D3ドメインのAHBバスマトリックスへのアクセスを可能にします。これにより、D1およびD2ドメインがオフの場合でも、D3ドメインのメモリやペリフェラルを見ることができます。
AP2：システムAPBデバッグバス上のデバッグおよびトレース機能へのアクセスを許可します。すなわち、いずれかのプロセッサコアに含まれないすべてのコンポーネントが対象となります。
AP3：（デュアルコアデバイスのみ）Cortex-M4プロセッサコアに統合されたデバッグおよびトレース機能に、その内部AHBバスを介してアクセスできます。

5Cortex-M T&D機能

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

ROM
テーブル*

DWT

FPB

ITM

ATB(ITMトレース)

AHB
タイムスタンプ

Cortex-M
コア

ROM
テーブル
PPB

クロストリガマトリクス

CTI

ETM

ATB(ETMトレース)*C-M7に内蔵ETM

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

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

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

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

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

8• FPBを使用することでハードウェアのブレークポイントを設定することが可能• このクラスには、命令フェッチアドレスを監視し、一致が検出されたときにブレークポイント命令を返す8つのコンパレータが含まれる• ブレークポイント命令が実行されると、プロセッサはデバッグ･モードで停止

デュアルコアデバイスでは、Cortex-M4のブレイクポイントユニット（FPB）は、Flashメモリのパッチもサポートしています。この機能は、指定されたアドレスの揮発性メモリに実行を移すことで、誤ったコードをパッチすることを目的としています。
Cortex-M7では、FPBはフラッシュメモリのパッチングをサポートしていません。

8

計装トレース

9• ITMは次の4種類のソースからトレースパケットを生成• ソフトウェアトレース：
ソフトウェアは、32本のスティムラス･レジスタのいずれかに書込みを行う• DWTからのハードウェア･トレース･パケット
これはデータトレース･イベント、PCサンプル、カウンタの折り返しの可能性がある• ローカル･タイムスタンプ
ITMの21ビット･カウンタが、前のパケットと比較したタイムスタンプを各トレースパケットに供給• グローバル･タイムスタンプ
タイムスタンプは、TSGENのシステム全体の64ビット･タイムスタンプを使って生成することも可能• トレースパケットをATBのトレースバスで出力

ソフトウェアは、32 x 32ビットの軽装トレースマクロセル(ITM)スティムラスレジスタのいずれかに直接書込みを行って、パケットを生成します。各ポートの許可レベルはプログラムで設定できます。ソフトウェアが有効なスティムラスポートに書き込むと、ITMはFIFOに書き込むパケットの中に、ポートのID、書込みアクセスのサイズ、および書き込まれたデータを統合します。ITMはFIFOからトレースバスにパケットを出力します。スティムラス
ポートレジスタを読み出すと、ビット0のスティムラスレジスタのステータス（エンプティまたはペンディング）を返します。
パケットが複数のソースから同時に生成される場合、ITMはパケットの出力順番についてアービトレーションを行います。このシートには、優先度の高いものから順にソースがリストアップされています。
タイムスタンプジェネレータ（TSGEN）は、すべてのトレースパケットのタイムスタンプに64ビットの共通のタイムベースを提供します。これにより、異なるソースから送られてきたトレースを、トレースが生成された時刻に応じて揃えることができます。ローカルのタイムスタンプは同期しておらず、異なる周波数で動作しているため、トレースが生成された正確なタイミングを知ることはできません。
注：Cortex-M4は、グローバルタイムスタンプの48LSBのみを使用します。
Cortex-M7では、64ビットすべてを使用します。

9

命令トレース

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

STM32H7では、組み込みトレースマクロセル（ETM）は命令トレース専用に設定されているため、トレース情報にデータアクセスは含まれません。
Cortex-M7のETMは、Cortex-M3/M4のETMとは全く異なっています。

10トレース･インフラ･ストラクチャ

11• ITMおよびETMからのトレース情報は、AMBAトレースバス（ATB）を経由して、1つまたは複数のトレースシンクに送られる• ルーティングは、2つのATBインフラ･ストラクチャ･コンポーネントによって実行• レプリケータ: 2つのATBブランチでトレースパケットを複製

Cortex-M7

FunnelITM

Replicator• ファネル-複数のATBブランチを1つにまとめたもの

SWO

CTI

Cortex-M4*

FunnelReplicator

ETM

ITM

TRACESWO

ETF

TPIU1

TRACECKTRACED[3:0]

8 kbyteSRAM

ETM* Dual-core devices only

ITMとETMは共にトレースストリームを生成し、トレースファネルを用いて結合します。例えば、ある入力から別の入力に切り替わるまでに受信するバイト数を変更することができます。また、トレースをフィルタリングすることも可能です。例えば、ITMトレースをTPIUから削除することができます（代わりにSWOに出力することができます）。
ETMではなくITMからのトレースをシングルワイヤートレースポー
トに導くことができます。デュアルコアデバイスでは、両方のコアからのITMトレースをSWOに導き、SWOのトレースファネルで結合することができます。しかし、SWOにはフォーマットがないため、ト
レースポートアナライザでトレースストリームを分離することはできません。そのため、ファンネルを使って一度に1つのITMを手動で選択し、SWOに出力することをお勧めします。両方が必要な場
合はTPIUを使用してください。

11トレースシンク12• トレースパケットは次の3種類の転送先（シンク）の1つに送られる• 組み込みトレースFIFO（ETF）• トレースパケットをサーキュ･ラバッファに格納できる
8KByteのメモリ
トレースは、ソフトウェアやデバッガで読み出すことが可能• トレースポート･インタフェース（TPIU）• トレースパケットは、同期クロック信号とともに、4ピンパラレル･ポートを通じてデバイスから出力される
これには、ULINKproやDStreamなどのトレースポートアナライザ･プローブを接続する必要がある• シングルワイヤ･トレースポート（SWO）• ITMトレースは、SWOに導くことが可能であり、非同期プロトコル（NRZまたはマンチェスタ）を用いて出力される
この出力は、ST-Linkその他のアダプタと多くの市販デバッガツールを用いて読込み可能

ETFは、オンチップでトレースを保存するためのトレースバッファとして使用できます。トレースは、ソフトウェアやデバッガで読み取ることができ、トレースポートを介して削除することもできます。
サーキュラバッファとして構成されている場合、トレースは継続的に保存されるため、最新のトレースが最も古いトレースを上書きします。また、FIFOフルフラグを使用すると、バッファが一杯になった時点でトレースを停止し、特定の時点でのトレースをキャプチャすることができます。
ETFは、（ハードウェアモードでは）TPIUへのトレースの流れをスムーズにする役割も果たします。トレースストリームはバースト的な性質を持ち、瞬間的な帯域幅はトレースポートの帯域幅よりもはるかに高いため、バッファはピークを吸収し、トレースポートの最大連続帯域幅にフローを調整します。

12

トレース･ポート

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

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

13

クロストリガ･インタフェース• CTIは、その他のデバッグ･コンポーネントとトレース･コンポーネントに対するトリガ･イベントを伝播• ハードウェア･ブレークポイント

System CTI

トレース
APB-D
TRGIN

• トリガ･イベント･ソースの例：• データ･ウォッチポイント

TRGOUTETFFULLETFACQCOMPETFETFTRIGETFFLUSH
TPIUTRIGTPIUTPIUFLUSH• プロファイリング･カウンタ･イベント

AHBD

COMPMATCH0
COMPMATCH1
CortexM7 CPU

COMPMATCH2
EDBGRQDBGRESTART
nIRQ1• プロセッサの停止／再起動• トリガ･イベントにより転送先で発生する事象：• トレースの開始／停止

nIRQ2
ETMEXTOUT0ETMEXTOUT1ETMETMEVENTS0ETMEVENTS1APB-D
HALTEDETMTRIGGER0ETMTRIGGER1CortexM4 CPU

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

TRIGOUT0TRIGIN2TRIGIN1TRIGOUT3TRIGOUT4TRIGOUT2TRIGOUT1Cortex-M7 CTI
TRIGIN0TRIGIN1TRIGIN2TRIGIN3TRIGOUT0TRIGOUT7TRIGOUT1TRIGOUT2TRIGIN4TRIGIN5TRIGOUT4TRIGOUT5Cortex-M7• トレースバッファのフラッシュ• プロセッサの停止／再起動

TRIGIN0CTM channels [3:0]
HALTED• トレースバッファのフル／エンプティ• 外部トリガ信号

14nIRQ1nIRQ2ETMTRIGOUTETMETMEXTIN0ETMEXTIN1Cortex-M4 CTITRIGIN0TRIGIN4TRIGIN5TRIGIN6TRIGOUT0TRIGOUT7TRIGOUT1TRIGOUT2TRIGIN7TRIGOUT4TRIGOUT5Cortex-M4(デュアルコアデバイス)

クロストリガは、デュアルコアデバイスで使用して両方のコアを同時に停止させることができます。片方のコアがブレークポイントをヒットすると、その「停止状態」出力（デバッグモードに入ったことを示します）がもう一方のコアに伝搬して、そちらもデバッグモードに入ります。同様に、両方のコアが同時に再起動することもできます。
クロストリガ機能は、外部トリガ信号（IOピン1本のエッジなど）でプロセッサを停止させるためにも使用できます。
各Cortex-Mプロセッサ専用のCTI（クロストリガインタフェース）と、トレースコンポーネント（ETF、TPIU）および外部トリガ信号に接続されたシステム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やFDCANタイムアウト･カウンタをフリーズ• ドメイン･デバッグ･クロックのイネーブル• 各パワードメイン内のデバイスをデバッグするためのクロックを、必要のないときは無効にし、電力を節約• 外部トリガ方向• 双方向TRGIO外部トリガピンの方向（入力／出力）を制御

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