USB-008によるSPI通信実験

2005/10/10-

   弊社のFDTI社の次世代高機能USBチップFT2232の評価ボードUSB-008にをつかって、SPI通信の実験をおこないました。
とりあえず送信について実験しました。
 Delphiによる送信プログラム。FTDI社のサンプルを参考にしています。書いてない部分は元のサンプルを参考にしてください。
参考資料:
 FTDI社 AN2232C-02_IObitmode.pdf
 MSSPEモードでの処理開始
// FT2232C open & initial
procedure TForm1.SPI_start;
var
res : FT_Result;
passed : boolean;
begin
    Set_USB_Device_BitMode($00, $00 );
    res := Set_USB_Device_BitMode($df, $02 ); // 02: MPSSE MODE
    if res = FT_OK then begin
        passed := Sync_To_MPSSE;
        if passed then
           FT2232OPEN.Checked := True
        else
           Close_USB_Device;
    end;
end;
モード 02 がMSSPEモードになります。
 MSSPEモードで”ABCD"+<CR>を送信
procedure TForm1.Button10Click(Sender: TObject);
begin
   if FT2232OPEN.Checked then begin
        OutIndex := 0;
        //---------------

        AddToBuffer($80); // LowByte設定
        AddToBuffer($00); // DATA
        AddToBuffer($FB); // GPIO11-14設定
           Saved_Port_Value := $08;
        //---------------
        AddToBuffer($82); // HighByte設定
        AddToBuffer($0F); // DATA
        AddToBuffer($0F); // GPIO21-24設定
        //---------------
        AddToBuffer($86); // clk divisor設定
        AddToBuffer($04); // 1.2MHz
        AddToBuffer($00);; //
        //---------------
        AddToBuffer($85); // turn off loop back
        //---------------
        AddToBuffer($19); // 11/MSB 19/LSB first
        AddToBuffer($04); //
        AddToBuffer($00);

        AddToBuffer(Word('A'));
        AddToBuffer(Word('B'));
        AddToBuffer(Word('C'));
        AddToBuffer(Word('D'));
        AddToBuffer($0D); // CR
        //---------------
        SendBytes(OutIndex); // send
    end;
end;
 GPIOのビットは1とすると出力モードになります。
GPIOにより、CSやその他の信号に割り付けます(任意)。

AddToBufferでFT2232へ送信するデータを用意して
まとめて送信してます(SendBytes)。
AddToBufferでOutIndexは加算されます。
これらの関数はFTDI社のサンプルそのままです。

 コマンド11hがMSB firstでの送信、コマンド19hがLSB firstでの送信となります。
 レングスは0で1バイト送信となります。
 MSSPEモードでの処理終了(クローズ)
procedure TForm1.SPI_end;
begin
    FT2232OPEN.Checked := False;
    Close_USB_Device;
end;
 実際に出力した波形をご覧ください。それぞれクリックして拡大できます。
LSB firstでの送信波形 MSB firstでの送信波形

HDLのホームページへ