STM32MP1 - SAI
シリアルオーディオインタフェース
1.0 版

こんにちは、STM32 シリアルオーディオインタフェースのプレゼンテーションへようこそ。
このプレゼンテーションでは、外部オーディオデバイスとの接続に使用するインタフェースの機能について説明します。

1

概要

2

• 外部オーディオデバイスとの通信インタフェー
スを提供• 完全に設定可能• さまざまな規格をサポート：I2S、TDM、SPDIF、その他
From RCC• デジタルマイクロフォンインタフェース• 2 つの独立したサブブロック

アプリケーション側の利点• 広範囲のオーディオデバイスをサポート• デジタルマイクロフォン向けのシンプルなインタフェース• 有益な信号のみを出力• 実装が容易

STM32 製品に搭載されたSAIは、マイクロコントローラが外部のオーディオデバイスと通信するためのインタフェースを提供します。外部オーディオデバイスには、アンプ、A/D コンバータ、D/Aコンバータ、またはオーディオプロセッサなどが含まれます。このインタフェースは完全に設定可能でほとんどのオーディオ規格をサポートしているため、既存のオーディオデバイスと簡単に接続できます。
内部の同期機能により、I/O ピンの数は最小限に抑えられています。

2

主な機能（1/2）

3• 複数のハードウェアプロトコルをサポート• フリープロトコルモードを使用：• I2S Philips 規格（Inter-IC Sound)• I2S MSB 詰めまたは LSB 詰め（Inter-IC Sound の一種）
• TDM（時分割マルチプレクス）• PCM（パルス符号変調）• その他• SPDIF出力（Sony/Philips デジタルインタフェース）• PDM インタフェース（パルス密度変調インタフェース）• AC’97（Intel オーディオコーデック97）

SAI は、4 つの異なるモードにプログラムできます。
• フリープロトコルモードいくつかのパラメータの調整が可能になり、それにより SAI が I2S、PCM、TDM などの規格をサポートできるようになります。その柔軟性により、シリアルインタフェースを必要に応じてカスタマイズできます。
• SPDIF プロトコルモード これにより、SAI は IEC 60958 規
格でオーディオサンプルを送信できます。
• PDM インタフェースモード。これにより SAI は、ビームフォーミングまたは単純な音声キャプチャアプリケーション用に最大6 つのデジタルマイクロフォンを接続できます。
• AC97プロトコル3

主な機能（2/2）

4• SAI は以下をサポートします。
• すべての通常のオーディオサンプリングレート：44.1、16、48、96、および 192kHz（クリスタル周波数による）• 各サブクロック用のマスタまたはスレーブモード• 各サブクロック用のデータ入力または出力• 2 サブブロック使用による全二重• 各サブブロック用のクロックジェネレータ
• サブブロック間またはサブブロックと他の SAI 間の同期
• コンパンディングモード（µ-Law、A-Law）• 8 ワードFIFOサイズ• 2 つの DMA インタフェース• 2 本の割込みライン

SAI は、アプリケーションで使用されるクリスタル周波数に従って、すべての通常のオーディオサンプリングレートをサポートします。
さらに SAI は、半二重または全二重通信でのマスタモードとスレーブモードをサポートします。
複数の SAI スを同期させることもできます。
SAI は、8 個のサンプルの FIFO バッファ、および最大2 つの割込みと DMA インタフェースも提供します。

4

ブロック図5• SAI には以下を組み込んでいます。
PDM
IF• 次の機能を持つ 2 つの独立サブブロック• クロックジェネレータ

IO LineManagement• 柔軟性の高いリアルインタフェース• FIFO バッファ• APB インタフェース• DMA および割込みサービス• IO ライン管理• 1 つの PDM インタフェース

ピン名方向説明

FS_A/B

入力／出力

フレーム同期

SCK_A/B

入力／出力

ビットクロック

SD_A/B

入力／出力

シリアルデータ

MCLK_A/B

出力

マスタクロック

D[3:1]

入力

