为什么我无法在 Raspberry Pi 上使用 D2XX 访问我的 FTDI 设备?
Why can't I access my FTDI device using D2XX on a Raspberry Pi?
我正在尝试使用 FTDI 的 D2XX 驱动程序访问 Raspberry Pi 3 上的 USB 串行设备。这是我目前所做的:
- 我下载了 1.3.6 ARMv6 hard-float 版本的驱动程序(说明它适用于 Raspberry Pi),然后按照 Readme 说明将其安装到 /usr/local/lib文件夹
- 我运行建议
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;
}
我从这个小程序得到的输出是一致的。它总是:
Devices: 1
Error: FT_Open(2)
我总是用以下方法构建这个程序:
gcc -lftd2xx -o test test.c
事实上,第一位确实说有一个连接的设备,这让我希望我能使它正常工作。但基本上所有其他函数(FT_Open、FT_OpenEx,甚至 FT_ListDevices)都会失败并出现相同的 #2 错误。我错过了什么?
由于 FTDI D2XX 驱动程序只是在后端使用 libusb 以便与设备进行实际对话,因此您需要具有适当的权限才能与它进行实际对话。最简单的方法是简单地运行 sudo
下的程序,这样您将拥有完全的root 权限。
或者,如果由于某种原因您无法运行 sudo
.
下的程序,应该可以 access the device 作为非 root 用户
我正在尝试使用 FTDI 的 D2XX 驱动程序访问 Raspberry Pi 3 上的 USB 串行设备。这是我目前所做的:
- 我下载了 1.3.6 ARMv6 hard-float 版本的驱动程序(说明它适用于 Raspberry Pi),然后按照 Readme 说明将其安装到 /usr/local/lib文件夹
- 我运行建议
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;
}
我从这个小程序得到的输出是一致的。它总是:
Devices: 1
Error: FT_Open(2)
我总是用以下方法构建这个程序:
gcc -lftd2xx -o test test.c
事实上,第一位确实说有一个连接的设备,这让我希望我能使它正常工作。但基本上所有其他函数(FT_Open、FT_OpenEx,甚至 FT_ListDevices)都会失败并出现相同的 #2 错误。我错过了什么?
由于 FTDI D2XX 驱动程序只是在后端使用 libusb 以便与设备进行实际对话,因此您需要具有适当的权限才能与它进行实际对话。最简单的方法是简单地运行 sudo
下的程序,这样您将拥有完全的root 权限。
或者,如果由于某种原因您无法运行 sudo
.