无法打开与FTDI设备的连接

时间:2015-02-11 18:14:08

标签: osx-yosemite ftdi

我正在开发一个连接到FTDI设备的小型OS X应用程序。我根据this question中的答案配置了我的项目(我已将.dylib文件添加为框架,并将ftd2xx.h,WinTypes.h和ftd2xx.cfg文件添加到我的项目中)

我目前能够检测FTDI设备是否/何时通过USB连接:

DWORD deviceCount = 0;
FT_STATUS ftdiPortStatus = FT_ListDevices(&deviceCount, NULL, FT_LIST_NUMBER_ONLY)
if (ftdiPortStatus == FT_OK) {
    // The debugger tells me the deviceCount is now 1
    ...
}

但是,如果我尝试使用以下技术的 打开与设备的连接:

ftdiPortStatus = FT_OpenEx("FT232R USB UART",FT_OPEN_BY_DESCRIPTION,deviceHandle);
// OR
ftdiPortStatus = FT_Open(0, deviceHandle);

返回的ftdiPortStatus始终为3(FT_DEVICE_NOT_OPENED)。

答案here表示问题可能是Apple在OSX 10.9中添加的新驱动程序,但是,如果我尝试卸载该kext:

sudo kextunload -b com.apple.driver.AppleUSBFTDI

操作系统表示没有找到这样的kext。我在OSX 10.10上,所以也许Apple悔改了他们的方式并从Yosemite中移除了那个驱动程序(?)无论哪种方式,我仍然无法连接......有没有人知道什么可能阻止连接或有我如何追踪问题的想法(返回的FT_STATUS不是很有帮助......)?


更新
下面的答案解决了我的问题。如果您不确定是否安装了第二个非Apple VCP驱动程序,可以通过在终端中运行以下命令来查找其他驱动程序:

kextstat | grep FTDI

将输出如下内容:

  154    0 0xffffff7f831ee000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.18) <96 16 5 4 3 1>
  155    0 0xffffff7f831f6000 0x7000     0x7000     com.apple.driver.AppleUSBFTDI (1.0.1b12) <96 16 5 4 3>

1 个答案:

答案 0 :(得分:3)

不,那个司机仍然在优胜美地。正在运行

sudo kextunload -b com.apple.driver.AppleUSBFTDI

仍会移除相关的kext,并通过我刚刚测试过的Yosemite系统上的D2XX库释放设备。如果您尚未将FTDI设备连接到系统,则可能会丢失kext。

它也可能被另一个虚拟通信端口驱动程序阻止。如果您已安装FTDI的虚拟通信端口驱动程序,那么它也将控制端口并阻止D2XX库连接。某些Arduino开发工具包也使用虚拟通信端口驱动程序来处理他们使用的FTDI芯片,因此他们可能已经安装了自己的驱动程序。检查一下。

最后,设备名称为&#34; FT232R USB UART&#34;我在我的示例代码中使用的可能不是您设备的名称。有许多FTDI变体,您需要确保使用特定类型设备的名称。这可以通过FT_ListDevices()命令和FT_LIST_BY_INDEX|FT_OPEN_BY_DESCRIPTION选项获得。如果您使用错误的设备名称,FT_OpenEx()可能会失败。