STM32MP1 - SDMMC
SD/SDIO/MMC ホストインタフェース
1.0 版

こんにちは、STM32 SDMMC コントローラモジュールのプレゼンテーションへようこそ。このプレゼンテーションでは、SD
カード、MMC カード、または SDIO デバイスの MPU への接続に使用するコントローラの主な機能について説明します。

1

概要• マルチメディアカード（MMC）、セキュアデジタル（SD）メモリカード、SD I/O
デバイス（SDIO）との通信インタフェー
スを提供• 完全に設定可能• SD （6.0）、SDIO （4.0）、およびMMC （5.1） 仕様に準拠• 統合 DMA

2

アプリケーション側の利点• SD のデフォルト速度（<25MHz）、ハイスピード（最大50MHz）、UHS-I シングルデータレート（最大 204MHz）、
ダブルデータレート（最大 50MHz）をサポート• eMMC レガシー互換（<26MHz）、ハイスピード（最大200MHz）、およびダブルデータレート（最大 52MHz）をサ
ポート• 必要なのは数本のピンのみ• 電圧コンバータをサポート• データストレージを簡単に拡張可能• リンクリストによる DMA をサポート

SDMMC コントローラは、マイクロコントローラがマルチメディ
アカード、SD メモリカード、および SDIO デバイスと通信する
際の通信インタフェースを提供します。このインタフェースは完全に設定可能で外部メモリを簡単に接続できるため、より多くのメモリが必要なときに大容量ストレージ機能を確保できます。アプリケーションは、メモリカードとのインタフェースに使用するピン数が減ることからメリットが得られます。
SDMMC インタフェースの使用により、アプリケーションは外部 Flash メモリでのハイスピードの読出しおよび書込み操作を簡単に管理できます。

2

主な機能

3

• SDMMC ホスト機能• 1bit、4bit、8bit のデータバスモードをサポート• CPU の負荷軽減のため、IDMA によるデータ転送をサポート• 安全なデータ転送（このオプションが STM32 製品で利用可能な場合）• 最大 208MHz に設定可能なクロックジェネレータの動作• 省電力機能をサポート• 可変遅延チューニングをサポート（遅延ブロックが関連付けられている場合）• SDIO は、マルチバイト、割込みシグナリング、読出しウェイト、サスペンド／
レジューム操作などの機能をサポート• MMC は、ストリーム・モード、ブート、スリープ、および IRQ 操作の待機をサ
ポート

SDMMC コントローラは、1bit モード（デフォルト）、4bit モード、および 8bit モードのデータバス幅をサポートして、データ
スループットを向上させます。SDMMC インタフェースは内部
DMA（IDMA）と相互接続して、データの読出しまたは書込み
転送周期中に CPU の負荷を軽減します。SDMMC クロック
ジェネレータは、初期化フェーズで最大 400kHz、カードに対しては最大 204MHz の信号をハイスピードモードで生成します。
電力効率を高めるため、コマンドバスとデータバスがアイドル
ステータスのときに SDMMC クロックを無効にします。コント
ローラは SD I/O モジュールとインタフェース接続ができます。
SD I/O モジュールは読出しウェイト、サスペンド／レジューム
操作などの高度な機能に加え、1バイトおよび 4bit モードでのマルチバイト転送や割込みシグナリングなどの標準処理に対応しています。
MMC モードでは、ストリーム・モード、ブートおよびスリープ
操作をサポートします。

3

ブロック図4SDMMC

DMA リクエスト
割込みリクエスト

SDMMC アダプタ

IDMA *

制御ユニットアダプタ
レジスタ

SDMMC_CKSDMMC_CMD

コマンドパス

カードバス

マスタ AHB

AHB
インタフェース

SDMMC_D[7:0]

スレーブ AHB

RCC

SDMMCxSEL

データパス

FIFO
HCLK

SDMMCCLK* IDMA：Internal DMA （内部 DMA）

SDMMC コントローラは、カードとのインタフェースに必要なすべての SD/SDIO および MMC 機能を提供する SD/MMC
バスマスタです。
このコントローラは「SDMMC アダプタ」と「AHB インタフェー
ス」で構成されています。
「SDMMC アダプタ」は、クロック生成、コマンド、データ転送などの機能を提供し、「AHB インタフェース」は、制御およびステータスレジスタ、FIFO バッファ、およびリンクリストをサポートする IDMA と割込みリクエストを管理します。
SDMMC コントローラには、「AHB インタフェース」用の AHB
クロック（HCLK）と「SDMMC アダプタ」用の SDMMC クロック（SDMMCCLK）の 2 つのクロックを使用できます。

4

制御ユニット

5• SDMMC_CK クロック（最大50MHz）は、クロック制御モジュールにより管理されます。
• SDMMC_CK は 10bit プリスケーラを使用します（またはカードには
SDMMCCLK が直接クロックを供給します）。
• 省電力モード：バスがアイドル状態のときに SDMMC_CK クロック出力を無効にできます。

電源管理モジュール

AHB
インタフェース
レジスタ

クロック制御モジュール

SDMMC_CK

コマンドパスおよびデータパスへ

SDMMC アダプタの制御ユニットには、電源管理モジュールとカードクロック（SDMMC_CK）用のクロック分周器を備えたクロック制御モジュールが含まれています。
クロック制御モジュールは SDMMC_CK クロック生成用の10bit プリスケーラを備え、これにより、SDMMCCLK から低い方の SDMMCCLK/2046 までをカバーするクロックを生成します。
DDR メモリデバイスは、1 分周モードではサポートされていません。
コントロールユニットは、バスがアイドル状態のときにSDMMC_CK 生成を無効にします。

