USB-008に8255を接続

2004/5/4-

   弊社のFDTI社の次世代高機能USBチップFT2232の評価ボードUSB-008におなじみ8255を接続してみました。
ここでは、NECのuPD71055 を使いました。
2004/5/21:実験用基板を作成いたしました
クリックして拡大
 まず、回路図はこうなっております
詳細タイミングはチェックしておりません。
 MCU Host Bus Emulation MODEでは、下位アドレスとデータがマルチプレックスされていますので、下位アドレスは使わず上位アドレスのみを用いています。
FT2232の書込みタイミング図
FTDI社DATASHEETより
8255(uPD71055)のタイミング図
このように、ユニバーサル基板にuPD71055と、LED8個、押しボタンを4個を取り付けました。
 たとえばLEDの点灯は以下のように行います。
ここに出てくるコマンドについては、FTDI社のアプリケーションノートAN2232C-01_MPSSE_Cmnd.pdfにあります。
 下記ソースはDelphiで恐縮ですが、問題なくおわかりいただけると思います。
(Delphiはハード屋がちょとチェックするのに最適のような気がします)
 出力テスト
procedure TForm1.Button1Click(Sender: TObject);
begin
   Open_USB_Device;

   Set_USB_Device_BitMode($00, $08 ); // MCU Host Bus Emulation MODEの開始

 // 8255のモードセット
   FT_Out_Buffer[0] := $93;  //拡張アドレスによるデータ出力コマンド
   FT_Out_Buffer[1] := $03;  //上位アドレス(コントロール)
   FT_Out_Buffer[2] := $FF;  //下位アドレスはダミー
   FT_Out_Buffer[3] := $8B;  //MODE 0、PORT-Aのみ出力、他は入力
   Write_USB_Device_Buffer( 4 ); // 出力

// 8255のPAに0x55を出力(LEDの点灯)
   FT_Out_Buffer[0] := $93; //拡張アドレスによるデータ出力コマンド
   FT_Out_Buffer[1] := $00;  //上位アドレス(PORT-A)
   FT_Out_Buffer[2] := $FF;  //下位アドレスはダミー
   FT_Out_Buffer[3] := $55;  //出力データ
   Write_USB_Device_Buffer( 4 ); // 出力


   Set_USB_Device_BitMode($00, $00 ); // MCU Host Bus Emulation MODE終了
   Close_USB_Device;

end;
 入力テスト(8255のモードセットは省略)
procedure TForm1.Button2Click(Sender: TObject);
var
   rdt,res: integer;
begin
   Open_USB_Device;
   Purge_USB_Device_Out;
   Purge_USB_Device_In;

   Set_USB_Device_BitMode($00, $08 ); // MCU Host Bus Emulation MODEの開始

   FT_Out_Buffer[0] := $91;  // リード拡張アドレス
   FT_Out_Buffer[1] := $02;  // PORT-C
   FT_Out_Buffer[2] := $FF;  // 下位はダミー
   Write_USB_Device_Buffer( 3 );

   // 受信を待つ
   repeat
     res := Get_USB_Device_QueueStatus;
   until FT_Q_Bytes > 0;

   // 1バイト受信
   Read_USB_Device_Buffer(1);

   //結果表示
   Label1.Caption := inttostr( FT_In_Buffer[0] );

   Set_USB_Device_BitMode($00, $00 ); // MCU Host Bus Emulation MODEの終了

   Close_USB_Device;

end;
押しボタンを1つ押したとき。
 リードタイミング波形です。
D0、CS、RDを観測しました。
クリックして拡大
 このように、簡単な手順でUSB-008から8255(uPD71055)を操作できることがわかりました。

HDLのホームページへ