デジタルマイクロフォンのビットストリームデータ

CK[2:1]出力

デジタルマイクロフォン用クロック

SAI は、2 つの独立したサブブロック（サブブロックAおよびB）で構成されています。
各サブブロックはそれぞれ、APB インタフェース、クロックジェネ
レータ、FIFO バッファ、DMA インタフェース、および割込みイン
タフェースを持っています。

各サブブロックは、それぞれのプロトコルにより、レシーバまたはトランスミッタモード、およびマスタまたはスレーブモードに設定できます。
内部および外部同期により、2 つのサブブロック間の同期や複数の SAI インタフェース間の同期ができます。
各サブブロックは最大 4 つの IO を処理できます。各サブブロッ
クにおいて、FS はフレーム同期、SCK はビットクロック、SD はシリアルデータ、MCLK はマスタクロックを意味します。
さらに、PDM インタフェースにより、最大 6 つのデジタルマイクロフォンを接続できます。

5

回路内の SAI

6

幅広いカーネルクロックの選択肢• 各 SAI でのクロック選択肢• PLL3 の DIVIQ• PLL3 の DIVIR• PLL4 の DIVIQ• オシレータ（HSI、CSI、または HSI）の内の 1 つ• I2S_CKIN 入力ピン

• SAI2 はまた、SPDIFRX のシンボルク
ロックからも受信

STM32MP1 は 4 の SAI インスタンスを組み込んでいます。これ
により、カーネルクロックの選択範囲が広がります。
SAI は以下からカーネルクロックを受信できます。
• PLL3 または PLL4 の DIVQ 出力• PLL3 または PLL4 の DIVR 出力• HSI、CSI、または HSE オシレータ• 入力パッド：I2S_CKIN

さらに SAI2 は、SPDIFRX ブロックのシンボルクロックを受信できるため、SPDIFRX が受信したストリームを SAI2 と同期させることができます。
シンボルクロック周波数はサンプルレートの 64 倍であることに注意してください。
また、SAI はカーネルクロックを使用して、マスタモードのシリアルオーディオインタフェースのタイミングを生成していることにも注意してください。
すべての PLL は分数モードでプログラムでき、非常に正確なオーディオサンプリングレートが可能になります。
6

SAI の割当て

7

SAI の各リソースは、Cortex®-A7 または Cortex-M4 に割り当てることができます。
インスタンス Cortex-A7 S Cortex-A7 NS

Cortex-M4

コメント（OP-TEE）（Linux）（STM32Cube）

SAI1-X

X

単一選択割当て

SAI2-

X

X

単一選択割当て

SAI3-

X

X

単一選択割当てSAI4-XX単一選択割当て

詳しくは、STM32MP1 の Wiki ページ を参照してください。

各 SAI IP は、Cortex-A7 非セキュアまたは Cortex-M4 のいずれかに割り当てることができます。
詳しくは、STM32MP1 の Wiki ページ を参照してください7フリープロトコルモード（1/13）• 以下に対して SAI を設定するには、フリープロトコルモードを選択する必要があります。
• I2S Philips 規格• I2S MSB 詰めまたは LSB 詰め• TDM または PCM• フリープロトコルモードで次のパラメータを調整します。

8• データジャスティフィケーション（LSB または MSB ファースト）• データサイズ、スロット（チャネル）サイズ• フレーム内スロット数• スロット内のデータ位置• シリアルクロックのサンプリングエッジ• フレームサイズ、フレーム極性、フレーム周期• フレームアクティブレベルサイズ• フレーム同期モード• マスタ／スレーブモード• シングル、マルチ、または全二重データレーン

フリープロトコルモードでは、次に示すようないくつかのパラメータの動作を柔軟に変更できるため、一般的なオーディオ規格インタフェースのほとんどをエミュレートできます。
• データジャスティフィケーション• データサイズと位置• フレームサイズ• フレーム周期• フレーム極性• クロックのサンプリングエッジ• スロット数8

フリープロトコルモード（2/13）