5

AHB インタフェース

コマンドパス
ステータス
フラグ

6

制御ロジック コマンドタイマ

SDMMC_CMDin

CRC
CMD

SDMMC_CMDout

シフトレジスタ応答
コマンドパス

コマンドパス回路は、コマンド／レスポンスシーケンスのプログラムに使用されます。
有効にすると、コマンドパスは SDMMC_CMD ピンのコマン
ドインデックスと引数をシフトアウトします。最後のペイロード
ビットが送信された後 CRC7 が計算され、終了ビットの生成
前にバスに送信されます。
SDMMC_CMDin と SDMMC_CMDout は、SDMMC_CMD
ピンの動作を示す 2 つのモードです。
レスポンスが予想される場合、コマンドパスはSDMMC_CMDin に設定され、デバイスのレスポンスを待ちます。

6

コマンドパスステートマシン

7

ステータスと遷移条件
CPSM イネーブルとペンディングコマンド

リセット

CPSM イネーブルと
ブート

アイドル

レスポンス受信

受信ペンディング

通常ブート完了
タイムアウトブート
CPSM イネーブルとコマンドスタート

最後のデータ

コマンド送信レスポンスなし

レスポンス
スタート

代替ブート完了

ウェイト
送信

コマンド送信応答待ち

コマンドの送受信は、コマンドパスステートマシン（CPSM）により制御されます。
コマンドまたはレスポンスが進行中でない場合、コマンドパスはアイドル状態となります。
コマンド送信のため CPSM が有効化されると、コマンドパスはコマンドの最後のビットが送信されるまで送信状態に移行し、その後の CPSM のステータスはレ
スポンスが予期されるかどうかに応じて異なります。つまり、レスポンスが予期されないと CPSM はアイドル状態に戻り、そうでない場合、CPSM はウェイト状態に移行してコマンドピンのスタートビット（レスポンス送信の開始）を待ちます。
割り当てられた時間内にレスポンススタートビットが検出されると、CPSM は受信状態に移行します。レスポンスの最後のビットを受信した後、CPSM は受信した CRC を使用してレスポンスの整合性を検証し、アイドル状態に戻ります。
レスポンスの開始が検出されない場合、CPSM はタイムアウト後にアイドル状
態に戻ります。
CPSM は、データ転送の終了と同期してコマンドを送信するように設定できます。
この機能を有効にすると CPSM は保留状態に移行し、MMC ストリーム転送の終了を待ちます。
最後のデータ信号がデータパスによってトリガされると、CPSM は送信状態に移行します。
CPSM の開始について、通常のブート手順で行うか代替ブート手順で行うかを設定により選択できます。このブートフェーズをトリガするために、CPSM はブー
ト状態に移行します。通常ブートのすべてのデータを受信すると、CPSM はブー
トフェーズを終了しアイドル状態に戻ります。代替ブートモードのすべてのデータを受信すると、CPSM は送信状態に移行し、CMD0 リセットコマンドを送信してブートフェーズを終了します。

7

サポートするコマンド

8

すべてのカードに対応

コマンドの内容（6bit + 32bit）：
コマンド、アドレス情報またはパラメータ

トランスミッタビット：「1」 = ホストコマンド

CRC：
7bit 対象

スタートビット：
常に「0」

0 1

CMD_Index

引数

CRC

終了ビット：
常に 「1」

1（合計長 = 48bit）

SDMMC コントローラは、コマンドインデックスと引数を設定する際に高い柔軟性を発揮します。引数を設定するための
柔軟な 32bit レジスタとコマンドインデックス用の独立した6bit フィールドを備えたこのアーキテクチャにより、ファーム
ウェアはあらゆるタイプのカードにアクセスできます。
コマンドパスステートマシンは、コマンドインデックスや引数に制限なしに、すべてのコマンドトークンを生成できます。さらに、スタートビット、トランスミッタビット、CRC、および終了ビット
フィールドが自動的に生成され、バスに送信されます。

8

サポートするレスポンス

9

ショートおよびロングレスポンスタイプに適合
ショートレスポンス（合計長 = 48bit）

例：R1

6bit

0 0

32bit

コマンドス
テータス

CMD_Index

0 0

CRC 1

6bit

32bit

111111b

OCR

7bit
111111b

1

予約済み
例：R3

動作条件レジスタ

鏡像コマンドロングレスポンス（合計長 = 136bit）

0 0

6bit

120bit111111b
予約済み

CID または CSD レジスタR2 レスポンス

CRC

1

カード識別またはカード固有のデータレジスタ

レスポンスは、前のコマンドへの応答としてカードから送信されるトークンです。レスポンスには、ショートとロングの 2 種類があります。
4 つの 32bit レスポンスレジスタを持ちレスポンスには制約がないた
め、SDMMC インタフェースはロングレスポンスとショートレスポンスの両方をサポートし、カードを正しく初期化して通信します。
ショートレスポンスの全長は 48bit で、ミラーリングされたコマンドイン
デックス、32bit のコマンドステータス、スタートビット、ストップビット、
CRC7 チェックサムで構成されます。ショートレスポンスを受信すると、コマンドステータスが SDMMC_RESP1 レジスタに保存され、ミラーリングされたコマンドインデックスが利用可能な場合は、SDMMC_RESPCMD レジスタにコピーされます。
ロングレスポンスの全長は 136bit で、120bit の CID/CSD レジスタの内容と、スタートビット、ストップビット、CRC7 チェックサムで構成されます。ロングレスポンスを受信すると、CID/CSD カードレジスタが4 つの SDMMC_RESPx レジスタのいずれかにコピーされます。
SDMMC インタフェースは、スタートビットの自動検出、コマンドイン
デックス抽出、32bit または 128bit のレスポンス抽出、CRC7 の自動検証も備えています。

