STM32H7 - DMA
ダイレクト･メモリ･アクセス（DMA: Direct Memory Access）コントローラ

1.0版

STM32 ダイレクトメモリアクセスコントローラ（DMA）のプレゼン
テーションへようこそ。ここでは、STM32 ペリフェラルのデータ転送の処理に広く使われている本モジュールの主な特徴を説明します。

1

概要
IRQ

DMA1

PERIPH
ポート• DMA1/2 の特徴• デュアル AHB マスタバス• 柔軟な設定

ストリーム

MEM
ポート

AHB

2

ストリーム

• ハードウェアおよびソフトウェアの優先順位管理• 設定可能なデータ転送モード• ペリフェラルからメモリ、メモリからペリフェラル、メモリからメモリのモード

ストリームあたり最大 105 のリクエスト

IRQ

DMA2

PERIPH
ポート

ストリーム

AHB
ストリーム

ストリームあたり
最大 105 のリクエスト

MEM
ポート

アプリケーション側の利点•••

D2 ドメインのタイマ、A/D コンバータ、および通信ペリフェラルの DMA サポート
CPU からデータ転送管理負荷を軽減
簡単な統合

STM32H7シリーズに搭載されているDMA（ダイレクトメモリアクセス）は、ペリフェラルとメモリの間、およびメモリとメモリの間の高速データ転送に使用されます。DMA により、CPU を動作させずに、データを高速で移動することができます。これによってCPU リソースを他の動作のために確保できます。
この DMA コントローラでは、高機能なバスマトリックスアーキテ
クチャに基づいて強力なデュアル AHB マスタバスアーキテク
チャと、独立した FIFO を組み合わせて、システムのバンド幅を最適化しています。

2

主な特徴

3

• DMA1 と DMA2 において 16 の独立した設定可能なストリーム• ストリームは転送元と転送先の間の単方向転送リンクを提供• それぞれのストリームに対するハードウェア･リクエストまたはソフトウェア･トリガ• ソフトウェアでプログラム可能な優先順位（等しい場合はハードウェアによる優先順位）• 独立した柔軟性の高いストリーム設定• 完全にプログラム可能な転送（データ形式、インクリメント･タイプ、アドレス）• 独立したストリーム割込みフラグ（1/2 転送、転送完了、転送エラー、…）• ストリームごとの専用の 4x32ビット FIFO メモリ（FIFO モードは有効化／無効化が可能）• サーキュラ･バッファおよびダブル･バッファ管理のサポート• 次のエラーの場合、障害ストリームは自動的に無効化• DMA 転送エラー、ダイレクト･モード･エラー

2 つの DMA コントローラ（DMA1 と DMA2）は合計 16 ストリームを搭載し、それぞれが多くのペリフェラルからのメモリアセスリクエストを管理します。各ストリームは柔軟なハードウェアリクエストを受け、ソフトウェアトリガをサポートしています。ストリームのソフトウェア優先順位はプログラム可能で、優先順位が等しい場合はハードウェア優先順位が使用されます。ストリームは個別に設定可能です。各ストリームでは、独自のデータ形式、インクリメントタイプ、転送元および転送先の両方のデータアドレスを保持します。
ストリームごとの 4ワードの FIFO によって、データのパッキング／アンパッキングおよびバースト転送を実行できます。
独立したストリーム割込みフラグによって、1/2 転送、転送完了、転送エラーイベントをトリガすることができます。転送エラーの場合、障害ストリームは自動的に無効になり、他のアクティブなDMA ストリームに影響を及ぼしません。

3

個別の DMA ストリームの柔軟性

4• プログラム可能な機能• 独立した転送元および転送先のデータ･サイズ（8/16/32ビット）• 独立した転送元および転送先の転送タイプ：•シングルまたはインクリメンタル･バースト（4x、8x、または 16xビート）• 独立した転送元および転送先アドレス• 独立した転送元および転送先のポインタアドレス･インクリメント• プログラム可能な転送データ数：最大 65,535リクエスト• サーキュラモード
• 連続データ･フローでサーキュラ･バッファを処理• 転送元および転送先のアドレスは自動的にリロード• データ転送サイズは自動的にリロード• ダブル･バッファ･モード（ダブル･バッファ･モードは有効化／無効化が可能）

ストリームごとに、転送元および転送先のデータサイズ形式を個別に設定可能です（ 8、16、または 32ビット パケット）。転送元と転送先の転送タイプは、シングルモードまたはバーストモードに個別にプログラムできます。転送元および転送先のアドレスおよびポインタのインクリメントも個別に設定可能です。転送データサ
イズは最大 65535 まで事前にプログラムできます。データの連続フローをサポートするためにサーキュラバッファモードが使用できます。転送元と転送先のアドレスおよび転送データ数は、転送が完了すると自動的にリロードされます。ダブルバッファモード
では、2 つのメモリバッファ間の切り替えをハードウェアで処理できます。

