2012-02-13 141 views
1

我有一个C#窗体窗体程序,它使用FTDI FTD2XX_NET库来枚举使用ftdi驱动程序的设备并获得它们的优点。使用FTDI检测正确的设备FTD2xx_NET

我的问题是我想确定具体是否我正在说的硬件是我正在寻找的特定设备。这是一个自定义的硬件,但看起来供应商留下了FTDI芯片组的通用PID/VID。

现在我已经使出发送命令并等待有效响应/超时,但是这似乎可能在更广阔的世界失败鉴于大量采用这种芯片的设备。

解决此问题的正确方法是什么?我不是一个硬件程序员,所以我不确定最佳实践建议是什么。如有需要,我可以要求供应商修改硬件固件。

回答

2

即使是一个普通的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/VID等,使用FT PROG。在保留通用PID/VID的同时使用自定义描述将允许您在不做任何修改的情况下使用来自FTDI的签名驱动程序。

0

我假设您正在尝试与第三方开发的设备进行通信?

如果供应商没有设置自定义的PID/VID(即它保留为FTDI设置的默认PID/VID),那么试图通过通信协议与设备通信似乎是合理的。通信协议通常以一组握手命令开始,以确保您正在与正确的设备进行通信。设备是否有这样的命令?

1

httpstackoverflow.comquestions9264312detecting使用-FTDI-ftd2xx净正确器件用

正如上面提到可以使用

  • DEVICELIST [I]。说明,但也
  • DEVICELIST [I ] .SerialNumber,都可以用FTDI实用程序FT_Prog.exe或一些自定义代码重新编程,这是我为设备Nusbio所做的。
  • 还可以检测与API GetDeviceID FT232RL,FT231X或FT232H具有不同的ID,其是一个无符号长
类型芯片