9

SDMMC コマンド処理

10

CPSM は標準のタイミング制約に対応

ホスト駆動のバス
デバイス駆動のバス

SDMMC_CK

コマンド

<=64

応答

>=8

コマンド

CPSM の状態

送信

ウェイト

受信

アイドル

送信

SDMMC_CMD

ホスト

入力

デバイス

ハイインピー
ダンス

ホスト

SDMMC_ARG および SDMMC_CMD レジスタがCMDINDEX、WAITRESP = 「01」または「11」、および
CPSMEN = 「1」でプログラムされると、CPSM はアイドル状
態から送信状態に移行し、ホストは SDMMC_CMD ラインの駆動を開始してコマンドをカードに送信します 。

10

SDMMC コマンド処理

11

CPSM は標準のタイミング制約に対応

ホスト駆動のバス
デバイス駆動のバス

SDMMC_CK

コマンド

<=64

応答

>=8

コマンド

CPSM の状態

送信

ウェイト

受信

アイドル

送信

SDMMC_CMD

ホスト

入力

デバイス

ハイインピーダンス

ホスト

CPSM がレスポンスを待機するようにプログラムされている
場合（WAITRESP = 「01」、「10」、または「11」）、CPSM は
ウェイト状態に入り、コマンドタイマがスタートします。カードが最大 NCR 時間内に応答しない場合、タイムアウトフラグがセットされ CPSM はアイドル状態に戻ります。
レスポンスがプログラムされていない場合（WAITRESP =「00」）、CPSM はアイドル状態に戻ります。

11

SDMMC コマンド処理

12

CPSM は標準のタイミング制約に対応

ホスト駆動のバス
デバイス駆動のバス

SDMMC_CK

コマンド

<=64

応答

>=8

コマンド

CPSM の状態

送信

ウェイト

受信

アイドル

送信

SDMMC_CMD

ホスト

入力

デバイス

ハイインピー
ダンス

ホスト

スタートビットがデバイスによって駆動されるとコマンドライン
で検出され、CPSM は受信状態に移行します。レスポンスが完全に受信されると、受信した CRC コードと内部で生成されたチェックサムコードが比較され、SDMMC インタフェースス
テータスレジスタに適切なステータスフラグがセットされます。
その後、CPSM はアイドル状態に入ります。
CRCFAIL フラグがセットされるのは、CRC のあるレスポンス
で CRC チェックが失敗の場合のみです。

12

SDMMC コマンド処理

13

CPSM は標準のタイミング制約に対応

ホスト駆動のバス
デバイス駆動のバス

SDMMC_CK

コマンド

<=64

応答

>=8

コマンド

CPSM の状態

送信

ウェイト

受信

アイドル

送信

SDMMC_CMD

ホスト

入力

デバイス

ハイインピー
ダンス

ホスト

レスポンス付きの完全なコマンドを受信した後、CPSM はコ
マンドからコマンドへのタイミング（NCC）およびレスポンスからコマンドへのタイミング（NRC）の制約に対応するため、少なくとも 8 つの SDMMC_CK クロック周期の間、アイドル状態に留まります。

13データパス
ステータス
フラグ

制御
ロジック

14

データ
タイマ
SDMMC_Din[7:0]

送信
奇数シフト
レジスタ

奇数 CRC受信

SDMMC_Dout[7:0]

FIFO

偶数シフト
レジスタ

偶数 CRC
データパス

データパスは、SD/SDIO または MMC カードとの間でデータを転送します。
シングルデータレート（SDR）モードでは、各 SDMMC_CK クロッ
クサイクルで、データパスはバス幅の設定に応じて 1、4、または8bit を送信できます。
ダブルデータレート（DDR）モードでは、各 SDMMC_CK クロック
サイクルで、データパスはバス幅の設定に応じて 2、8、または16bit を送信できます。
転送ロジックは、SDMMCCLK クロックからクロックが供給されます。転送ロジックは 2 つのサブユニットに分割されます。1 つは送信データ用、もう 1 つは専用の制御ビットとステータスフラグ
で受信したデータ用です。
データバッファはデータパスの一部ではありません。送信および受信 FIFO ロジックは AHB ドメインにマッピングされます。各サ
ブユニットのすべての信号が再同期されます。
CRC 計算機は、カードとホスト間のデータの整合性を保証します。データパケットの最後に CRC が自動的に計算されます。
14

データパケットフォーマット

15

サポートされているデータバス幅
DAT0

1 番目のバイト
2 番目のバイト
3 番目のバイト
4 番目のバイト0 1 番目のバイト 2 番目のバイト
B7

B6

B5

3 番目のバイト

B4

B3

4 番目のバイト

B2

B1

B0

CRC16

1

0

ステータス

1

0

ステータス

1

1bit モード
DAT3

0

B7

B3

B7

B3

B7

B3

B7

B3

CRC16

1

DAT2

0

B6

B2

B6

B2

B6

B2

B6

B2

CRC16

1

DAT1

0

B5

B1

B5

B1

B5

B1

B5

B1

CRC16

1

DAT0

0

B4

B0

B4

B0

B4

B0

B4

B0

CRC16

1

SDR 4bit モード

