- #include <windows.h>
- #include <stdio.h>
- #include "cusb.h"
- #include "fx2fw.h"
- #include "fx2fw_prog.h"
- HANDLE dev_handle;
- int main( int argc, char *argv[] ){
- u8 cmd[512];
- s32 i,j;
- if(cusb_init(-1,&dev_handle,fw_bin,"F2FW","V100")){
- printf("Can't found EZ-USB.\n");
- exit(-1);
- }
- i=0;
- cmd[i++]=CMD_MODE; //PIO
- cmd[i++]=MODE_PIO;
- cmd[i++]=CMD_OEB; //PORTB is output
- cmd[i++]=0xff;
- cmd[i++]=CMD_OEA; //PORTA is input
- cmd[i++]=0x00;
- usb_bulk_write(&dev_handle,CPIPE,cmd,i);
- for(j=0;j<0xff;j++){
- i=0;
- cmd[i++]=CMD_OUTB;
- cmd[i++]=j;
- cmd[i++]=CMD_INA;
- usb_bulk_write(&dev_handle,CPIPE,cmd,i);
- usb_bulk_read(&dev_handle,RFIFO,cmd,1);
- printf("PORTA=%x\n",cmd[0]);
- }
- }
|
3-4行目 FX2FWに必要なヘッダファイルのインクルードです。
5行目 FX2チップに転送するFWのインクルードで
u8 fw_bin[]={...};
が定義されています。
FWは10行目のcusb_init()関数でFX2チップに転送されます。
10行目 cusb_init()関数でFX2の初期化とFWの転送を行います。
第1引数は何番目に認識されているEZ-USBを使用するかを指定します。-1を指定することで未使用のEZ-USBを選択できます。
第2引数はUSB操作のために必要なハンドルを指定します。
第3引数はFX2に転送するFWのポインタ。
第4引数はFW識別用の文字列で"F2FW"を指定。
第5引数はF2FWのバージョン、第4引数とセットでFWが転送済みかを認識します。
15-16行目 FX2FWの動作モードを設定します。今回はPIOモードということで0を設定しますが、GPIFやFIFOモード、8/16bitの切り替えなどの設定が出来ます。詳しくはfx2fw.hを参照してください。
17-20行目 ポートAを全ビット入力、ポートBを全ビット出力に設定します。
21行目 コマンドをFX2に転送します。コマンド用のCPIPEを使用して、cmd配列をiバイト転送します。コマンドはエンドポイントの長さ(USB2.0で512Byte、USB1.1で64Byte)までまとめて発行することが可能です。
22-30行目 ポートBに0x00〜0xffを出力しつつ、ポートAを読み出しコンソールに表示するプログラムです。
26行目で指定したポートAからの入力データは、28行目のusb_bulk_read()関数によってRFIFOパイプから読み出されます。
読み出すバイト数は今回は1バイトですが、複数のコマンドを組み合わせて発行することで、複数のバイトを読み込む場合もあります。
|