9• I2S に類似した
タイミング

次の例は、I2S 類似プロトコルに対する本インタフェースの可能性の一部を示したものです。
I2S 類似プロトコルでは、フレーム同期（FS）の各エッジを使用してスロット位置を調整します。





フレーム長、デューティサイクル、および極性を調整できます。
クロックデータストローブエッジも選択可能です。
フレームエッジに対するスロットの位置を選択できます。
スロットのサイズもまた、調整できます。
I2S 類似プロトコルでは、フレームごとに偶数のスロットが必要です。

9フリープロトコルモード（3/13）

10• TDM 類似タイミング

次の例は TDM に類似したプロトコルに対する本インタフェースの可能性の一部を示したものです。TDM 類似プロトコルの場合は以下の通りです。
スロット位置の調整に使用されるのは、フレーム同期の 1 つのエッジ（立ち上がりまたは立ち下がり）のみフレーム長、デューティサイクル、および極性を調整可能
クロックデータストローブエッジを選択可能
フレームのアクティブエッジに対するスロットの位置を選択可
能
スロットのサイズもまた調整可能
フレームあたりのスロット数は最大 16 個

10

フリープロトコルモード（4/13）

11• スロットの設定：• オーディオフレームあたり最大 16スロット• 各フレームをアクティブ、または非アクティブに定義可能• 先頭ビットオフセット（FBOFF）を定義することで、スロット内のデータの位置を調整可能• データラインをハイインピーダンスに設定可能• 非アクティブなスロットが対象• 各スロット内のデータ位置の制御に使用されるFBOFF（First BitOFFset）エリアが対象

SAIは最大 16スロットを処理でき、各スロットはアクティブにするかどうか個別に指定できます。非アクティブなスロットはハイインピーダンスに設定できます。
スロットサイズは常にデータサイズ以上です。
SAIにより、各スロット内のデータ位置を制御し、必要に応じてスロットの未使用部分をハイインピーダンスに設定できます。
この機能は、データラインが複数のデバイス間で共有されている場合に役立ちます。

11フリープロトコルモード（5/13）

12• マスタおよびスレーブモード：• マスタモードの場合：• SAIはタイミング信号を発信します：• ビットクロック（SCK）、フレーム同期（FS）、必要に応じてマスタクロック（MCLK）• シリアルデータライン（SD）は入力または出力に設定可能• スレーブモード：• SAI は外部デバイスからタイミング信号を受信します：• ビットクロック（SCK）、フレーム同期（FS）• シリアルデータライン（SD）は入力または出力に設定可能

マスタモードでは、SAI はオーディオシステムの設定に応じてマスタクロック（MCLK）を生成します。
このマスタクロックは、外部のオーディオコーデックにリファレンスクロックを提供します。
マスタモードでは、SAI はフレーム同期信号（FS）とビットクロック（SCK）を生成します。データライン SD は、入力または出力のいずれかとなります。
MCLK 信号は、スレーブモードでは使用されません。
スレーブモードでは、SAI は別のデバイス（外部または内部）からフレーム同期信号（FS）とビットクロック（SCK）を受信します。
データライン SD は、入力または出力のいずれかとなります。

12フリープロトコルモード（6/13）

13• サンプリングレート調整• サンプリングレートはマスタモードで調整する必要があります。
• サンプリングレートの調整は、マスタクロック（MCLK）の生成に依存します。

• マスタクロック（MCLK）は、外部オーディオコーデックからリファレンスクロックとして要求されることがよくあります。
• ほとんどの外部オーディオコーデックはジッタに敏感です。
オーディオパフォーマンスの低下を防ぐため、MCLK はできるだけクリーンでなければなりません。
• SAI が生成した MCLK は、優れたクロック品質を保証します。
• SAI は有効化されていなくても、マスタクロック（MCLK）を生成できます。
設定フェーズ中に外部コーデックのクロッキングができます。