シングルデータレート（SDR）モードでは、データパスは設定したデータバス幅に応じて、1 つ（SDMMC_D0）、4 つ（SDMMC_D0～SDMMC_D3）、または 8 つのピン
（SDMMC_D0～SDMMC_D7）からデータブロックを送信します。
まず、バス上でスタートビットが生成され、その後シーケンスの最初から最後のバイト（この例では 4 番目のバイト）で構成されたデータパケットが生成されます。次に、CRC16 と終了ビットがバスライン上のデータパケットに追加されます。

4bit のデータ幅設定では、各ラインそれぞれにスタートビット、
終了ビット、および CRC16 チェックサムが配置されます。
データがカードに送信されると、カードは SDMMC_D0 ピン
で CRC ステータスを返します。

15

データパケットフォーマット

16

サポートされているデータバス幅
DAT7

0

B7

B7

B7

B7

CRC16

1

DAT6

0

B6

B6

B6

B6

CRC16

1

1 番目のバイト

DAT5

0

B5

B5

B5

B5

CRC16

1

2 番目のバイト

DAT4

0

B4

B4

B4

B4

CRC16

1

3 番目のバイト

DAT3

0

B3

B3

B3

B3

CRC16

1

DAT2

0

B2

B2

B2

B2

CRC16

1

DAT1

0

B1

B1

B1

B1

CRC16

1

DAT0

0

B0

B0

B0

B0

CRC16

1

4 番目のバイト

0

ステータス

1

SDR 8bit モード

この例では、4バイトが 8bit モードの SDMMC バスから送信されます。SDMMC_CK クロックサイクルごとに、各データラ
インのスタートビット、終了ビット、および CRC16 チェックサ
ムでバイトがシフトアウトされます。
データがカードに送信されると、カードは SDMMC_D0 ピン
で CRC ステータスを返します。

16データパスステートマシン

17

ステータスと遷移条件
DPSM 無効化
無効化または FIFO アンダーラン
またはデータ終了または CRC 失敗

アイドル

無効化またはCRC 失敗またはタイムアウト

ビジー

無効化または
データ終了
イネーブル
および送信

無効化または Rx
FIFO エンプティまたはタイムアウト
またはスタートビット
エラー

DPSM 有効化、読出しウェ
イト開始および SD I/O モー
ド有効化
有効化かつ送信無し

読出しウェイト停止

Wait_R

エンドオブパケット
非ビジー

読出し
ウェイト

スタートビット

エンドオブパケットまた
はデータ終了または
FIFO オーバーラン

データ受信および読出
しウェイト開始および
SD I/O モード有効化

Wait_S
無効化または CRC 失敗

送信受信

データレディ

データパスステートマシン（DPSM）は、すべてのデータの送受信を制御します。DPSM がアイドル状態の場合、DPSM 有効化ビットと転送方向が設定されると、最初の遷移がトリガされます。
注：DPSM 有効化ビットは、SD、SDIO、および MMC カードとのデータ転送に使用しないでください。
データ送信の場合、有効にすると、DPSM はアイドルから Wait_S 状態に移行し、次に送信状態に移行します。
Wait_S 状態にある間、DPSM はデータ FIFO エンプティフラグがデアサートされるまで待機します。
FIFO バッファでデータが利用可能になると、DPSM は送信状態に移行します。
送信状態では、DPSM はデータレート、バスモード、および制御レジスタで設定されたバス幅に従ってカードへのデータ送信を開始します。
各データパケットの最後に、DPSM は内部で生成された CRC コードと終了ビットを送信し、ビジー状態に移行します。
ビジー状態では、DPSM は CRC ステータスフラグを待ちます。正の CRC ステータスを受信した場合、カードがビジーでなければ DPSM は Wait_S 状態に移行します。
Wait_S 状態から、DPSM は新しいパケット送信を開始するか、あるいはすべてのデータの送信完了ま
たは転送無効化により、アイドル状態に戻ります。
カードからの負の CRC ステータスまたは FIFO アンダーランエラーにより、カードがビジーでなければ、
DPSM は強制的にアイドル状態に戻されます。
データを受信すると、DPSM はアイドルから Wait_R 状態に移行します。バス上でスタートビットを検出すると DPSM は受信状態に移行し、パケット受信が完了するまでその状態を維持します。データ転送終了フラグとエラーが検出されない限り、DPSM は Wait_R 状態と受信状態を繰り返します。エラーまたは
データ転送終了フラグが検出されると、DPSM はアイドル状態に戻ります。転送が無効になっている場
合、DPSM はアイドル状態に移行します。
読出しウェイト状態は、他のコマンドまたは内部操作の実行のために転送を停止する SDIO 固有の操作です。この状態には、送信が進行中の受信状態またはアイドル状態から移行できます。ファームウェ
アが読出しウェイト停止動作をリクエストすると、DPSM は Wait_R 状態に移行し SDIO デバイスからのスタートビットを待ちます。
ブート確認応答の場合、DPSM はアイドルから Wait_Ack 状態に移行します。肯定確認応答を検出す
ると DPSM は Wait_R 状態に移行し、データ受信と同様にブートデータを受信します。ブート確認応答
タイムアウトまたは否定ブート確認応答受信の場合、CPSM は中止コマンドを送信し、DPSM はアイド
ル状態に移行します。

17

サポートされるデータバスフォーマット

18

ダブルデータレートでのブロック転送

2 番目の 4 番目のバイト
バイト

偶数バイト CRC16

DAT3

0

B B B B B B B B C C C C CC C C C C C CC C C C C C C C C C CC C C C C C CC C
7 7 3 3 7 7 3 3 1515 14141313 1212111110 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

