USB-101(FT2232H)によるMPSSEを使ったSPI通信例

2010/02/22-

 FTDIデバイスにはMPSSE(Multi-Protocol Synchronous Serial Engine)というモードが用意されています。
このモードを使用することによりシリアル通信(I2C、SPI、JTAG等)をエミュレートし、通信することが可能です。

今回は弊社製品でコンフィギュレーション用デバイスとして使用しているM25P16とUSB-101を接続し、SPI通信してみました。

USB-101を使用していますので、FT2232Hでの通信例となります。(FT2232Dではありません)

FTDIからSPI通信用のDLLが公開されていますが、今回はD2XXから直接操作しています。
コマンドの詳細やタイミング制約についてはFT2232Hの各種データシートをご参照ください。
◆構成

下図のようなシンプルな構成です。
AチャンネルのMPSSEポートを、直接M25P16に接続しています。



◆M25P16通信仕様

下図のように定められています。下記のタイミングに合うようなMPSSEコマンドを使用する必要があります。

・データ入力:立ち上がりエッジ
・データ出力:立ち下がりエッジで確定

CLKは常時High/Lowどちらでもかまいませんが、今回は常時Lowとしました。
動作レートは75MHz、データ読み出しは33MHz Maxです。データはMSBから順に送信されます。


(M25P16データシートより抜粋、ステータスレジスタ読込み波形)
◆MPSSEの動かし方

MPSSEモードではコマンドデータを送信して動作を指示します。

VCPモードで0x86, 0x01, 0x00をFT_Write()すると、3Byteのデータがポートから出力されますが、
MPSSEモードでは、クロックレート(0x86)を0x0001に変更します。
0x2C, 0x10, 0x00の送信は「SDIポートから16Byte取得する」という動作指示になります。
◆MPSSEの通信設定

サンプルプロジェクトよりコードを一部抜粋しました。(ここをクリック 別窓で開きます)
合わせてご覧ください。

まずはじめにUSB-101をMPSSEモードに切り替えます。
MPSSEへの切り替えはFT_SetBitMode関数で行います。APIのみで移行できますので、EEPROMに特別な設定は必要ありません。
第3引数の0x02でMPSSEモードに切り替わります。第2引数はポートの方向で1:OUTPUT、0:INPUTです。

 FT_SetBitMode(ftHandle, (UCHAR)0xFB, (UCHAR)0x02);


TCKのレートを設定します。FT2232Hでは最大30MHzまで設定可能です。(FT2232Dでは6MHzまでです)
今回は15MHzを指定しています。outBuffer[]はFT_Write()でまとめて送信します。

 outBuffer[buffCount++] = 0x86;
 outBuffer[buffCount++] = 0x01;
 outBuffer[buffCount++] = 0x00;
 FT_Write(ftHandle, outBuffer, buffCount, &dwByteWritten);



各ポートの初期値を設定します。この処理を行わないとデータの入出力コマンドが反映されませんのでご注意ください。
ポートの方向も同時に設定することになります。

 outBuffer[buffCount++] = 0x80; //SET DATA BITS LOW BYTE
 outBuffer[buffCount++] = 0x08; //Value
 outBuffer[buffCount++] = 0x0B; //Direction 1:OUT, 0:IN

 FT_Write(ftHandle, outBuffer, buffCount, &dwByteWritten);

ポートとレートの設定は以上です。

◆MPSSEデータの入出力

コマンドデータでデータの入出力を指示します。

送信コマンド:0x11 (立ち下がりエッジ出力、MSBから、バイト単位)
受信コマンド:0x20 (立ち上がりエッジ入力、MSBから、バイト単位)

下図はステータスレジスタ出力コマンドを送信(0x05を出力)し、値(0x02)を読み出した波形です。


(クリックして拡大)


M25P16のIDを読み出してみました


(クリックして拡大)



SPI-ROMのIDについては、こちらもご参考にご覧ください

◆サンプルアプリケーション

ファイルの書き込みと、読み出データの保管ができます。
対象のメモリはST/MicronのM25P16のみです。(メモリサイズを2Mbと決め打っています)

プロジェクトを公開しておりますので、ご自由に改造していただけます。





◆ アプリ単体はこちらからダウンロードできます。
C++Builderプロジェクト(ソース)はご希望の方に無償提供いたします。ソースリクエストページからご請求ください。
どうぞ皆さんのご参考になさってください。ただし、コードやアプリのご使用は皆さまの責任で(At Your Own Risk!)お願いいたします。
メールでのご質問はこちらへどうぞ
FTDIシリーズTOPへ