STM32H7 - OCTOSPI
Octo-SPIインタフェース
2.0版

こんにちは、STM32 Octo-SPIメモリインタフェースのプレゼンテー
ションへようこそ。このプレゼンテーションでは、マイクロコント
ローラと外部メモリの接続に広使われているOcto-SPIメモリインタ
フェースの特徴について説明します。

1

概要

2

• 外部シリアルFlashメモリとの通信インタフェースを提供• シングルからオクタルまで完全に設定可能• 読取りと書込みによるメモリ･マッピングをサポート• eXecute In Place(XIP)をサポート• データ修飾子 & 書込みストローブをサポート

アプリケーション側の利点• すべてのシングルからオクタルのSPI Flashメモリをサポート• 少ないピン数で対応可能• 既存のプロジェクトへFlashまたはRAMの追加メモリが簡単に統合

STM32製品の内部に統合されたOcto-SPIインタフェースは、マイクロコントローラが外部のシングル、デュアル、クワッド、またオクタルSPIメモリと通信できるようにする通信インタフェースを提供します。このインタフェースは完全な設定が可能で、現在市場で入手可能な既存のシリアルメモリを簡単に接続できます。外部
デバイスはメモリマップされ、読取りおよび書込み操作のためにシステムの他のメモリと同様に、どのシステムマスタもアクセスできます。
アプリケーションは、必要なピンがわずかで、シリアル外部メモリの簡単な接続の恩恵を受けます。メモリマッピング機能により、FlashやRAMのどちらでも必要なメモリが必要な場合に、外部メモリを既存のプロジェクトに追加するだけです。

2

通常のフレーム･フォーマット

3

現在のQuad-SPIの拡張• Quad-SPIと同じ構成可能なフェーズ• 各フェーズは読取り、および書込み操作用のQuad-SPI IPのように個別に構成可能• オクタルメモリをサポートする新しい8レーン･モード• データ･ストローブの読取りと書込み用の新しいRWDS信号

Octo-SPIインタフェースは、フレームフォーマット設定に高い柔軟性を提供し、シングルデータレーンから最大8つのデータラインまでのシリアルFlashに対応します。通常のQuad-SPIと同様に、各フェーズを有効または無効にしたり、各フェーズの長さを構成したり、各フェーズで使用する回線数を1~8に設定することができます。新しいRWDS信号は、書込み操作時の書込みストローブ、または読取り操作中の読取り修飾子として機能します。

3

ハイパーバスフレーム･フォーマット

4

現在のQuad-SPIの拡張• 新しいプロトコル• シングルコマンド / アドレスフェーズ• 可変遅延• データ･ストローブの読取りと書込み用の新しいRWDS信号
コマンド / アドレス

IO[7:0]

データ遅延カウント

nCS
SCLK
RWDS

ダミー

ハイ = 2x 遅延
ロー = 1x 遅延CA[47:40]CA[39:32]CA[31:24]CA[23:16]CA[15:8] CA[7:0]

バイト 1

バイト 0

バイト 3

バイト 2

バイト 5

ワードユニット

Octo-SPIは、コマンドとアドレスをシングルの初期フェーズで結合する新しい「ハイパーバス」モードをサポートします。通常のフレーム形式と同様に、ハイパーバスモードではデータ操作中に読取り修飾子と書込み用ストローブも使用されます。Octo-SPIは、ハイパーバス・プロトコル仕様で定義されている可変または固定の外部メモリ遅延をサポートします。

4

主な機能5• 3つの動作モード• インダイレクト• ステータスポーリング• メモリマップド• 最高60MHzの最適化された動作• シングル･データレート(SDR)のサポート• デュアル･データレート(DDR)のサポート

STM32製品の内部に統合されたOcto-SPIは、このプレゼンテー
ションで後述される3つの動作モードを提供しています。外部メモ
リとの通信は、シングルまたはデュアルのデータレート動作をサポートしています。

5

動作モード6

柔軟な動作モードでCPU負荷を軽減• インダイレクト･モード• すべての動作はレジスタにより実行（従来のSPI）• ステータスポーリング･モード• Flashメモリ･ステータス･レジスタの定時読出しおよびマッチ時の割込み生成• メモリマップドモード• 外部Flashメモリを内部メモリのように読出し可能

OctoSPIは、次の3つの異なる動作モードをサポートしています。
- インダイレクトモードでは、従来のSPIインタフェースとして動作し、全ての動作はレジスタを通じて実行されます。
- ステータスポーリングモードでは、Flashステータスレジスタが周期的に読み出され割込みが生成されます。
- メモリマップドモードでは、外部Flashメモリを内部メモリのように読み出すことができます。

6インダイレクト動作モード

7

従来のSPIインタフェース• 従来の通信IPと同じ使い方• データは、データ･レジスタへの書込みまたは読出しで転送• バイト数はデータ長レジスタに指定• データFIFOの管理• 割込みフラグ(転送完了フラグ)• DMAサポート• トランザクションはいつ開始?
• 命令が必要なときに命令を書込み• 命令とアドレスが必要なときにアドレスを書込み• データ･フェーズが必要なときにデータを書込み