1 番目のバイト

DAT20

B B B B B B B B C C C C CC C C C C C CC C C C C C C C C C CC C C C C C CC C
6 6 2 2 6 6 2 2 1515 14141313 1212111110 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

2 番目のバイト

DAT10

B B B B B B B B C C C C CC C C C C C CC C C C C C C C C C CC C C C C C CC C
5 5 1 1 5 5 1 1 1515 14141313 1212111110 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

DAT0

0

B B B B B B B B C C C C CC C C C C C CC C C C C C C C C C CC C C C C C CC C
4 4 0 0 4 4 0 0 1515 14141313 1212111110 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

3 番目のバイト
4 番目のバイト

1 番目の 3 番目の
バイト
バイト

0

ステータス

1

奇数バイト CRC16

DDR 4bit モード

ダブルデータレート（DDR）モードでは、データパスは設定したデータバス幅に応じて、4（SDMMC_D0～SDMMC_D3）
または 8ピン（SDMMC_D0～SDMMC_D7）でデータブロッ
クを送信します。
最初にバス上でフルサイクルのスタートビットが生成され、その後にシーケンスの最初から最後のバイト（この例では 4 番
目のバイト）を含むデータパケットが続きます。データパケット
はクロックの立ち下がりエッジによる奇数バイト、クロックの立
ち上がりエッジによる偶数バイトで構成されています。次に、奇数および偶数の CRC16 チェックサムとフルサイクルの終了ビットがバスラインのデータパケットに追加されます。
4bit のデータ幅設定では、各ラインは独自のスタートビット、
終了ビット、奇数および偶数の CRC16 チェックサムを持っています。
データがカードに送信されると、カードは SDMMC_D0 ピン
でフルサイクルの CRC ステータスを返します。
ダブルデータレートモードは、1bit モードでは使用できません。

18

サポートされるデータバスフォーマット

19

ダブルデータレートでのブロック転送
2 番目のバイト

4 番目のバイト

偶数バイト CRC16

DAT7

0

B B B B C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C
7 7 7 7 1515141413 13121211 111010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

DAT6

0

B B B B C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C
6 6 6 6 1515141413 13121211 111010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

DAT5

0

B B B B C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C
5 5 5 5 1515141413 13121211 111010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

1 番目のバイト

DAT40

B B B B C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C
4 4 4 4 1515141413 13121211 111010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

2 番目のバイト

DAT30

B B B B C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C
3 3 3 3 1515141413 13121211 111010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

DAT2

0

B B B B C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C
2 2 2 2 1515141413 13121211 111010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

DAT1

0

B B B B C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C
1 1 1 1 1515141413 13121211 111010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

DAT0

0

B B B B C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C
0 0 0 0 1515141413 13121211 111010 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

3 番目のバイト
4 番目のバイト

1 番目のバイト

3 番目のバイト

0

ステータス

1

奇数バイト CRC16

DDR 8bit モード

この例では、4バイトが SDMMC バスからダブルデータレートの 8bit モードで送信されます。SDMMC_CK クロックサイク
ルごとに、ブロックフルサイクルのスタートビットと終了ビット、
および各データラインの奇数と偶数の CRC16 チェックサム
で 2bit がシフトアウトされます。
データがカードに送信されると、カードは SDMMC_D0 ピン
でフルサイクルの CRC ステータスを返します。

19

サポートされるデータバスフォーマット

20

MMC ストリームデータ
DAT00

1 番目のバイト

2 番目のバイト

B7

1 番目のバイト

B6

B5

3 番目のバイト

B4

B3

B2

4 番目のバイト

B1

1

B0

MMC ストリーム・モード

2 番目のバイト
3 番目のバイト
4 番目のバイト

MMC ストリーム・モードでは、データパスは 1 つのピン
（SDMMC_D0）からストリームを送信します。
まず、バスでスタートビットが生成され、その後にシーケンスの最初から最後のバイト（この例では 4 番目のバイト）を含
むデータストリームが生成されます。次に、終了ビットがバス
ラインのストリームに追加されます。
ストリーム・モードでは CRC はなく、カードはデータを受信しても CRC ステータスを返しません。

20

データ FIFO

21

データバッファとアクセスタイプ• 深度 16ワードの FIFO データバッファ• CPU バーストアクセス用にマッピングされたメモリ（LDM/STM 命令）：• 0x80 から 0xFC へのオフセット• IDMA が処理

DSPM からのデータパス

FIFO

受信 FIFO
ステータスフラグ

32bit 幅
スレーブ AHB バスへ／から

マスタ AHB バスへ／から

深度 16
ワード

IDMA

送信 FIFO
ステータスフラグDSPM へのデータパス

32bit 幅で深度が 16ワードの FIFO は、スレーブ AHB ドメイ
ンとマスタ AHB ドメインの IDMA の間でデータをバッファする用途に使用します。
1 つのデータ FIFO は、データパスの送受信パケットのデー
タソースになります。DPSM ステータスに応じて、データパス
FIFO を無効、送信有効、または受信有効にできます。
専用の受信および送信 FIFO ステータスフラグを使用すれば、ファームウェアの実装がより簡単になります。
有効にすると、IDMA は FIFO と外部メモリの間でデータを転送し CPU の負荷を軽減します。

21

IDMA

22

データ転送 CPU の負荷軽減による AHB バス負荷の低減• RAM と SDMMC バス間のデータ転送は、IDMA で処理• DMA チャネルを 1 つ使用して、送信または受信データを転送します。