4ストリーム転送管理

5• メモリ間モード• ストリームが有効になるとすぐに転送開始（ハードウェア･リクエストなし）• ペリフェラルからメモリ、メモリからペリフェラル• DMA ペリフェラル･ポートでの転送は、ハードウェア･リクエストごとに発生• 転送が完了すると、リクエストは確認応答される• ペリフェラル DMA リクエスト信号は、DMA リクエスト･ルータ（DMAMUX）を介してDMA コントローラのストリーム･リクエストラインにルーティングされる

メモリ間モードでは、1 つのアドレス位置から別のアドレス位置にハードウェアリクエストなしに転送ができます。ストリームが設定されて有効になると直ちに転送が開始されます。ペリフェラルへ、またはペリフェラルからデータが転送される場合、選択されたペリフェラルからのハードウェアリクエストを使用して、DMA ペリフェラルポートでのデータ転送がトリガされます。転送が完了すると、リクエストは確認応答されます。

5

FIFO：データ･パッキング／アンパッキング

6• サポートされている動作：• 8ビット / 16ビット  32ビット / 16ビット （パッキング）• 32ビット / 16ビット  8ビット / 16ビット （アンパッキング）
データのパッキング例 （8ビット  32ビット）

データのアンパッキング例 （32ビット  16ビット）

T1
A1T2A1B1C1

D1T3A2

B2C2

D2T1

A1 B1 C1 D1

A1 B1 C1 D1

A2 B2 C2 D2

A2 B2 C2 D2

T1

T1

T2

B1
T2

A1 B1

A1 B1 C1 D1
T2

C1 D1

A2 B2 C2 D2
T3

C1A2 B2

T4
T4

D1C2 D2

T5
A2

DMA FIFOT6

DMA FIFO

B2T7C2T8D2••••

転送元データ幅 = 8ビット
転送先データ幅 = 32ビット
転送元から DMA FIFO へ 8 回の転送が実行
DMA FIFO から転送先へ 2 回の転送が実行

 転送元データ幅 = 32ビット
 転送先データ幅 = 16ビット
 転送元から DMA FIFO へ 2 回の転送が実行
 DMA FIFO から転送先へ 4 回の転送が実行

FIFO モードが有効になっている（ダイレクトモードが無効になっている）場合、DMA コントローラは転送元と転送先の間のデータ形式の違いを処理します（データのパッキングとアンパッキング）。
内部 FIFO によって、DMA ストリームではソフトウェアオーバーヘッドと AHB バス上のトランザクション数を削減できます。

6

FIFO：閾値とバースト･モード

7• 閾値レベルによってメモリへの／メモリからのデータ転送がトリガされる• 各ストリームには個別の設定可能な閾値レベルあり• 使用可能な 4 つの閾値レベル：
FIFO ¼ フル、FIFO 1/2 フル、FIFO ¾ フル、FIFO フル• バーストモード：

メモリ･データサイズバイト• バーストモードは FIFO モードが有効なとき（ダイレクトモード無効時）にのみ使用可能• 使用可能なバーストモード：•

INC4：1バースト = 4ビート
（4ワード、8ハーフワード、または 16バイト）•INC8：1バースト = 8ビート
（8ハーフワード、または 16バイト）•INC16：1バースト = 16 ビート（16 バイト）ハーフワードワード

バースト･サイズ許容される閾値
レベル4ビート（INC4）¼、½、¾、フル8ビート（INC8）½、フル16ビート（INC16）

フル4ビート（INC4）½、フル8ビート（INC8）

フル4ビート（INC4）フル• FIFO 閾値はバーストサイズに適合している必要がある

シングルモードまたはバーストモードでは、FIFO 内のデータがメモリに／メモリから転送されるタイミングが FIFO 閾値によって決まります。
閾値レベルには、ストリームごとに「FIFO フルの 1/4」から「FIFOフル」までの 4 つの設定可能なレベルがあります。メモリポートの転送方向に応じて、FIFO 閾値に達したときに、FIFO はメモリ位置からデータで充填されるか、またはメモリ位置へデータが排出されます。
バーストモードは FIFO モードが有効なときにのみ使用できます。
バーストモードに設定している場合、FIFO 閾値はバーストサイズに適合している必要があります。そうすることで、DMA ストリームにおいて、FIFO でバーストデータを利用できるようになり、バースト転送を実行することができます。

