我試圖與一個連接到EasySync USB2-H-5004-M USB到RS485轉換器的usb設備通信,波特率爲3750000,但是在OSX上。如何在OSX上使用FTDI D2XX庫?
我已經有一些C++代碼在Windows上工作,並設法讓它在OSX上編譯(使用D2XX dylib而不是dll),但是我有一個通信問題,我不確定在哪裏開始以及如何解決這個問題。
我使用了openFrameworks/C++,並列出設備的方法是這樣的:
int FTDI::enumerateDevices(){
DWORD numDevs;
FT_STATUS ftStatus = FT_CreateDeviceInfoList(&numDevs);
numPortsFound = 0;
if (ftStatus == FT_OK) {
ofLog(OF_LOG_NOTICE, "Number of FTDI devices is %d",numDevs);
devicesList = (FT_DEVICE_LIST_INFO_NODE*)malloc(sizeof(FT_DEVICE_LIST_INFO_NODE)*numDevs);
ftStatus = FT_GetDeviceInfoList(devicesList, &numDevs);
if (ftStatus == FT_OK) {
printf("\n");
for (int i = 0; i < numDevs; i++) {
ofLog(OF_LOG_VERBOSE, "Dev %d:",i);
ofLog(OF_LOG_VERBOSE, " Flags=0x%x",devicesList[i].Flags);
ofLog(OF_LOG_VERBOSE, " Type=0x%x",devicesList[i].Type);
ofLog(OF_LOG_VERBOSE, " ID=0x%x",devicesList[i].ID);
ofLog(OF_LOG_VERBOSE, " LocId=0x%x",devicesList[i].LocId);
ofLog(OF_LOG_VERBOSE, " SerialNumber=%s",devicesList[i].SerialNumber);
ofLog(OF_LOG_VERBOSE, " Description=%s",devicesList[i].Description);
ofLog(OF_LOG_VERBOSE, " ftHandle=0x%x\n",devicesList[i].ftHandle);
}
numPortsFound = numDevs;
} else {
ofLog(OF_LOG_ERROR, "FTD2XX::FT_GetDeviceInfoList() failed");
}
} else {
ofLog(OF_LOG_ERROR, "FTD2XX::FT_CreateDeviceInfoList() failed");
}
return numPortsFound;
}
的問題是在OSX我得到這樣的輸出:
[notice ] Number of FTDI devices is 4
[verbose] Dev 0:
[verbose] Flags=0x1
[verbose] Type=0x3
[verbose] ID=0x0
[verbose] LocId=0x0
[verbose] SerialNumber=
[verbose] Description=
[verbose] ftHandle=0x0
[verbose] Dev 1:
[verbose] Flags=0x1
[verbose] Type=0x3
[verbose] ID=0x0
[verbose] LocId=0x0
[verbose] SerialNumber=
[verbose] Description=
[verbose] ftHandle=0x0
[verbose] Dev 2:
[verbose] Flags=0x1
[verbose] Type=0x3
[verbose] ID=0x0
[verbose] LocId=0x0
[verbose] SerialNumber=
[verbose] Description=
[verbose] ftHandle=0x0
[verbose] Dev 3:
[verbose] Flags=0x1
[verbose] Type=0x3
[verbose] ID=0x0
[verbose] LocId=0x0
[verbose] SerialNumber=
[verbose] Description=
[verbose] ftHandle=0x0
[ error ] failed to register FTDI device with serial FTWVZVEBA in internal register
[ error ] error opening port with serial: FTWVZVEBA
不看對。例如在Windows上,在端口A /通道1 /設備索引0我看到這一點:
[verbose] Dev 0:
[verbose] Flags=0x2
[verbose] Type=0x7
[verbose] ID=0x4036011
[verbose] LocId=0x02111
[verbose] SerialNumber=FTWVZVEBA
[verbose] Description=USB2-H-5004-M A
[verbose] ftHandle=0x0
有/ dev中的東西快速瀏覽一下看行:
ls /dev/tty.*
/dev/tty.Bluetooth-Incoming-Port /dev/tty.usbserial-FTWVZVEBB
/dev/tty.Bluetooth-Modem /dev/tty.usbserial-FTWVZVEBC
/dev/tty.usbmodemfa131 /dev/tty.usbserial-FTWVZVEBD
,並通過系統信息,我得到:
USB2-H-5004-M:
Product ID: 0x6011
Vendor ID: 0x0403 (Future Technology Devices International Limited)
Version: 8.00
Serial Number: FTWVZVEB
Speed: Up to 480 Mb/sec
Manufacturer: FTDI
Location ID: 0xfd120000/4
Current Available (mA): 500
Current Required (mA): 200
我已經安裝了驅動程序D2XX的FTDI OSX Installation Guide(PDF鏈接)上的說明,但我不知道我缺少/做錯了什麼。
如何正確地與使用FTDI D2XX庫的設備進行通信?
不確定FTDI庫。你可以做一些微不足道的事情,比如使用cu(1)打開端口併發送/接收數據? – janm
你能給我介紹一下嗎?這是我在使用cu時的第一個鏡頭:'cu -l /dev/tty.usbserial-FTWVZVEBA --baud 3750000 cu:鎖定時創建(/ var/spool/uucp/TMP0000000cee在/ Users/weblab作爲uid 501):Permission被拒絕 cu:/dev/tty.usbserial-FTWVZVEBA:使用中的線路# –
首先,使用「sudo」。像'sudo cu -l/dev/whatever ...'。您需要輸入密碼。這裏的權限問題可能只是uucp鎖定而不是端口本身;你可以通過執行'ls -l/dev/tty.usbserial-whatever'來檢查端口權限。 – janm