• サポートされる IDMA のチャネル設定• シングルバッファ• 1 つのリニアバッファ• リンクリストバッファ• リンクリストバッファモードでは、SDMMC はノンリニアで可変サイズのリンクバッファにアクセスできます。
• ソフトウェアにバッファデータの使用可否を確認応答

SDMMC 内に統合された DMA は、メモリと SDMMC FIFO の間でデータを転送し、CPU 処理と AHB バス負荷を軽減します。
2 つの IDMA 動作モードがサポートされています。


1 つはシングルバッファモードで、すべての転送データが単一のリニアバッファに置かれます。



2 つ目は複数の可変サイズバッファにあるデータの転送時に使用するリンクリストバッファモードで、リンクリスト操作ポ
インタによりアドレスを指定します。

22

IDMA リンクリストバッファ

23

データ転送 CPU の負荷軽減• データ送信• データ転送を開始する前に、ソフトウェアは最初のリンクリストバッファにデータをロードします。
• IDMA はリンクリストバッファが空になるまでデータを読み出し、その後で次のリンクリストバッファにアクセスします。
• すべてのデータが転送されると、DATAEND 割込みが生成されます。
• IDMA バッファ転送完了割込みも利用可能で、それによりダイナミックリンクリストを更新できます。
• ハードウェアが使用する前に、ソフトウェアですべてのリンクリストバッファが使用可能（確認応答済み）であることを保証する必要があります。
SW によるリンクリスト
バッファへのロード

リンクリストバッファ 0SDMMC_D

データ

リンクリストバッファ 1

データ

リンクリストバッファ

リンクリストバッファ

データ

リンクリストバッファ nデータ

IDMABTC 割込み
DATAEND 割込み

IDMA リンクリストバッファモードでは、ファームウェアでバッ
ファを 1 つ更新し、SDMMC が他のバッファのデータを転送します。各リンクリストバッファはベースアドレスとバッファサイ
ズを持っています。後続のリンクリストバッファがリクエストされているとき、IDMA が 1 つのバッファの最後に到達するた
びに IDMA バッファ転送完了割込みが生成されることがあります。各リンクリストバッファは、データ可用性の確認応答をします。SDMMC 転送の最後に、DATAEND 割込みが生成
されます。

23

ハードウェアフロー制御

24

FIFO アクセス遅延時に便利
データ送信
データ FIFO
カウント = 2

SDMMC_CK

制御ユニット0
1

アンダーランのリスク

.
.
.

データパス

SDMMC_Dout[7:0]31
有効な FIFO データ
無効な FIFO データ...

FIFO アンダーランのリ
スクが検出されると、SDMMC_CK クロックがストレッチされ、DPSM
が（送信状態で）停止

HW フロー制御ロジック
DPSM に出力されるデータ

ハードウェアフロー制御機能は、FIFO アンダーラン（DPSM
が送信モードの場合）およびオーバーランエラー（DPSM が受信モードの場合）の回避を目的にしています。ハードウェア
フロー制御ロジックは、アンダーラン／オーバーランのリスクが検出されると、SDMMC_CK ピン信号を停止し、DPSM を停止します。
ハードウェアフロー制御は、可変遅延、つまり SDR104 と共に使用してはなりません。
送信状態で、SDMMC_CK ピンのクロック信号がストレッチさ
れて DPSM が停止し、その結果すべての FIFO アンダーランが防止されます。FIFO の半分が空になるか最後の転送
データがすべて FIFO に収納可能になると、クロックと
DPSM が再スタートします。

24

ハードウェアフロー制御

25

FIFO アクセス遅延時に便利
データ受信
データ FIFOSDMMC_CK

制御ユニット0
1

FIFO フル...

カウント = 303031
有効な FIFO データ
無効な FIFO データ

SDMMC_Din[7:0]...

FIFO がフルのとき、
SDMMC_CK クロックはストレッチされ、DPSM
は（受信状態で）停止

データパス

HW フロー制御ロジック
RAM に出力されるデータ受信状態で、FIFO がフル（オーバーランのリスク）のとき、
SDMMC_CK クロックはストレッチされ、DPSM は受信状態のまま停止します。FIFO の半分が空になると、クロックと
DPSM が再スタートします。

25

SDIO ReadWait

26• SDMMC ホストは 2 つの ReadWait モードをサポート• データブロック間の SDMMC_CK を停止• コマンド送信不可• データブロック間の SDMMC_D2 で ReadWait 信号を使用• コマンド送信可

ホスト駆動のバス
デバイス駆動のバス

CPSM の状態

アイドル

送信

ウェイト

受信

アイドル

SDMMC_CMD

ハイインピーダンス

コマンド

入力

応答

ハイインピーダンス

CPSM の状態

受信

読出し／ウェイト

Wait_R

受信

SDMMC_D2

データプロック N

ドライブロー

入力

データプロック N+1コンセプト：読出しウェイトは SDIO 固有の動作で、その間ホストはデータ
ブロック間のデータ転送を一時的に停止してデータバッファの管理を改善
したり、SDIO デバイスの他の機能にコマンドを送信したりできます。
SDMMC コントローラは、SDMMC_CK を停止するか SDMMC_D2 シグ
ナリングを使用して、2 つの読出しウェイトモードをサポートします。
SDMMC_D2 シグナリングの利点は、読出しウェイトモードでもカードと通信できることです。
RWSTART ビットがセットされ、データブロックが完全に転送されかつCRC コードが正しい場合、DPSM は ReadWait 状態に移行します。
DPSM は、RWSTOP ビットに 1 が書き込まれて終了するまで、
ReadWait 状態を維持します。（ReadWait フェーズが終了すると、
RWSTOP ビットはハードウェアによって自動的にクリアされます。）
CRC コードがそれ以上失敗すると、すべてのデータ転送が停止され、
DPSM は受信状態を維持します。中止コマンドは、DPSM をアイドル状態に移行させる CPSM が送信する必要があります。この場合、ReadWait
状態にはなりません。
読出しウェイトモードは、可変遅延、つまり FIFO フロー制御を行う
SDR104 で使用する必要があります。

