为什么我不能在Raspberry Pi上使用D2XX访问我的FTDI设备?

时间:2017-02-21 19:14:04

标签: c serial-port raspberry-pi ftdi d2xx

我正在尝试使用FTDI的D2XX驱动程序访问Raspberry Pi 3上的USB串行设备。这是我到目前为止所做的:

  • 我下载了驱动程序的1.3.6 ARMv6硬浮版本(表明它适用于Raspberry Pi),然后按照自述文件说明将其安装到/ usr / local / lib文件夹中
  • 我按照建议运行sudo rmmod ftdi_siosudo 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错误。我错过了什么?

1 个答案:

答案 0 :(得分:2)

由于FTDI D2XX驱动程序只是在后端使用libusb以实际与设备通信,因此您需要具有适当的权限才能与其进行实际通信。最简单的方法是在sudo下运行程序,以便拥有完全的root权限。

或者,如果由于某种原因您无法在sudo下运行该程序,则应该可以access the device作为非root用户。