マスタモードでは、適切なタイミングを生成して正しいサンプリングレートを提供するのは SAI です。
このスレーブモードでは、サンプリングレートは外部のオーディオデバイスから供給されます。
SAI が有効化されていなくても、外部デバイスに向けたマスタクロックを生成できることを覚えておいてください。
この機能により、たとえば、設定フェーズでの外部コーデックへのクロック供給が可能になります。

13フリープロトコルモード（7/13）

13• MCLK が生成される場合のサンプリングレート調整
𝑓=𝑓 _𝑀𝐶𝐾𝐷𝐼𝑉(1)

𝑓256 × 𝑂𝑆𝑅 + 1

𝑓=

𝑓= 𝑓 × 𝐹𝑅𝐿 + 1

FRL+1 = 8, 16, 32, 64, 128, または 256

fMCLK はマスタクロック周波数fFS はサンプリングレート周波数（〜フレーム周期）
fSCK はビットクロック周波数（1）MCKDIV = 0
fMCLK = fSAI_CK

クロックジェネレータはマスタモード通信に必須です。シリアル
オーディオインタフェースのサンプリングレート調整に使用されます。
クロックジェネレータは、MCLK、SCK、および FS のルート周波数を供給します。
マスタクロック（MCLK）が生成される場合の、フレーム長は 2 の累乗でなければなりません。
FS 周波数と MCLK 周波数の比は、OSR bit に応じて 256 または 512 に設定されます。
クロック SAI_CK は、STM32MP1 RCC ブロックから供給されます。

14

フリープロトコルモード（8/13）

14• MCLK が生成されない場合のサンプリングレートの調整
𝑓=𝑓
𝐹𝑅𝐿 + 1𝑓=

𝑓 _𝑀𝐶𝐾𝐷𝐼𝑉

FRL + 1 = 8～256の任意の値

fFS はサンプリングレート周波数（〜フレーム周期）
fSCK はビットクロック周波数

MCLK が生成されない場合、フレーム長は 8～256 間の任意の値を取ることができます。
この場合、SCK bit クロックの周波数は、SAI_CK 入力で受信したクロックを MCKDIV 値で割った値によって直接計算されます。

15

フリープロトコルモード（9/13）

16• SAI の同期
• SAI は、2 つのサブブロックを一緒に同期できます（内部同期）。
• 内部同期を使用する場合：• 2 つのサブブロックは、同じフレーム同期と同じビットクロックを共有します。
• 2 つのサブブロックは、同じフレーム設定で同じプロトコルを使用する必要があります。
• 2 つのサブブロックを両方ともスレーブモードで設定するか、またはスレーブ 1 つとマスタ 1 つで設定することができます。

• 同期を使用しない場合、各サブブロック間に依存関係はありません。
例：• I2S Philips マスタの SAI_A、SPDIF の SAI_B• TDM スレーブのSAI_A、AC’97 の SAI_B

内部同期は、全二重 I2Sなど、2 つのデータレーンを必要とする通信に使用できます。
一緒に同期されるサブブロックは、同じプロトコル特性を使用する必要があります。
サブブロックの片方はマスタモードで、もう一方はスレーブモードで設定できます。または、マスタデバイスが外部にある場合、サブブロックを両方ともスレーブに設定できます。

16

フリープロトコルモード（10/13）

17• コンパンディング：• コンパンディングを使用すると、シリアルインタフェースのデータサイズを 8bit に減らすことができます。
• μ-Law フォーマットと A-Law フォーマットでは、データを MSB 詰めの 8bit コードエレメントに符号化します。
• 2 つのコンパンディングモードをサポート：CCITT G.711 勧告に含まれたμ-Law と A-Law• 米国と日本で採用されているコンパンディング規格はμ-Law であり、14bit のダイナミックレンジが可能です。
• ヨーロッパのコンパンディング規格は A-Law であり、13bit のダイナミックレンジが確保できます。

