« 特電FX3ボードの設計データを更新しました | トップページ | DIP20ピンサイズのRXマイコン基板が動いた! »

2013.02.14

EZ-USB FX3のCyAPIをBorland C++ Builderで開発する

EZ-USB FX3のパソコン側のコントロールソフトはCyAPI.dllを使って制御するのが一般的ですがこのCyAPI.dllは、どうやら古いBorland C++ Builder 2006では使えないようなのです。depwalkerで見ると、何もエクスポートしている関数がありません。これが噂の.NETのクラスライブラリというものなのかもしれません。

Cyusb_dep

Visual Studio 2010では開発できても、使い慣れたBorland C++ Builder 2006で開発できないのは不便です。そこで、CyAPI.dllを普通のWindowsのネイティブDLLにラッパするためのDLLをVisual Studio 2010で作ることにしました。

Visual Studio 2010で普通にDLLを作るのですが、プロジェクトにCyAPI.h、CyApi.lib、cyioctl.h、CyUSB30_def.h、setupapi.lib、usb100.h、usb200.h、UsbdStatus.hを追加しておきます。これらのファイルはEZ-USB FX3 SDKの中にあります。setupapi.libだけはWindows DDKの中から持ってきます。

プロジェクトはこんな感じ。CyAPI.hとcyioctl.hをインクルードして、CyApi.libとsetupapi.libを追加すればビルドは通ります。

Cyusb_dll

ヘッダファイルには次の関数を定義しておきます。

extern "C" {
TXUSBFX3_API bool  TKUSBFX3Open(int num,unsigned short *vid,unsigned short *pid,char *DeviceName,int MaxDevnameLength);
TXUSBFX3_API void  TKUSBFX3Close(void);
TXUSBFX3_API int   TKUSBFX3DeviceCount(void);
TXUSBFX3_API bool  TKUSBFX3WriteToRAM(const char *ImageFileName,char *ErrorReason, int ErrorReasonLength);
TXUSBFX3_API bool  TKUSBFX3WriteToSPIROM(const char *ImageFileName,char *ErrorReason, int ErrorReasonLength);
TXUSBFX3_API int   TKUSBFX3BulkOut(int ep,unsigned char *data,int length);
TXUSBFX3_API int   TKUSBFX3BulkIn(int ep,unsigned char *data,int length);
}

これで普通にプロジェクトが出来て関数がEXPORTできますが、VCで開発したDLLをBCCで使うには、BCCでimplibをしなければなりません。VCのプロジェクトのプロパティで、ビルド後イベントに、

"C:\Program Files\Borland\CBuilder6\Bin\implib.exe" -a "$(OutDir)$(TargetName).lib" "$(OutDir)$(TargetName).dll"

と書いておけば、自動的にBorlandC++用のlibに変換されるので便利です。

Fx3_bcc_3

こうして、CyAPIをBorland C++ Builderで使うことができるようになりました。

Fx3_bcc_dev

デバイスのOpen、Close、BulkIn、BulkOutはもちろん、EZ-USB FX3の内蔵RAMへのファームウェアダウンロードや、SPI ROMへのファームウェア書き込みにも対応しました。

速度は今のところ110MByte/secくらいです。前回の高速化実験ではデータバス16bit接続の場合でも130MB/secくらいはでていましたので、それよりは遅めです。

マネージドなDLLを呼び出しているところで少しオーバーヘッドが生じてしまったのかもしれません。

|

« 特電FX3ボードの設計データを更新しました | トップページ | DIP20ピンサイズのRXマイコン基板が動いた! »

コメント

コンパイル環境や必要なライブラリー等は揃えられそうなのですが、
具体的なプロジェクトを置いて頂くことは出来ないでしょうか。
CyAPIをBorland C++ Builderで使いたくて、

投稿: nagu | 2015.03.09 19:21

特電のwebサイトにログインすればダウンロードできますよ

投稿: なひたふ | 2015.03.09 19:36

コメントを書く



(ウェブ上には掲載しません)




« 特電FX3ボードの設計データを更新しました | トップページ | DIP20ピンサイズのRXマイコン基板が動いた! »