Octo-SPIメモリインタフェースをインダイレクト動作モードで使用すると、従来のSPIインタフェースのように動作します。転送データは、FIFOでデータレジスタを経由します。データの交換はソフトウェアまたはDMA主導で行なわれ、そのときにOcto-SPIステータスレジ
スタの割込みフラグを使用します。
各コマンドは命令を受けるコンテキストに応じて、命令、アドレス、または、データを書き込むと開始します。

7

ステータス･ポーリング動作モード

8

ソフトウェア･オーバーヘッドの低減• ステータスレジスタ･ポーリングの固有モード• プログラム可能なレジスタの長さ：8/16/24/32ビット• 指定した間隔での繰返し読出し動作8/16/24/32ビット• 応答をマスクし、一致した際に割込みを生成• プログラム可能なマスク(PSMKRレジスタ)• 一致レジスタ（PSMAR）で、マスクした値をビットごとに比較• 比較の結果は、ANDまたはORで処理• 一致を検出すると割込みを生成（一致フラグで停止）• 一致を検出すると自動的に停止

Octo-SPIインタフェースには、指示を受けずに外部Flashメモリのステータスレジスタを自律的にポーリングする固有のモードが実装されています。Octo-SPIインタフェースはまた、定期的に外部Flashメモリ内のレジスタを読み出すように設定できます。応答
データをマスクして、評価対象のビットを選択できます。選択したビットは、マッチレジスタに保存した要求値と比較します。比較の結果は、2通りの方法で取り扱われます。
• 論理積（AND）モードで、全ての選択ビットが一致したときに割込みを生成します。
• 論理和（OR）モードで、選択したいずれかのビットが一致したときに割込みを生成します。
一致が発生すると、Octo-SPIインタフェースが自動的に停止します。

8

メモリマップド･モード

9

プロジェクトへのメモリの拡張が容易
低電力管理• XiPをサポートするプリフェッチ• ウェイトステート付きの内部メモリとみなされる外部Flashメモリ• AHBアクセスにより、読出し動作が自動的に生成• インダイレクト･モードと同様に、フレームとオペコードはIP設定時に定義• nCSピンはローレベルのまま保持、クロックは停止してOcto-SPIバスをストールさせ、必要に応じてシーケンシャル読出しが再開• タイムアウトカウンタがnCSピンをハイレベルにリリースして低電力を実現

Octo-SPIメモリインタフェースはメモリマップドモードも備えています。本モードによるアプリケーションでの主な利点は、ウェイトステート数は異なるものの、内部メモリと外部接続メモリ間で読出しアクセスの手順に違いがないため、外部メモリの統合が容易になる点です。

このモードは、読取り操作と書込み操作と外部メモリの両方に適しており、RAMまたはFlashのどちらであっても、外部メモリの低速を補うためにウェイト状態を備えた内部メモリとして見られます。
このモードでサポートされる最大サイズは、256MBに制限されています。
プリフェッチバッファはローカル実行をサポートしているため、コードは内部RAMにダウンロードしなくても外部メモリから直接実行できます。
本モードはまた、一部のFlashメモリで提供されているSIOO（SendInstruction Only Once = 初回命令再利用）モードにも対応しています。コントローラはこの機能により命令を1回送信するだけで、後続アクセスのための命令フェーズを省略することができます。

9

割込みとDMA
割込みイベント

10

説明

タイムアウト

タイムアウトの発生時にセットステータス一致

自動ポーリングモードで、マスクされた受信データがマッチレジスタの該当ビットと一致したときにセットFIFO閾値

インダイレクト･モードで、FIFO閾値に達したときにセット転送完了

インダイレクト･モードで、プログラムされたデータ数が転送されたとき、またはモードに関係なく転送が中止されたときにセット転送エラー

インダイレクト･モードで、無効なアドレスへのアクセスがあったときにセット• DMAリクエストは、インダイレクト･モードでFIFO閾値に達したときに生成Octo-SPIは5つの割込みソースがあります。タイムアウト、自動ポーリングモードでマスクされた受信データがマッチレジスタの該当ビットと一致したときのステータス一致、FIFO閾値、転送完了、および転送エラーです。DMAリクエストは、インダイレクトモードでFIFO閾値に達したときに生成されます。

10低電力モード
モード

11

説明

RUN

アクティブ

SLEEP

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

低電力RUN

アクティブ

低電力SLEEP

アクティブ
ペリフェラル割込みによって、デバイスは低電力SLEEPモードから復帰

STOP1

停止
ペリフェラル･レジスタの内容は保持

STOP2

停止
ペリフェラル･レジスタの内容は保持

STANDBY

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

SHUTDOWN

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

Octo-SPIメモリインタフェースは、RUN、SLEEP、低電力RUN、低電力SLEEPモード時にアクティブとなります。Octo-SPIからの割込みにより、デバイスはSLEEPまたは低電力SLEEPモードから復帰します。STOP1、またはSTOP2モードでは、Octo-SPIは停止し、そのレジスタの内容は保持されます。STANDBYまたはSHUTDOWNモード
では、Octo-SPIの電源はオフになり、後で再び初期化する必要があります。