26

SDIO サスペンド／レジューム

27

ソフトウェア手順• 他の機能を処理するため、データ転送が一時停止される場合があります。
• データ転送は、データブロック間でのみ一時停止できます。
ホストはデータラインを使用している機能を特定します
トランザクションの一時停止を要求します
トランザクションの一時停止を待ちます
優先度の高いトランザクションを開始し、完了するまで待ちます
サスペンドされたトランザクションをリストアします

多機能カードでは、SD バスへのアクセスを共有する複数のデバイスがあります。機能がサスペンド／レジュームをサポートしている場合、ホストはデータ転送を一時中断して他の内部操作の実行や他の機能との通信を行い、その後で中断したトランザクションをレジュームできます。
カードがサスペンド／レジューム機能をサポートしている場合、ホストはある機能またはメモリへのデータ転送操作を一時停止してバスを解放し、優先度の高い他の機能またはメモリへの転送を行うことができます。
CMDSUSPEND ビットがセットされたコマンドを送信して、現在のコマンドがサスペンドコマンドであることを SDMMC に示す必要があります。
サスペンドリクエストが受け入れられても機能が一時停止するのは完全なデータブロックの後なので、DPSM は Wait_R 状態で待機します。IDMA
モードを使用すると、受信 FIFO が空になります。アプリケーションがFIFO を読み取る場合、まず受信 FIFO を空にし、それから DTHOLD
ビットをアイドル状態にセットする必要があります。FIFO が空で DTHOLD
ビットがセットされると、DPSM はアイドル状態に移行します。
その後ではじめて、ファームウェアはカードの優先順位の高い部分との通信を開始できます。
中断されたトランザクションをレジュームする際、ファームウェアは、機能のレジュームをリクエストする前に、残りのデータを読み取るよう DPSM を再設定する必要があります。
この機能は、SDIO バージョン 4.00 以降ではサポートされなくなりました。
27

SDIO 割込み

28

ステータスポーリングオーバーヘッドを低減

外部
イベント

SDMMC_CKSDMMC_CMD

SDMMC
ホスト

SDIO
カード

DAT
INT

INT
SDMMC_D1/IRQ

INT

内部
イベント

割込みのコンセプトは、1bit または 4bit のデータバスモード
で SDMMC_D1/IRQ ピンを使用してカードステータスの変化
をホストに通知するものです。
カードが外部イベントを検出すると、SDIO 割込みがカードから SDMMC ホストに送信されます。
割込みは、データ転送周期以外のときにのみ送信されます。
SDMMC ホストは、データ制御レジスタの SDIOEN 設定ビットが有効になると、SDMMC_D1 ピンで送信された割込みを検出します。

DS、HS、SDR12、および SDR25 スピードモードでのデータ
ブロック間、またはすべてのスピードモードでの最後のデータブロックの後で、DPSM はアイドルかビジー状態にある一方
で、SDMMC_D1 ピンのすべての低レベルはカードからホストへの割込みとして検出されます。

28

CPSM 割込み
割込みイベント

29

説明

CMDSENT

コマンド送信、レスポンス不要

CMDREND

コマンドレスポンス受信、CRC 確認成功

CCRCFAIL

コマンドレスポンス受信、CRC 確認失敗

CTIMEOUT

コマンドレスポンスタイムアウト

CPSMACT

コマンド転送中（CPSM がアクティブ）

ここでは、データ転送に関連する DPSM 割込みイベントの概要を示します。
すべてのデータが正しく転送されると、DATAEND により通知されます。
データブロックが正しく転送されると DBCKEND で通知され、その情報は ReadWait 機能で使用されます。
データ転送エラーは、DCRCFAIL、DTIMEOUT、
TXUNDERR、および RXOVERR で通知されます。
進行中のデータ転送の中止または転送エラーは DABORTで通知されます。
データ送信時の転送ビジーは、BUSYD0 および
BUSYD0END で通知され、その情報は R1b コマンド、SD
電圧切り替え機能、および SDMMC スリープ機能で使用されます。
DPSMACT はデータ転送が進行中であることを知らせます。

29

DPSM 割込み
割込みイベント30

説明DATAEND

データ転送完了、CRC 確認成功

DBCKEND

データブロック転送、CRC 確認成功

DHOLD

データ転送保留DCRCFAIL

データブロック転送、CRC 確認失敗

DTIMEOUT

データタイムアウト（プログラムされたタイムアウト期間経過）

TXUNDERR

送信 FIFO アンダーランエラー

RXOVERRFIFO オーバーランエラーを受信

DABORT

データブロック転送中止

BUSYD0

カードが SDMMC_D0 でビジーを発信

BUSYD0END

カードが SDMMC_D0 でビジーを発信、の終了

DPSMACT

データ転送中（DPSM がアクティブ）