データサイズを削減するため、データパスに A-law または μ-law
コンパンダを挿入することができます。
A-law と μ-law はロスレスコンプレッサではないことに注意してください。
コンパンディングモードは、通常、テレフォニーで使用されます。
• 小さな値は増幅され、大きな値は減衰されます。
• SNR は、強い信号と弱い信号で同じになる傾向があります。

17フリープロトコルモード（11/13）

18• ミュートモード• 送信モードの場合：• 送信したサンプルを強制的にゼロにするか、前の送信サンプルを繰り返す場合に使用できます。
• ミュートモードは、進行中のフレームでいつでも選択でき、次のフレームの開始時に有効になります。
• ミュートモードの間、TX-FIFO ポインタは引き続きインクリメントされます。

• 受信モードの場合：• アクティブスロットのデータを 0 に設定して、連続フレームの量が受信されたかどうかを検出するのに使用できます。
• 連続フレームの量はプログラムで設定できます。
• 割込みを生成できます（有効になっている場合）。

SAI はミュート機能も提供します。
送信モードでは、ユーザはミュートされたスロットにゼロを送信するか、以前送信した値を送信するか選択できます。以前に送信した値は、フレームごとに 1 つまたは 2 つのスロットを持つ設定に制限されます。
送信モードでは、TxFIFO ポインタは引き続きインクリメントされます。つまり、FIFO のデータでかつミュートモードが要求されているデータは破棄されます。

受信ミュートモードは、すべてのデータがゼロにリセットされている連続スロットの量を検出するのに役立ちます。

18

フリープロトコルモード（12/13）

19• 予測／レイトフレームエラー• この機能は、ノイズの多い環境に起因する SCK クロックおよび FS のグリッチを検出する用途に使用できます。
• スレーブモードでは、SAI はフレーム同期が予想した通りに発生したか、つまり遅くも早くもないタイミングで発生したかどうかを検出します。
• ステータスフラグが使用可能、割込みも生成できます。
• 予測またはレイトフレーム検出エラーの後、アプリケーションソフトウェアは SAI を再起動する必要があります。

予測またはレイトフレームエラー検出機能により、予期しないフレーム同期のミスアラインメントを検出することで、インタフェースの信頼性が向上します。ステータスフラグがセットされ、割込みも生成されます。 その後、アプリケーションソフトウェアは SAI イン
タフェースを再起動する必要があります。

19フリープロトコルモード（13/13）

19

SAI は、アンダーラン／オーバーランが発生した場合でも適切なデータ配置を保証• オーバーラン／アンダーラン処理• シリアルインタフェースからの新しいデータを保存したくても RX-FIFO がフルの場合、オーバーランが発生します。
• シリアルインタフェースから新しいデータが要求されても TX-FIFO がエンプティの場合、アンダーランが発生します。
• 例：スロット 1 におけるFIFO オーバーラン

SAI は、アンダーランまたはオーバーランが発生した場合でも、適切なデータ配置を保証します。

20

SPDIF プロトコル（1/4）

21• SAI は、SPDIF プロトコルを使用してオーディオサンプルを生成できます。
• SPDIF モードでは SD_x IO のみ使用し、他の IO は使用しません。
• データサイズは強制的に 24bit に設定されます。
• データはマンチェスタ符号化（またはバイフェーズマーク）によります。
• SAI はプリアンブルを自動的に生成します。
• SAI は自動的にパリティを生成します。
• アプリケーションで、CS、U、V bit を処理する必要があります。

SAI は、SPDIF プロトコル用に設定された送信モードで、オーディオ IEC 60958 規格をサポートします。
SAI は、送信されたデータに従ってプリアンブルとパリティビット（P）を生成します。
ソフトウェアで、CS、U、V bit を処理する必要があります。

21

SPDIF プロトコル（2/4）

22• ブロック構造は、チャネルステータスとユーザ情報の整理に使用されます。
• 各ブロックには 192フレームが含まれています。
• 各フレームには 2 つのサブフレームが含まれています。
• プリアンブルにより、ブロックとサブフレームの境界を検出できます。
• プリアンブル B は、新しいブロックの開始とチャネルAの開始を検出します。
• プリアンブル M は、チャネル A の開始を検出します（ブロック境界ではない場合）。
• プリアンブル W はチャネルBの開始を検出します。

