C 为什么可以';我不能在Raspberry Pi上使用D2XX访问我的FTDI设备吗?
我试图利用FTDI的D2XX驱动程序访问Raspberry Pi 3上的USB串行设备。以下是我迄今为止所做的工作:C 为什么可以';我不能在Raspberry Pi上使用D2XX访问我的FTDI设备吗?,c,serial-port,raspberry-pi,ftdi,d2xx,C,Serial Port,Raspberry Pi,Ftdi,D2xx,我试图利用FTDI的D2XX驱动程序访问Raspberry Pi 3上的USB串行设备。以下是我迄今为止所做的工作: 我下载了驱动程序的1.3.6 ARMv6硬浮动版本(声明它适合Raspberry Pi),然后按照自述说明将其安装到/usr/local/lib文件夹中 我按照建议运行了sudormmod ftdi_sio和sudormmod usbserial命令来卸载默认内核驱动程序 在我的程序中,我要做的第一件事是调用FT\u SetVIDPID函数,以便为我的特定设备正确配置它 在我的
- 我下载了驱动程序的1.3.6 ARMv6硬浮动版本(声明它适合Raspberry Pi),然后按照自述说明将其安装到/usr/local/lib文件夹中
- 我按照建议运行了
和sudormmod ftdi_sio
命令来卸载默认内核驱动程序sudormmod usbserial
- 在我的程序中,我要做的第一件事是调用
函数,以便为我的特定设备正确配置它FT\u SetVIDPID
- 在我的程序中,我可以通过
功能验证是否插入了1个设备FT\u createDeviceInfo list
FT\u Open
始终失败,并且未找到FT\u设备(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;
}
事实上,第一位确实表示有一个连接的设备,这给了我希望,我可以让这个工作。但基本上任何其他功能(FT#U Open、FT#U OpenEx,甚至FT#U ListDevices)都会以同样的2错误失败。我遗漏了什么?由于FTDI D2XX驱动程序只是在后端使用libusb来与设备进行实际通信,因此您需要拥有适当的权限才能与设备进行实际通信。最简单的方法是在sudo
下运行程序,这样您就可以拥有完整的root权限
或者,如果由于某种原因,您无法在sudo
下运行程序,那么应该可以作为非root用户使用D2XX驱动程序,但您是否在sudo
下运行程序?由于D2XX只在后端使用libusb,它需要对内核中的USB设备进行原始访问。我没有使用sudo运行它。我会试试看,然后回来汇报!这就解决了!如果你想发布一个答案,告诉我我需要用sudo运行它,我会很乐意接受这个答案。在尝试打开一个设备时遇到了完全相同的问题。我不知道我需要成为sudo
。
gcc -lftd2xx -o test test.c