先月試した SiliconLabs製のCP2103は汎用I/Oが4ビット付いている。電圧仕様は3.3Vなので気を使った。似たようなものにFTDI社製のFT232RLがある。こちらはI/O電圧が3.3Vと5Vより選択できる。なかなかよさそうなのでFT232Rを試してみる。まずはFT232RLの汎用I/O(CBUS)を操作する簡単なソフトを作成した。
1.環境
WindowsXP
VisualC++Express
MicrosoftPlatformSDK
2.必要なもの:
FTDI社より下記ファイル
CDM 2.00.00.zip (ドライバ、DLL、Lib、ヘッダファイル)
MProg3.0_Setup.exe (EEPROM書き換えツール)
3.ソースリスト
#include < windows.h >
#include < stdio.h >
#include "FTD2XX.H"
int main(int argc, char *argv[])
{
char cmd;
LPSTR pos;
BYTE data;
HANDLE hc;
int res;
char Buf[64];
Buf[0] = 0;
if( argc < 2 || (toupper(*argv[1])=='W' && argc < 3 )) {
printf_s("FT232RCBUS r\nFT232RCBUS w 1100\n");
return( 0 );
}
cmd = *argv[1];
res = FT_ListDevices( 0,
Buf,
FT_LIST_BY_INDEX | FT_OPEN_BY_DESCRIPTION );
hc = FT_W32_CreateFile( Buf,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED
| FT_OPEN_BY_DESCRIPTION,
NULL );
if( hc == INVALID_HANDLE_VALUE ) {
printf_s( "Open Error:%s\n", Buf);
res = 11;
} else {
switch( toupper( cmd )) {
case 'R':
res = FT_GetBitMode( hc, &data );
if( res == FT_OK ) {
printf_s( "%x\n", data );
} else {
printf_s( "R command Error %d\n", res );
}
break;
case 'W':
pos = argv[2];
data = 0;
if( pos[0] == '1' ) data |= 0x08;
if( pos[1] == '1' ) data |= 0x04;
if( pos[2] == '1' ) data |= 0x02;
if( pos[3] == '1' ) data |= 0x01;
res = FT_SetBitMode( hc, 0xf0 | data, 0x20 );
if( res != FT_OK ) {
printf_s("W command Error %x\ndata %x\n", res, data );
}
break;
default:
printf_s( "FT232RCBUS r\nFT232RCBUS w 1100\n" );
break;
}
FT_W32_CloseHandle( hc );
}
return( res );
}
4.使い方。(PCに1つだけFT232RLを接続した場合を想定)
まずMProgツールでCBUSのビットをI/Oに設定してEEPROMを書き換えておく。
CBUS の出力状態を読む。
FT232RCBUS.exe r
CBUSの出力を変更する。(例:bit3とbit2を1に、bit1とbit0を0にする)
FT232RCBUS.exe w 1100
これをバッチファイルなどで利用する。
Posted by やんもす at 2007年06月10日 00:32