IEC60958 の仕様では、ブロック構造はチャネルステータス（CS）とユーザ情報（U）のデコードに使用されます。
• 各ブロックには 192フレームが含まれています。
• 各フレームには 2 つのサブフレームが含まれています。
SAI は、B、M、W の各プリアンブルを自動的に生成します。
• プリアンブル B は新しいブロックの開始とチャネル A の開始を検出します。
• プリアンブル M は、チャネル A の開始を検出します（ブロック境界ではない場合）。
• プリアンブル W はチャネル B の開始を検出します。

22

SPDIF プロトコル（3/4）

23• サブフレームの形式には、3 つのフィールドに分割された 32bit が含まれています。
• プリアンブル• 最大 24bit データ• 4 つのステータスビット• V は有効性ビットで、現在のサンプルを直接アナログ信号に変換できることを意味します。
• P は受信したサブフレームのパリティビットで、受信したサブフレームのチェックに使用します。
• U はユーザデータチャネルで、各メッセージは 192bit で構成されています。
• CS はチャネルステータスで、各メッセージは 192bit で構成されます（サンプリングレート、サンプル長など）。

各サブフレームには、3 つのフィールドに分割された 32bit が含まれています。
• 同期プリアンブルによりブロックとサブフレームの境界を検出します。
• ペイロードは 24bit。
• ステータスビット：V、U、CS、P

23

SPDIF プロトコル（4/4）

24• シンボルレート：• オーディオサンプルレート（fS）は、次の式により調整できます：

𝐹 =𝐹 _128 × 𝑀𝐶𝐾𝐷𝐼𝑉FSAI_CKMCKDIV+1

オーディオ
サンプルレート

シンボルレート

5.6448MHz

144.1kHz

2.8224MHz

6.144MHz

148kHz3.072MHz

12.288MHz

196kHz6.144MHz• データフォーマット：• データレジスタは、CS、U、V bit に加え、データを含む必要があります。

適切なオーディオサンプルレート（FS）を生成するには、Fsai_ck
周波数を調整する必要があります。
送信 FIFO 内のデータはこのスライドの通りに整列させ、データの MSB は常に 23 の位置にしなければなりません。

24

PDM インタフェース（1/2）
De-interleaver

To TDM
Interface• PDM インタフェースは、マイクロフォンから受信したビットストリームを TDM フレームに再配置します。
Interrupt/DMA
Requests

APB bus• 8bit ディレイラインにより、ビームフォーミングアプリケーションが可能になります。

7 6…...

delay line
delay line

8-bitregister

7 6…...

1 0DEMUXMIC1ADCPDM IFAPB Interface

SAI_CK_A

Clockgen.

FIFO

SerialInterface

Sub-Block A
Configured in RX
MASTER TDM protocol

TDM

FIFO

SerialInterface

APB Interface

APB bus

MIC2ADCD[2]De-interleaver

MIC3ADC

MIC4

D[3]

De-interleaver

ADC

De-interleaver

gnd

CK[1]
Control

CK[2]

IO LineManagement

Clockgen.

D[1]De-interleaver

Sub-Block B
SAI_CK_B

D[x]

1 0

SAIx

• サブブロック A は TDM モードに設定する必要があります。
• サブブロック B は他のアプリケーション用に自由に使用できます。

8-bitregister

Zoom

TDM interface• 最大 6 つのマイクロフォンを接続できます（例では 4 つのマイクロフォンを使用）

25

Not available in
PDM mode

FS_A
SCK_A
SD_A
MCLK_A
FS_B
SCK_B
SD_B
MCLK_B

Interrupt/
DMA
Requests

