我正在开发一个连接到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>
答案 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()
可能会失败。