2012-02-13 36 views
1

私はFTDIのドライバを使用してデバイスを列挙し、その適合するを取得するために、FTDI FTD2XX_NETライブラリを使用するC#のWindowsフォームプログラムを持っているを使用して、正しいデバイスを検出します。FTDI FTD2xx_NET

私の問題は、私は私が話しているハードウェアは、私が探しています特定のデバイスであれば、具体的かを決定する必要があります。これはカスタムのハードウェアですが、ベンダーがFTDIチップセット用の汎用PID/VIDを残したようです。

今私は、コマンドを送信し、有効な応答/タイムアウトを待っているに頼ってきたが、これは、このチップセットを使用して多数のデバイスを与えられた大きな世界に失敗する可能性が高いようです。

これに取り組むための正しいアプローチは何ですか?私はハードウェアプログラマーではないので、このためのベストプラクティス推奨が何であるか分かりません。必要に応じてベンダーにハードウェアファームウェアの変更を依頼することができます。

答えて

2

は、ベンダーは、デバイスの説明を変更することができます/ VIDなどをFT PROGを使用して設定します。一般的なPID/VIDを残してカスタム記述を使用すると、FTDIの署名付きドライバをそのまま使用することができます。

0

私は、あなたが第三者によって開発されたデバイスと通信しようとしていると仮定していますか?

ベンダーがカスタムPID/VIDを設定していない場合(つまり、FTDIによって設定されたデフォルトのPID/VIDのままになっている場合)、通信プロトコルを使用してデバイスと通信しようとすると合理的です。通信プロトコルは、通常、正しいデバイスと通信していることを確認するための一連のハンドシェークコマンドで始まります。デバイスにそのようなコマンドがありますか?

// Create new instance of the FTDI device class 
var ftdiDevice = new FTDI(); 

// Check how many FTDI devices are connected 
uint deviceNum = 0; 
ftdiDevice.GetNumberOfDevices(ref deviceNum); 

var status = FTDI.FT_STATUS.FT_DEVICE_NOT_FOUND;    
if (deviceNum > 0) 
{ 
    // Get information about the connected devices 
    var devicelist = new FTDI.FT_DEVICE_INFO_NODE[deviceNum]; 
    ftdiDevice.GetDeviceList(devicelist); 
    for (uint i = 0; i < deviceNum; i++) 
    { 
     if (devicelist[i].Description == "My Device Description") 
     { 
      status = ftdiDevice.OpenByIndex(i); 
      break; 
     } 
    } 
} 

if (status != FTDI.FT_STATUS.FT_OK) 
{ 
    throw new Exception("Unable to connect"); 
} 

あなたは、デバイスの説明、シリアル番号、PIDを確認したり、変更することができます:あなたが通信を開始する前にそれをチェックできるようにしても、一般的なPID/VIDと

1

httpstackoverflow.comquestions9264312detecting-正しいデバイス-FTDI-ftd2xxネット使用

あなた上述したように

  • DEVICELIST [i]を.DESCRIPTION、だけでなく、
  • DEVICELIST [Iを使用することができます] .SerialNumber、両方が再FTDIユーティリティFT_Prog.exeまたはいくつかのカスタムコードでプログラムすることができ、これは私がデバイスNusbioのために何をすべきかです。
  • また、APIのGetDeviceID FT232RL、FT231XまたはFT232H持っunsigned long型
で異なるIDを持つタイプのチップを検出することができます
関連する問題