我正在尝试使用FTDI的D2XX驱动程序访问Raspberry Pi 3上的USB串行设备。这是我到目前为止所做的:
sudo rmmod ftdi_sio
和sudo rmmod usbserial
命令来卸载默认内核驱动程序FT_SetVIDPID
函数,以便为我的特定设备正确配置FT_CreateDeviceInfoList
函数验证是否有1个设备已插入但是,在我的程序中,尝试呼叫FT_Open
始终与FT_DEVICE_NOT_FOUND
(2)失败。我会在这里复制程序以供参考:
#include <stdio.h>
#include "ftd2xx.h"
int main(int argc, char[] argv)
{
FT_HANDLE ftHandle;
FT_STATUS ftStatus;
int iNumDevs = 0;
ftStatus = FT_SetVIDPID(0x0403, 0x6015);
if (FT_OK != ftStatus)
{
printf("Error: FT_SetPIDVID(%d)\n", (int)ftStatus);
return 1;
}
ftStatus = FT_CreateDeviceInfoList(&iNumDevs);
if (FT_OK != ftStatus)
{
printf("Error: FT_CreateDeviceInfoList(%d)\n", (int)ftStatus);
return 1;
}
printf("Devices: %d\n", iNumDevs);
ftStatus = FT_Open(0, &ftHandle);
if (FT_OK != ftStatus)
{
printf("Error: FT_Open(%d)\n", (int)ftStatus);
return 1;
}
// ...
return 0;
}
我从这个小程序得到的输出是一致的。它始终是:
设备:1
错误:FT_Open(2)
我总是用以下方式构建这个程序:
gcc -lftd2xx -o test test.c
事实上,第一位确实说有一个连接的设备让我希望我可以让这个工作。但基本上任何其他功能(FT_Open,FT_OpenEx,甚至FT_ListDevices)都会失败并出现相同的#2错误。我错过了什么?
答案 0 :(得分:2)
由于FTDI D2XX驱动程序只是在后端使用libusb以实际与设备通信,因此您需要具有适当的权限才能与其进行实际通信。最简单的方法是在sudo
下运行程序,以便拥有完全的root权限。
或者,如果由于某种原因您无法在sudo
下运行该程序,则应该可以access the device作为非root用户。