ここでは、データ転送に関連する DPSM 割込みイベントの概要を示します。
すべてのデータが正しく転送されると DATAEND で通知されます。
データブロックが正しく転送されると DBCKEND で通知され、その情報は ReadWait 機能で使用されます。
データ転送エラーは、DCRCFAIL、DTIMEOUT、
TXUNDERR、および RXOVERR で通知されます。
進行中のデータ転送の中止または転送エラーは DABORTで通知されます。
データ送信時の転送ビジーは、BUSYD0 および
BUSYD0END で通知され、その情報は R1b コマンド、SD
電圧切り替え機能、および SDMMC スリープ機能で使用されます。
DPSMACT はデータ転送が進行中であることを知らせます。

30

FIFO 割込み
割込みイベント

31

説明

TXFIFOHE

送信 FIFO ハーフエンプティ。少なくとも 8ワード書込み可能。

RXFIFOHF

FIFO ハーフフルを受信。少なくとも 8ワード読出し可能。

TXFIFOF

送信 FIFO フル

RXFIFOF

受信 FIFO フル

TXFIFOE

送信 FIFO エンプティ

RXFIFOE

受信 FIFO エンプティ

ここでは、FIFO 管理に使用できる割込みとポーリングモードのフラグのリストを示します。
DMA リクエストは、FIFO 閾値イベントのトリガにより内部的に生成されます。

31

他の割込み割込みイベント

32

説明

IDMATE

IDMA AHB マスタ転送エラー

IDMABTC

IDMA バッファ転送完了

ACKFAIL

ブート確認応答失敗

ACKTIMEOUT

ブート確認応答タイムアウト - プログラムされたタイムアウト期間が経過VSWEND

電圧スイッチ完了

CKSTOP

電圧スイッチ手順で SDMMC_CK 停止

SDIOIT

SDIO 割込みを受信

ここでは、IDMA、ブート、電圧スイッチ、および SDIO 割込みに関連する割込みイベントの概要を示します。
IDMA マスタ AHB 転送エラーは、IDMATE によって通知されます。
完全なデータバッファが正しく転送されると、ダブルバッファ
モードの IDMABTC により通知されます。
ブート確認応答エラーは、ACKFAIL および ACKTIMEOUT
で通知されます。
電圧スイッチの進行は、VSWEND と CKSTOP で通知されます。
SDIO 割込みは SDIOIT で通知されます。

32

低電力モード
モード

33

説明

RUN

アクティブ

SLEEP

アクティブペリフェラル割込みにより、CPU は SLEEP モードを終了します。

(D)STOP停止。ペリフェラルレジスタの内容は保たれます。

(D)STANDB

パワーダウン状態です。ペリフェラルは、ドメインと STANBY モード終了後に再初期化する必要があります。

ここでは個々の低電力モード設定におけるペリフェラルス
テータスの概要を示します。デバイスは、ドメインまたはシス
テムの STOP モード、およびそれ以下の状態では通信できません。SDMMC コントローラを無効にする前、あるいはドメインまたはシステムを STOP または STANBY モードに切り替える前に、すべての送信を確実に終了させておくことが重
要です。

33

パフォーマンス34• 通信速度は理論上、最大で 204MHz に制限されています。
• 実際の速度は以下により決定されます。
• SDMMC バスの容量負荷（カード容量と PCB トラック容量）• GPIO 構成、VDD レベル、周囲温度• 特定の SDMMC バス幅でデータフローを維持するソフトウェアの能力• AHB バンド幅は、SDMMC バンド幅と比較して最低でも 3 倍にする必要があります。
• SDR 50 4-bit モード、50Mbyte/s では、37.5MHz で 150Mbyte/s の AHB が必要です。
• MMC HS200 8bit モード、200Mbyte/s では、150MHz で 600Mbyte/s の AHB が必要です。

パフォーマンスは、主に SDMMC バス幅とクロック設定に依存します。 SDMMC インタフェースは、最大 204MHz のク
ロック信号を生成できます。ただし、実際の速度はアプリケー
ションにより低下する可能性があり、いくつかの要因に依存します。 PCB トラックとカードの入力容量が重要な役割を果た
すことがあるため、SDMMC バス容量を考慮する必要があります。GPIO の設定も影響します。コマンド、データ、およびクロック信号には高速 GPIO モードを適用する必要があります。
電源電圧が低く周囲温度が極端に高いと、エッジが遅くなります。また、アプリケーションが高速データフローを常に管理できるとは限りません。これは特に、例外サービスの頻度が高すぎるか、割込みハンドラに長時間費やしている場合が該当します。
AHB バンド幅は、SDMMC バンド幅と比較して最低でも 3倍にする必要があります。

34

アプリケーションの例

35• SD メモリカードとのインタフェース（SD High CapacityとeXtended Capacityへの対応を含む）• SD I/O デバイスとのインタフェース（Wi-Fi、Bluetooth モジュール、カメラモジュールなど）• MMC および eMMC メモリカードとのインタフェース

SDMMC インタフェースは、リムーバブルまたは永続的な大容量ストレージデータメモリとの接続を少ないピン数で行う幅
広いアプリケーションで使用できます。
SDMMC コントローラを使用すれば、外部 SDIO デバイス
（Bluetooth SDIO モジュールなど）の使用時にデバイスへの接続性を拡張できます。

35

関連ペリフェラル

36• 以下に、SDMMC コントローラに関連するペリフェラルのリストを示します。
詳細については、必要に応じてこれらのペリフェラルトレーニングを参照してください。
• リセットおよびクロック制御（RCC）• 割込み（NVIC）• 汎用入力／出力（GPIO）

これは STM32 SDMMC インタフェースに関連するペリフェラ
ルのリストです。ユーザは、これらのペリフェラルとのすべての関係をよく理解し、SDMMC コントローラを正しく設定して使用する必要があります。

36