2015-02-11 33 views
0

我正在處理連接到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> 

回答

3

不,那位司機還在那裏優勝美地。運行

sudo kextunload -b com.apple.driver.AppleUSBFTDI 

還刪除相關的kext並釋放裝置通過D2XX庫訪問此約塞米蒂系統我只是測試上。如果您還沒有將FTDI設備連接到系統,kext可能會丟失。

它也可能被另一個虛擬通訊端口驅動程序阻止。如果您已經安裝了FTDI的虛擬通訊端口驅動程序,那麼也將控制端口並阻止D2XX庫的連接。某些Arduino開發套件也使用他們使用的FTDI芯片的虛擬通信端口驅動程序,因此他們可能已經安裝了自己的驅動程序。檢查一下。

最後,我在示例代碼中使用的「FT232R USB UART」的設備名稱可能不是您設備的名稱。有許多FTDI變體,你需要確保你使用的是你的特定類型的設備的名稱。這可以從FT_ListDevices()命令和FT_LIST_BY_INDEX|FT_OPEN_BY_DESCRIPTION選項中獲得。如果您使用錯誤的設備名稱,FT_OpenEx()可能會失敗。

+0

感謝您的回覆,布拉德。關於設備名稱,我使用的是您在示例中使用的相同檢查(另一個Open()函數也失敗了),所以我猜測其他地方一定有衝突。我記得我已經安裝了。dylib文件在/ user/local/lib /目錄下(根據FTDI ReadMe指令),所以我從那裏刪除它,但現在應用程序在啓動後崩潰,因爲它顯然希望lib位於該位置。我是否有必要將它放在那裏,還是僅僅將Xcode指向項目中的.dylib就足夠了? – Troy 2015-02-11 19:14:02

+0

對於dylib的東西,我相信我只是有一個一般的鏈接問題,我會調查。我很好奇你如何處理生產中的「com.apple.driver.AppleUSBFTDI」問題。要求(不懂技術的)客戶在使用該應用程序時卸載kext似乎不太實際...或者,您個人是否將FTDI庫用於內部應用程序? – Troy 2015-02-11 20:42:51

+0

@Troy - 我們創建了完全空白的kext,但它聲稱對我們使用的FTDI設備擁有所有權。我們將其作爲驅動程序進行簽名,並將其部署爲可安裝的軟件包,我們在運行的新系統上運行一次,或者在客戶升級到Mavericks/Yosemite時讓我們的客戶在其系統上運行一次。關於.dylib,請參閱我的答案中的第三和第四段:http://stackoverflow.com/a/14446874/19679。它需要捆綁在正確的位置,並修改其安裝路徑。 – 2015-02-11 21:39:22