我正在處理連接到FTDI設備的小OS X應用程序。我已經根據this question(我將.dylib文件添加爲框架,並將ftd2xx.h,WinTypes.h和ftd2xx.cfg文件添加到我的項目中)的答案配置了我的項目。無法打開到FTDI設備的連接
我目前能夠檢測是否/何時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表明該問題可能是蘋果OSX 10.9增加了一個新的驅動程序,但是,如果我試圖卸載該KEXT:
sudo kextunload -b com.apple.driver.AppleUSBFTDI
操作系統表示沒有這樣的KEXT被發現。我在OSX 10.10,所以也許蘋果懺悔他們的方式,並從優勝美地(?)刪除該驅動程序無論哪種方式,我仍然無法連接...有誰知道什麼可能會阻止連接或有關於我如何追蹤問題的想法(返回的FT_STATUS不是很有用...)?
UPDATE:
答案,下面,解決了這個問題對我來說。如果你不能確定,你是否可能安裝了第二,非蘋果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>
感謝您的回覆,布拉德。關於設備名稱,我使用的是您在示例中使用的相同檢查(另一個Open()函數也失敗了),所以我猜測其他地方一定有衝突。我記得我已經安裝了。dylib文件在/ user/local/lib /目錄下(根據FTDI ReadMe指令),所以我從那裏刪除它,但現在應用程序在啓動後崩潰,因爲它顯然希望lib位於該位置。我是否有必要將它放在那裏,還是僅僅將Xcode指向項目中的.dylib就足夠了? – Troy 2015-02-11 19:14:02
對於dylib的東西,我相信我只是有一個一般的鏈接問題,我會調查。我很好奇你如何處理生產中的「com.apple.driver.AppleUSBFTDI」問題。要求(不懂技術的)客戶在使用該應用程序時卸載kext似乎不太實際...或者,您個人是否將FTDI庫用於內部應用程序? – Troy 2015-02-11 20:42:51
@Troy - 我們創建了完全空白的kext,但它聲稱對我們使用的FTDI設備擁有所有權。我們將其作爲驅動程序進行簽名,並將其部署爲可安裝的軟件包,我們在運行的新系統上運行一次,或者在客戶升級到Mavericks/Yosemite時讓我們的客戶在其系統上運行一次。關於.dylib,請參閱我的答案中的第三和第四段:http://stackoverflow.com/a/14446874/19679。它需要捆綁在正確的位置,並修改其安裝路徑。 – 2015-02-11 21:39:22