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

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

1

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

2

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

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

2

• SDMMCホスト機能

主な機能

3

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

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

3

ブロック図4SDMMC

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

SDMMCアダプタ

IDMA*

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

SDMMC_CKSDMMC_CMD

コマンド･パス

カードバス

マスタAHB

AHB
インタフェース

SDMMC_D[7:0]

スレーブAHB

RCC

SDMMCxSEL

データ･パスFIFO
HCLKSDMMCCLK*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は10ビット･プリスケーラを使用（またはカードには
SDMMCCLKが直接クロックを供給）• 省電力モード：バスがアイドル状態のときにSDMMC_CKクロック出力を無効にできる

電源管理モジュール

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

クロック制御モジュール

SDMMC_CK

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

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

5

AHBインタフェース

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

制御ロジック6

コマンド
タイマ
SDMMC_CMDin

CMD

シフト
レジスタ

CRC

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

すべてのカードに対応

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

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

CRC：
7ビット対象スタート･ビット：
常に「0」

0 1

CMD_Index

引数

CRC

終了ビット：
常に「1」1（合計長=48ビット）

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

8

サポートするレスポンス

9

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

例：R1

6ビット

32ビット

コマンド
ステータス

0 0 CMD_Index

CRC

0 0

1

6ビット

32ビット

111111b

OCR

7ビット
111111b

1

予約済み
例：R3

動作条件レジスタ

鏡像コマンドロング･レスポンス（合計長=136ビット）

0 0

6ビット

120ビット111111b
予約済み

CIDまたはCSDレジスタ

R2レスポンス

CRC

1

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

レスポンスは、前のコマンドへの応答としてカードから送信されるトークンです。レスポンスには、ショートとロングの2種類があります。
4つの32ビットレスポンスレジスタを持ちレスポンスには制約がないた
め、SDMMCインタフェースはロングレスポンスとショートレスポンスの両方をサポートし、カードを正しく初期化して通信します。
ショートレスポンスの全長は48ビットで、ミラーリングされたコマンドイ
ンデックス、32ビットのコマンドステータス、スタートビット、ストップビッ
ト、CRC7チェックサムで構成されます。ショートレスポンスを受信すると、コマンドステータスがSDMMC_RESP1レジスタに保存され、ミラーリングされたコマンドインデックスが利用可能な場合は、SDMMC_RESPCMDレジスタにコピーされます。
ロングレスポンスの全長は136ビットで、120ビットのCID/CSDレジス
タの内容と、スタートビット、ストップビット、CRC7チェックサムで構成されます。ロングレスポンスを受信すると、CID/CSDカードレジスタが4つのSDMMC_RESPxレジスタのいずれかにコピーされます。
SDMMCインタフェースは、スタートビットの自動検出、コマンドイン
デックス抽出、32ビットまたは128ビットのレスポンス抽出、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、または8ビットを送信できます。
ダブルデータレート（DDR）モードでは、各SDMMC_CKクロックサイク
ルで、データパスはバス幅の設定に応じて2、8、または16ビットを送信できます。
転送ロジックは、SDMMCCLKクロックラインからクロック供給されます。
転送ロジックは2つのサブユニットに分割されます。1つは送信データ用、もう1つは専用の制御ビットとステータスフラグで受信したデータ用です。
データバッファはデータパスの一部ではありません。送信および受信
FIFOロジックはAHBドメインにマッピングされます。各サブユニットのすべての信号が再同期されます。
CRC計算機は、カードとホスト間のデータの整合性を保証します。
データパケットの最後にCRCが自動的に計算されます。
14

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

15

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

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

1番目のバイト

2番目のバイト

3番目のバイト

B7

B4

B6

B5

B3

4番目のバイト

B2

B1

B0

CRC16

1

0

ステータス

1

0

ステータス

1

1ビットモード
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

SDR4ビットモード

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

SDR8ビットモード

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

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

17

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

アイドル

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

ビジー

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

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

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 1414131312 12111110 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 1414131312 12111110 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0

1

2番目のバイト

DAT1

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
5 5 1 1 5 5 1 1 1515 1414131312 12111110 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 1414131312 12111110 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

DDR4ビットモード

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

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

奇数バイトCRC16DDR8ビット･モード

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

32ビット幅
スレーブAHBバスへ／から

マスタAHBバスへ／から

深度16
ワード

IDMA

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

32ビット幅で深度が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つのバッファのうち1つにある
データを交互に転送したり、バッファリンクリストを作成したり
します。

22

IDMAダブルバッファ

23

データ転送CPUの負荷軽減• データ送信• データ転送を開始する前に、ソフトウェアはバッファ0とバッファ1にデータをロード• IDMAは、空になるまでバッファ0からデータを読取り、IDMATBC割込みを生成• ソフトウェアはIDMAACTを読み取って、SDMMCで使用されているバッファを知り、新しいデータを含む
空きバッファを読込む• IDMAバッファのベースアドレスは、リンクリストを作成するように変更可能• すべてのデータが転送されると、DATAEND割込みが生成
SW 負荷 SW 負荷
バッファ0 バッファ1

バッファ
0

SDMMC_D

データ

SW 負荷
バッファ0

SW 負荷
バッファ1

バッファ
1

バッファ
0

データ

データ

バッファ
1

データ

IDMATBC割込み
DATAEND割込み

IDMAダブルバッファモードでは、ファームウェアは1つのバッファを更新でき、SDMMCはもう一方のバッファのデータを転送します。
転送データが固定ベースアドレスを持つ2つのバッファ間で交互に行われたか、バッファベースアドレスが変更され、リンクリストが作成されます。IDMAが1つのバッファの終わりに達するたびに、
IDMAバッファ転送完了割込みが生成されます。

23

ハードウェア･フロー制御

24

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

制御ユニット0
1

アンダーランのリスク

.
.
.

データパス

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

HW フロー制御ロジック

無効なFIFOデータ

DPSMに出力されるデータ...

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

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

24

ハードウェア･フロー制御

25

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

制御ユニット

0
1

FIFOフル...

カウント=303031SDMMC_Din[7:0]...

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

データパス

有効なFIFOデータ

HW フロー制御ロジック

無効なFIFOデータ

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

内部
イベント

割込みのコンセプトは、1ビットまたは4ビットのデータバス
モードで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)Standby

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

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

33

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