2017-02-21 66 views
0

我试图使用FTDI的D2XX驱动程序来访问一个树莓派3. USB串行设备这是我到目前为止已经完成:为什么我不能在Raspberry Pi上使用D2XX访问我的FTDI设备?

  • 我下载的是ARMv6的1.3.6硬浮动版本的驱动程序(说明它适用于Raspberry Pi),然后按照Readme指令将其安装到/ usr/local/lib文件夹中
  • 我运行了sudo rmmod ftdi_siosudo rmmod usbserial命令,建议卸载默认的内核驱动程序
  • 在我的程序中,我所做的第一件事是调用FT_SetVIDPID函数,以便正确配置它以适应我的特殊需求[R设备
  • 在我的计划,我可以确认有1个设备通过FT_CreateDeviceInfoList功能插入

然而,在我的程序,试图调用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; 
} 

从这个小程序得到的输出是一致的。它始终是:

Devices: 1

Error: FT_Open(2)

我总是建立这个程序有:

gcc -lftd2xx -o test test.c 

是第一位没有说有一个连接的装置,这一事实给了我希望,我能得到这个工作。但基本上任何其他功能(FT_Open,FT_OpenEx,甚至FT_ListDevices)都会失败,并具有相同的#2错误。我错过了什么?

+0

自从我使用D2XX驱动程序以来,已经有一段时间了,但是您是否在'sudo'下运行了该程序?由于D2XX仅在后端使用libusb,因此它需要对内核中的USB设备进行原始访问。 – rm5248

+0

我没有用sudo运行它。我会尝试一下并报告回来! – SoaperGEM

+0

解决了!如果你想发布一个答案告诉我,我需要用sudo来运行它,我会很乐意接受这个答案。 – SoaperGEM

回答

1

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

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

相关问题