7

サーキュラおよびダブルバッファ･モード

8• サーキュラ･モード：• このモードでは、すべての FIFO の機能と DMAイベント（TC、HT、TE）を使用可能• データ項目の数は、自動的にリロードされ、転送が再開される• このモードはメモリ間転送では使用できない• ダブルバッファ･モード：（サーキュラ･モードのみ）• 2 つのメモリアドレスレジスタを使用可能（DMA_SxM0AR と DMA_SxM1AR）• 2 つのメモリバッファ間の切り替えをハードウェアで処理できる• メモリ間モードは禁止

DMA_SxM0AR
DMA_SxM1AR
DMA_SxPAR
CT

TC

メモリ位置 1メモリ位置 0

CT = 1HT
CT = 0

ペリフェラルのデータレジスタ• どちらの転送先がデータ転送に使用されているかを監視するために、フラグと制御ビット（CT）が利用できる• メモリ位置 0 または 1 への転送が完了したとき、TC フラグがセット

DMA コントローラはサーキュラモードをサポートしており、一度に転送するデータ項目の数を設定し、転送完了イベント後に自動的に転送を再開できます。ダブルバッファモードは、サーキュラモードでのみ使用できます。それによって、転送完了イベントが発生するたびに、ハードウェアによって 2 つのメモリアドレス間の切り替えを自動的に行うことができます。ダブルバッファモードでは、どちらの転送先がデータ転送に使用されているかを監視するために、ステータスフラグと制御ビット（CT）が利用できます。

8

DMA コントローラ
dma[1,2]_str7

9DMA1/2

SW_Trigger

低優先度リクエスト

SW_Trigger

dma[1,2]_str1

SW_Trigger

dma[1,2]_str0

高優先度リクエスト

DMA コントローラでは、ストリームごとに最大 115チャネル（リクエスト）を備えた 8 つのストリームへのアクセスが提供されています。8 つのストリームのそれぞれは、専用のハードウェア DMAチャネル（リクエスト）に接続されます。
DMA ストリームリクエスト間の優先順位は、ソフトウェアによってプログラム可能です（最高、高、中、低の 4レベル）。レベルが等しい場合はハードウェアによって決まります（リクエスト 0 はリク
エスト 1 よりも優先、など）。
DMA コントローラのストリームリクエストのそれぞれは、DMA リクエストルータ（DMAMUX）によって最大 115 まで可能なペリフェラルからの DMA リクエストに接続することができます。この選択は、ソフトウェアによって設定可能であり、これによって多くのペリフェラルが DMA リクエストを発生できるようになります。
各ストリームは、メモリ間転送のためのソフトウェアトリガもサポートしています。

9

割込み

10

• 各チャネルの割込みイベント
割込みイベント

説明

1/2 転送データ転送サイズの半分が完了した時にセット転送完了

データ転送サイズの全部が完了した時にセットされ、MDMA または DMAMUX へのトリガとして使用できる

転送エラー

データ転送中にバスエラーが発生した時にセット

FIFO エラー

FIFO アンダーラン／オーバーラン状態、または閾値-バーストサイズの不適合のときにセット

ダイレクトモードエラー

メモリインクリメントが無効になっているとき、ペリフェラルからメモリのモードで、ダイレクトモードにおいてのみ起きえる新しいデータがメモリ位置に転送されようとしているが、前の転送がまだ完了していないことを示す

各 DMA ストリームは、この割込みイベント群を使用して設計されています。データの半分が転送されると、1/2 転送割込みフラグがセットされます。転送が完了すると、転送完了フラグがセットされます。データ転送中にエラーが発生すると、転送エラーフラグがセットされます。FIFO エラーフラグは、DMA の FIFO アンダーラン／オーバーラン状態が検出されるか、閾値-バーストサイズの不適合がある場合にセットされます。ダイレクトモードエ
ラーフラグは、ペリフェラルからメモリのモードで、ダイレクトモードにおいて、メモリインクリメントが無効になっているときに、セットされます。これは、新しいデータがメモリ位置に転送されようとしているが、前の転送がまだ完了していないことを示します。

10

関連ペリフェラル

11• このペリフェラルに関連している下記のトレーニングをご参照ください• DMA request router （DMA リクエスト･ルータ）• Master direct memory access controller（マスタ・ダイレクト・メモリ･アクセス･コントローラ）

詳しい情報については、DMA リクエストマルチプレクサ（DMAMUX）とマスタ・ダイレクト・メモリアクセス（MDMA）ペリ
フェラルに関連するトレーニングスライドをご参照ください。

11