USB-101(FT2232H)によるMPSSEを使ったSPI通信例 |
|
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へ |