PDM インタフェースは、デジタルマイクロフォンから受信したビットストリームを TDM フレームに再配置します。
PDM インタフェースは新しい TDM フレームを送信する前に、各マイクロフォンからの 8bit の受信を待ちます。
さらに、PDM インタフェースは、各マイクロフォンストリームに 8bit のディレイラインを提供します。
これらのディレイラインは、マイクロフォンに提供されるビットストリームクロックの分解能で機能します。
8bit のディレイラインはビームフォーミングアプリケーションを有効化し、マイクロフォンの配置に関する制約を取り除きます。
PDM インタフェースが有効の間は、サブブロック A のシリアルインタフェースを使用した外部デバイスの接続はできません。
このシリアルインタフェースは PDM インタフェースに内部接続されており、サブブロック A は RX マスタとして TDM モードに設定する必要があります。
図に 4 本のデジタルマイクロフォンの接続例を示します。D[1]、D[2]、またはD[3]の各データラインは、1 つまたは 2 つのデジタルマイクロフォンに接続できることに注意してください。

サブブロック B は他のアプリケーションに使用でき、TDM、PCM、I2S、またはその他のサポートされたプロトコルで外部デバイスを接続できます。

25

PDM インタフェース（2/2）

26• マイクロフォンの適切なサンプリング周波数（fCK[x]）を取得するには、次の式
によりビットクロックの周波数（fSCK_A）を調整する必要があります。
𝑓_=2 ×𝑓[ ]×

𝑀𝐼𝐶𝑁𝐵𝑅 + 1• フレームの長さは、マイクロフォンの数に応じて調整する必要があります。
FRL = 16 × 𝑀𝐼𝐶𝑁𝐵𝑅 + 1-1

MICNBR = 0、1～2 本のマイクロフォンを D[1] に接続
MICNBR = 1、3～4 本のマイクロフォンを D[1]、D[2] に接続
MICNBR = 2、5～6 本のマイクロフォンを D[1]、D[2]、D[3] に接続

この PDM インタフェースでは、ビットクロック周波数をサンプリング周波数とマイクロフォンの数に応じて調整する必要があります。
接続するマイクロフォンの数に応じてフレーム長も調整します。

26

AC’97 プロトコル

27• SAI は AC’97 リンクコントローラとしても機能することができます。
• スロット数は 13 に設定されています。
• タグスロット：スロット0（16bit）• データスロット：スロット1～12（20bit）• フレーム長は 256bit に固定されています。

SAI は AC’97 リンクコントローラとしても機能することができます。
このプロトコルでは、フレーム長、スロット番号、スロット長はハードウェアで設定します。

27

割込みと DMA

28

• 割込み：
割込みイベント

説明

割込みのクリア法

FREQ

FIFO リクエスト (FIFO 閾値到達)

SAI_xDR 読出しまたは書込み (2)OVRRUDR

オーバーラン／アンダーランエラー

COVRUDR = 1

AFSDET

予測フレーム同期を検出

CAFSDET = 1

LFSDET

レイトフレーム同期検出

CLFSDET = 1

CNRDY

コーデックノットレディ （AC’97モードのみ)

CCNRDY = 1

WCKCFG

不正なフレーム長設定 (1)CWCKCFG = 1

MUTEDET

ミュート検出CMUTEDET = 1（1）WCKCFG が 1 の場合、SAI は自動的に無効になります（SAIxEN = 0）。
（2）より正確には、FIFO のレベルが閾値を下回っている場合。

• DMA：• FIFO が閾値に達したときに DMA リクエストを生成されます。

割込みを生成するため、複数のイベントを有効化します。
WCKCFG イベントは、SAI のフレーム長が正しくプログラムされていないことをユーザに知らせます。この機能は、マスタモードでのみ意味があります。

28

低電力モード
モード

説明

RUN

アクティブ

SLEEP

アクティブペリフェラル割込みによって、デバイスは SLEEP モードを終了します。

STOP

停止。ペリフェラルレジスタの内容は保持されます。

STANDBY

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

