使用FTDI FTD2xx_NET检测正确的设备

时间:2012-02-13 16:41:54

标签: .net serial-port drivers

我有一个c#windows窗体程序,它使用FTDI FTD2XX_NET库来枚举使用ftdi驱动程序的设备并获得它们的组合。

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

现在我已经使用发送命令并等待有效的响应/超时,但考虑到使用此芯片组的大量设备,这似乎可能在更大的世界中失败。

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

3 个答案:

答案 0 :(得分: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");
}

您可以使用FT PROG检查或更改设备描述,序列号,PID / VID等。在保留通用PID / VID的同时使用自定义描述将允许您使用FTDI中签名的驱动程序而无需任何修改。

答案 1 :(得分:1)

httpstackoverflow.comquestions9264312detecting-使用纠正设备-FTDI-ftd2xx网

如上所述,您可以使用

  • devicelist [i]。描述,但也
  • devicelist [i] .SerialNumber,都可以使用FTDI实用程序FT_Prog.exe或一些自定义代码重新编程,这就是我为设备Nusbio所做的。
  • 您还可以使用api GetDeviceID检测类型芯片 FT232RL,FT231X或FT232H具有不同的id,即无符号长

答案 2 :(得分:0)

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

如果供应商尚未设置自定义PID / VID(即它保留为FTDI设置的默认PID / VID),则尝试通过通信协议与设备通信似乎是明智的。通信协议通常以一组握手命令开始,以确保您与正确的设备通信。设备是否有这样的命令?