11

OCTOSPI & OCTOSPIM• Octo-SPIインタフェースは、シリアルPSRAP、シリアルNAND、シリアルNOR Flashメモリ、HyperRA、

12

HyperFlashなどの外部シリアルメモリのほとんどをサポート• シングル、デュアル、クワッド、オクタル通信をサポート• OctoSPI I/Oマネージャ(OCTOSPIM)によるシングル/デュアル/クワッド/オクタルSPIのマルチプレクス• 同じインタフェースを使用し、2つのオクタルメモリの接続を有効にする
Octo-SPI相互接続の例

Octo-SPI多重接続の例

Octo-SPIは、シングル、デュアル、クワッド、オクタル通信を対象とした専用の通信インタフェースです。
外部シリアルメモリのほとんどはサポートされています。
多重化モードでは、同じバスを2つの外部Octo-SPIメモリ間で共有できます。
多重化モードに必要なOcto-SPI2のチップセレクト(CS)は、すべてのSTM32H7シリーズのパッケージ品で使用できるわけではないことに注意してください。

12

Octo-SPI多重化モード

13• 多重モード機能は、同じインタフェースを使用して2つのオクタル･メモリを接続することが可能• これにより、使用するピンが22ピンではなく12ピンに減少• これにより、PCB設計の複雑さとコストを削減•2 OctoSPIポート 設定• OCTOSPIM_P1_NCS• OCTOSPIM_P1_CLK• OCTOSPIM_P1_DQS• OCTOSPIM_P1_IO[7:0]

多重化モード: 2番目のポートの1ポートとNCSのみが必要• OCTOSPIM_P2_NCS• OCTOSPIM_P2_CLK• OCTOSPIM_P2_DQS• OCTOSPIM_P2_IO[7:0]• OCTOSPIM_P1_NCS• OCTOSPIM_P1_CLK• OCTOSPIM_P1_DQS• OCTOSPIM_P1_IO[7:0]• OCTOSPIM_P2_NCS

代替信号に対して使用可能なOctoSPI Port2 シグナルは、
P2_NCS

多重化モードは、STM32H7A3/B3シリーズでサポートされている主要な機能です。
このモードでは、2つの外部メモリとの通信が可能になり、シングルのOctal-SPIバス(右側の図のポート1)を共有し、PCBのフットプリントと設計を簡素化します。
2つのメモリは同じプロトコルに従う必要はありません:例えば1つのメモリはハイパーバスモードで動作し、2つ目のメモリは“標準”のオクタルバスモードで動作します。
このような構成を有効にするには、バスの2番目のメモリを選択するために追加のチップ選択ピンのみが必要です。これにより、他の機能用に未使用のポートピンを解放することもできます。
このモードでは、I/Oマネージャブロック(画像の白いブロック)にある内部
ハードウェアアービタは、転送要求に応じてOCTOSPI1またはOCTOSPI2を選択します。
このアービタは、タイムカウンタを埋め込んで、各Octo-SPIの最大トランザクション期間を制限します。Octal-SPIバス帯域幅の共有を調整すると、Octo-SPIポートの1つが不足するのを防ぐことができます。
タイムカウンタの初期設定が完了すると、アービタの操作にはソフトウェア管理は必要ありません。

13アプリケーションの例

14• 接続可能でユーザ･インタフェースを持つウェアラブルアプリケーション
UART

DSI

シリアルFlash

OctoSPI1

I2C

シリアルRAM

OctoSPI2

BTモジュール

加速度計

SPI

ボタン

I/O

USBコネクタUSB

STM32H7A3
STM32H7B3

I2S

ディスプレイ

タッチパネル

オーディオコーデック• 外部Octo-SPIはグラフィカル(アイコン、フォント..その他)およびHMIに必要なオーディオデータを保存可能•

ウェアラブルアプリケーションでは、高品質のHMIと共に低電力管理機能が必要です。これは、STM32H7A3/B3 Octal-SPIイン
タフェースを使用して、背景画像、高解像度アイコン、フォントなど、複数の言語をサポートするために必要なすべてのグラフィカルコンテンツを外部Flashに保存することで実現できます。着信音のための追加のオーディオデータも、外部Flashによって提供される大きなスペースの恩恵を受けることができます。このようなデバイスを駆動するために必要なピン数も少ないので、非常に最適化されたシステム統合を可能にします。

14

関連ペリフェラル

15• このペリフェラルに関連する以下のペリフェラル･トレーニングを参照ください• RCC(Octo-SPIクロック･コントロール、Octo-SPIイネーブル/リセット)• 割込み(Octo-SPI割込みマッピング)• DMA(Octo-SPIデータ転送)• GPIO(Octo-SPI入力/出力ピン)

詳しくは、RCC、割込み、DMA、およびGPIOに関するペリフェラル
トレーニングスライドを参照ください。

15

参照

16

• 詳細については、以下の資料を参照ください• AN5050: Octal SPI interface (OctoSPI) on STM32 MCUs

詳しくは、AN5050「オクタルSPIインタフェースについて」を参照ください。

16