次の表は、考えられるさまざまな電力モードにおけるSAI アクティビティの概要を示しています。
SAI は、RUN モードと SLEEP モードでアクティブになり、STOPモードで停止し、STANDBY モードで電源がオフになります。
SAI が正しく動作するには、バスインタフェースクロック（APB クロック）とカーネルクロック（SAI_CK_x）が必要です。

29

アプリケーションの例（1/3）

30• マスタ全二重またはデュアルレーン：• サブブロック A がマスタです。
• サブブロック B がスレーブです。
• サブブロック B はサブブロック A と同期しています。

全二重マスタモードの場合、データレーンが2つ必要なためサブブロックを 2 つ使用します。
マスタサブブロック A は、内部同期機能（IO ライン管理）によりスレーブサブブロック B に同期を提供します。
この例では、サブブロック B は SD_B のみ使用することに注意
してください。
内部同期により、IO の量が最小限に抑えられます。

30

アプリケーションの例（2/3）

31• TDM マスタ、4スロット：• SAI_A のプログラミング概要：• SAI_B のプログラミング概要

LSb

MSb

LSb

MSb

• スレーブ RX モード• 4 スロット（NBSLOT = 3）、スロット 0、1 がアクティブ（SLOTEN = 0x03）• 内部同期有効（SYNCEN = 1）
• スロットサイズはデータサイズと同じ

LSb

LSb
LSb

MSb

MSb
MSb

• マスタTX モード• 4スロット（NBSLOT = 3）、スロット 0、2、3 がアクティブ（SLOTEN = 0x0D）• スロットサイズはデータサイズと同じ

これは、TDM プロトコルを使用した別の種類の全二重モードです。
スロット 1 はサブブロック A では非アクティブ（未使用）、スロット2 および 3 はサブブロック B では非アクティブです。
両方のサブブロックに対し 4 つのスロットを持つフレーム構造になっています。
サブブロック A は、サンプルをフレームあたり 3 つ生成します。
サブブロック B は、サンプルをフレームあたり 2 つ受信します。

31

アプリケーションの例（3/3）

32• 4 本のマイクロフォンを 16kHz（CK[1] = 1.024MHz）で接続：• SAI_A のプログラミング概要：
説明 (1)

フィールドの値

マスタ RX モード

MODE = 1

TDM プロトコル、8bit の 4スロット

PRTCFG = 0、NBSLOT = 3、SLOTEN = 0xF、SLOTSZ = 0

スロットサイズは 8bit、フレーム長は32bit

FRL = 31、FSALL = 0、DS = 2

FS はアクティブハイ、フレームオフセットなし、スロットオフセットなし

FSPOL = 1、FSOFF = 0、
FBOFF = 0

SCK_A クロックを 4.096MHzに設定
マスタクロックは生成されません

MCKDIV = 14、NOMCK = 1

PDM設定： 1 つのクロックで最大 4つのマイクロフォン

MICNBR = 1、CKEN1 = 1、PDMEN = 1（1）カーネルクロックである SAI_CK_A は 61.44MHzと想定しています。

この例では、4 本のデジタルマイクロフォンが提供するサンプルをキャプチャする際の最も重要な SAI 設定を示しています。
一般的なアプリケーションでは、マイクロフォンは必要なオーディオレートの 64 倍のビットストリームクロック周波数を受け取ります。
アプリケーションが 16kHzのオーディオストリームを処理する場
合、デジタルマイクロフォンに提供されるビットストリームクロックは、16kHz に 64 を掛けたものにする必要があります。これはクロック周波数、1.024MHzに対応します。
4 つのデータストリームがあるため、ビットクロック SCK_A は、マイクロフォンに提供されるビットストリームクロックの 4 倍にする必要があり、その結果、ビットクロック周波数は 4.096MHzになります。
この設定では、SAI_A はスロットを受信するたびに RX FIFO に8bit のデータを書き込みます。
16kHzオーディオ信号を再構築するため、ソフトウェアは各マイクロフォンストリームに対してローパスフィルタリングを実行し、その後 64 倍のデシメーションを行います。

32