C 为什么可以';我不能在Raspberry Pi上使用D2XX访问我的FTDI设备吗?

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函数,以便为我的特定设备正确配置它 在我的

我试图利用FTDI的D2XX驱动程序访问Raspberry Pi 3上的USB串行设备。以下是我迄今为止所做的工作:

  • 我下载了驱动程序的1.3.6 ARMv6硬浮动版本(声明它适合Raspberry Pi),然后按照自述说明将其安装到/usr/local/lib文件夹中
  • 我按照建议运行了
    sudormmod ftdi_sio
    sudormmod usbserial
    命令来卸载默认内核驱动程序
  • 在我的程序中,我要做的第一件事是调用
    FT\u SetVIDPID
    函数,以便为我的特定设备正确配置它
  • 在我的程序中,我可以通过
    FT\u createDeviceInfo list
    功能验证是否插入了1个设备
但是,在我的程序中,尝试调用
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