マイコンの基礎 - Quad SPI
概要
Quad SPIとは、通信機能の1つであり、Quad SPIフラッシュメモリ等のシリアルメモリにアクセスする機能である。
ユーザは、外部のシリアルメモリとマイコンのインタフェースの設計が容易になり、ピン数を節約することができる。
最近のマイコンの内蔵メモリは、以前と比較すると大容量になっているが、不足する場合は、外部メモリを使用する必要がある。
通常のメモリはアドレス線、データ線、信号線等を使用するため、複数のピンが必要になるが、
シリアルメモリを使用すると、シリアル通信でメモリにアクセスできるため、少ないピン数で接続できる。
Quad SPIを使用すると、容易にシリアルメモリと接続することができるため、ユーザは手軽に外部メモリを増設できる。
下図に、STM32F7シリーズに搭載されているQuad SPIの使用例を記載する。
メモリマップドモードを使用すると、シリアルメモリを通常のメモリのようにメモリマップに配置することができる。
2クロックで8ビットのデータ通信
ここでは、STM32F7シリーズに搭載されているQuad SPIを使用して記載する。
通常のSPIは、クロックと入力データ、出力データ、チップセレクト信号を使用して、1クロックごとに1ビットを送ってデータ通信を行う。
一方、Quad SPIはデータ線を4本使用して、1クロックで4ビットを1度に通信する。
下図に、通信プロトコル別のデータフォーマットを示す。
Quad SPIモジュールがサポートする通信プロトコルモードは、Single SPIモード、Dual SPIモード、Quad SPIモードの3種類である。
- Single SPIモード
- 信号名こそ異なるが、全2重3線式の通常のSPI通信のことである。
- 1クロックごとに1ビットを送るため、1バイト(8ビット)を送るには8クロック必要となる。
- Dual SPIモード
- 半2重通信である。
- 1クロックごとに2ビットを送るため、1バイトを送るには4クロック必要となる。
- データ部に注目すると、Dual SPIは半2重通信であるが、通常のSPIよりも2倍速い通信ができる。
- Quad SPIモード
- 半2重通信である。
- 1クロックごとに4ビットを送るため、1バイトを送るには2クロック必要となる。
- データ部に注目すると、Quad SPIは、信号線は4本必要であるが、通常のSPIよりも4倍速い通信ができる。
Quad SPI ICとの接続図は、"概要"セクションに示した通りである。
- CLK
- クロック出力
- BK1_IO0 / SO
- Dual / Quadモードの時は双方向のIO、Singleモードの時はシリアル出力信号
- BK1_IO1 / SI
- Dual / Quadモードの時は双方向のIO、Singleモードの時はシリアル入力信号
- BK1_IO2
- Quadモードの時は双方向のIO
- BK1_IO3
- Quadモードの時は双方向のIO
- BK1_nCS
- チップセレクト信号
通常のSPIの詳細については、マイコンの基礎 - EEPROMを参照すること。
通信フォーマット
下図に、Quad SPIのインストラクションやアドレス等を含んだ通信フォーマット例を示す。
これは、Quad SPIモードの読み出しコマンドの例である。
Quad SPIは、以下に示すコマンドを使用して、フラッシュメモリと通信する。
コマンドは5つのフェーズがある。
- インストラクションフェーズ
- フラッシュメモリのオペレーションを指示する。
- ユーザがインストラクションコードをQuad SPIモジュール内の決められたレジスタに書き込めば、このフェーズで出力される。
- このフェーズをスキップして、アドレスを最初から送ることもできる。
- アドレスフェーズ
- 1~4バイトで、オペレーションのアドレスを示すために送られる。
- このフェーズもスキップすることができる。
- オルタネートバイトフェーズ
- 一般的に、1~4バイトで、オペレーションのモードをコントロールするために送られる。
- ダミーサイクルフェーズ
- 空サイクルである。
- クロック周波数が高い場合、フラッシュメモリデータの受信 / 送信準備のためのサイクルである。
- データフェーズ
- 名前の通り、フラッシュメモリの書き込み / 読み出しデータである。
上記のフェーズの内、いくつかのフェーズは省略することができるが、
インストラクションフェーズまたはアドレスフェーズのいずれか1つ、オルタネートバイトフェーズまたはデータフェーズは必要となる。
nCS端子がLowになる時にコマンドが開始されて、Highに戻る時にコマンドの終了となる。
動作モード
STM32F7のQuad SPIモジュールには、以下の3種類の動作モードがある。
- インダイレクトモード
- インダイレクトモードは通常のSPIと同じモードである。
- 全ての操作は、レジスタを通して行われる。
- ステータスポーリングモード
- ステータスポーリングモードは、フラッシュメモリのステータスレジスタを周期的に自動で読み出し、割り込みも自動で発生させるモードである。
- メモリマップドモード
- メモリマップドモードは、外部メモリをメモリマップに割り当てられた内蔵メモリのようにアクセスできるモードである。
- ("概要"セクションの図を参照すること)
2つのQaud SPIフラッシュメモリとインタフェース
2つのQuad SPIを、1つのSTM32F7に接続することもできる。
下図に、接続図を示す。
2つのQuad SPIフラッシュメモリ(以下、QSPIフラッシュという)と接続するには、10本または11本の信号線(クロック含)が必要となる。
クロックはQSPIフラッシュ1とQSPIフラッシュ2で共通である。
BK1_IO0 / SO、BK1_IO1 / SI、BK1_IO2、BK1_IO3、BK1_nCSは、QSPIフラッシュ1用の信号である。
BK2_IO0 / SO、BK2_IO1 / SI、BK2_IO2、BK2_IO3、BK2_nCSは、QSPIフラッシュ2用の信号であるが、BK2_nCS以外はQSPIフラッシュ1用と同じである。
ただし、常に2つのQSPIフラッシュを同時にアクセスする場合、チップセレクト信号のBK1_nCS / BK2_nCSを共有できるため、1本で済む。
- BK2_IO0 / SO
- Dual / Quadモードの時は双方向のIO、Singleモードの時はシリアル出力信号
- BK2_IO1 / SI
- Dual / Quadモードの時は双方向のIO、Singleモードの時はシリアル入力信号
- BK2_IO2
- Quadモードの時は双方向のIO
- BK2_IO3
- Quadモードの時は双方向のIO
- BK2_nCS
- チップセレクト信号
※注意
Quad SPIの使用方法の詳細は各マイコンで異なるため、必ず、各マイコンのマニュアルを参照すること。
使用されている用語の定義も、各マイコンメーカーで異なることがあるため、各マニュアルの説明にしたがうこと。