FT232R とは USB-シリアルの変換チップです. 私も これ やこれなどで 活用していました. 通常シリアル変換以外の機能は使わない主義なのですが, あるとき緊急に CBUS を I/O ピンとして使う必要があったのでやり方を調べてみました. 結果,
プログラムの以下のような感じです (ビルドには ftd2xx.lib をリンクする必要があります).
#include "stdio.h" #include <windows.h> #include <stdio.h> #include "FTD2XX.H" int main(){ HANDLE hc; int res; char Buf[64]; Buf[0] = 0; 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){ fprintf(stderr, "Error\n"); //デバイスが見つからない return -1; } FT_W32_CloseHandle(hc); return 0; } |
CBUS0〜3 の入出力の向きと出力時の H/L は FT_SetBitMode() の第二引数で指定します. たとえば CBUS0〜2 を出力にして, CBUS1 だけを H にしようとすると
BYTE data=0x72; // 0111-0010 res = FT_SetBitMode(hc, data, 0x20); if(res != FT_OK) fprintf(stderr, "Error\n"); // 失敗 |
BYTE data; res = FT_GetBitMode (hc, &data); if(res != FT_OK) fprintf(stderr, "Error\n"); // 失敗 |
なお, 各ピンの H/L/Hi-z はプログラムが終了しても, デバイスを抜かないかぎり持続します.
ところで, 上述したようにこのプログラムはあらかじめ
FT-Prog で CBUS の機能を I/O モードにしておく必要があります.
ところがこの FT-Prog は .Net Framework 4
を要求してくるため動かすまでの道のりが長いです.
設定したいのは Cbus の機能とシリアルナンバだけだったら上記「処理」の部分にて
FT_PROGRAM_DATA ftData; char ManufactureBuf[32]; char ManufactureIDBuf[16]; char DescriptionBuf[64]; char SerialNumberBuf[16]; ftData.Signature1=0x00000000; ftData.Signature2=0xffffffff; ftData.Version = 2; ftData.Manufacturer = ManufactureBuf; ftData.ManufacturerId = ManufactureIDBuf; ftData.Description = DescriptionBuf; ftData.SerialNumber = SerialNumberBuf; res= FT_EE_Read(hc, &ftData); if (res== FT_OK){ strcpy(ftData.SerialNumber, SERIAL_NUMBER); ftData.Cbus0 = XX; ftData.Cbus1 = XX; ftData.Cbus2 = XX; ftData.Cbus3 = XX; ftData.Cbus4 = XX; // CBUS4 は I/O モードにできない printf("Setting..."); FT_EE_Program(hc, &ftData); printf("Done\n"); } |
一方 SERIAL_NUMBER は 15 文字以内の適当な文字列です. FT232R を積んだボードを量産した際, それらに同じシリアル番号を振っておくと, 別の固体を接続する度にドライバのインストールが始まったり, 別のシリアルポート番号が割り振られることがなくなります. ただしそれらの機器を同時に一つの PC に繋いだらどうなるかは分かりません.
せっかくなので設定を行う プログラムを作ってみました.
ft232rconf -r |
ft232rconf -c 0a 05 05 05 05 |
ft232rconf -s ABCDEFG |
しかしこの I/O 機能なかなかいいかもしれません. 今までは CP2102 や PL2303 等の同等品でも使えるようにとシリアル変換機能しか 使ってきませんでしたが, 便利なものは便利だと活用していった方がいいのかもしれません. 最後に使わなくなったシリアル番号の情報は こちらの Tipsで 消し去ることが可能です.