问题标签 [d2xx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
338 浏览

android - 使用 Android D2XX 驱动的 FT230X 无响应

我制作了一个简单的 Android 应用程序,它使用D2XX 驱动程序连接到 FTDI 芯片并编写命令并监听响应。

使用这个应用程序,我可以成功地将一些虚拟数据写入FT232B芯片并接收响应。

使用同一个应用程序,我没有得到FT230X芯片(具有不同固件)的任何响应。我已验证所有配置均已成功设置并且与芯片的连接已打开。我还可以确认写入芯片似乎有效(至少write()操作返回true)。

此时我不知道是固件坏了还是我的应用程序坏了。

任何想法可能是错误的或我的下一步应该是什么?

编辑:

  • 我在 Android 6.0.1 上使用了三星 S7 Edge(带 OTG 适配器)
  • 我已经尝试了较旧的 D2XX 版本(2013)和较新的(2015-10-21),结果相同。
0 投票
1 回答
1618 浏览

c# - 在 Linux / Mono 上运行的 FTDI D2XX C# .NET Wrapper - 触发的 SetEventNotification 似乎使程序崩溃

我正在将一个现有的、功能性的 C# 应用程序移植 到 Linux 和 Mono 上,该应用程序在 Windows 上使用FTDI D2XX C# .NET 包装器。我已按照有关安装Linux D2XX 驱动程序的说明进行操作。当检测到我们在 Linux 上运行时,我们会在 C# .NET 包装器中查找并加载 Linux 驱动程序,而不是 Windows 驱动程序。

完成这项工作后,我们的大部分应用程序代码仍然正常,但似乎当使用 SetEventNotification 函数设置的事件在 FT_EVENT_RXCHAR 事件上触发时,应用程序崩溃了。

C# 应用程序的流程是:

  1. 设置与 FTDI 设备的通信
  2. 当 FTDI 设备有新数据可用时通知 SetEventNotification
  3. Ping FTDI 设备,让它知道我们准备好了,我们想要一些数据
  4. 当收到新数据通知时(通过使用 SetEventNotification),用它做一些事情

更详细一点:

  • 使用 C# 包装器读取和写入似乎在 Linux / Mono 上运行良好
    • 先用Write ping 设备,然后后面的Reads 都成功
  • 使用 D2XX 程序员指南中提供的示例代码,在 Linux 上编写的 C 代码在使用 SetEventNotification 时不会崩溃
  • (明显的)替代方案,在所需的字节数上使用 C# 包装器的读取似乎在 Linux / Mono 上正常工作

几个问题:

  1. 有没有人在 Linux / Mono 上为 D2XX 驱动程序使用 C# .NET Wrapper 并遇到过这个问题?
  2. C# Wrapper 的 SetEventNotification 需要一个 EventWaitHandle,然后使用 SafeWaitHandle 检索本机操作系统句柄。问题可能在这里吗?

非常感谢您提供的任何见解。

编辑:

堆栈跟踪现在附在下面。

我试图转向轮询方法,但当我们执行 FTDI 读取时,似乎有可能存在未完全写入的数据“帧”,并且我们将在数据中出现间隙。

我已联系 FTDI 寻求有关此问题的一些指导。如果我收到可操作的回复,将会更新。

编辑第二条:

Mono 的 SafeWaitHandle 的表示和 SetEventNotification 的预期参数完全不同。因为 FTDI D2XX 库试图将 SafeWaitHandle 视为 EVENT_HANDLE(在 ftd2xx.h 头文件中定义;基本上是 pthread_cond_t 和 pthread_mutex_t),我认为这就是我们遇到崩溃的原因。

我想我可以通过在 FTDI D2XX C# .NET 包装器中使用带有 libpthread 的 P/Invoke 来继续执行 pthread 条件和互斥锁以及 Mono SafeWaitHandle 之间的必要转换。在这一点上,我需要工作的 C 代码,它将在 pthread_cond_wait 上循环并阻塞 FTDI D2XX。我还没有让那个代码工作。如果有人有建议,请在下面列出:

它总是卡在 pthread_cond_wait 上。任何想法将不胜感激。

0 投票
1 回答
135 浏览

android - QT+Android+Lib = VFP 错误

我目前正在开发一个使用 FTDIs D2xx 库的 Qt 应用程序。我的状态是我可以在Windows、Linux和嵌入式Linux(Odroid,带有自编译交叉编译Qt)下编译和运行程序。

但我正在努力使用 Android(Qt 的库存库)。我正在使用与 Odroid-Build 相同的 ARMv7 库,但我认为现在 FPU 遇到了一些问题。所以错误是:

libftd2xx.so 使用 VFP 寄存器参数,输出不

FTDI 说他们的 lib 使用带有 VFP 寄存器 (VFPv3-D16) 的 HardFP(SP 和 DP)。当我像这样更改我的 android 设备的 qmake.conf 时:

链接器为我的项目的每个 .o 溢出错误。

所以我的问题是:我如何告诉 Qt 整个项目应该使用硬 FP?还是我错过了什么?

在此先感谢,奥利弗

0 投票
1 回答
3945 浏览

c - Why can't I access my FTDI device using D2XX on a Raspberry Pi?

I'm trying to make use of FTDI's D2XX drivers to access a USB-Serial device on a Raspberry Pi 3. Here's what I've done so far:

  • I downloaded the 1.3.6 ARMv6 hard-float version of the driver (which states that it is suitable for a Raspberry Pi), and then followed the Readme instructions to install it into the /usr/local/lib folder
  • I ran the sudo rmmod ftdi_sio and sudo rmmod usbserial commands as advised to unload the default kernel driver
  • In my program, the first thing I do is invoke the FT_SetVIDPID function so that it is properly configured for my particular device
  • In my program, I can verify that there is 1 device plugged in via the FT_CreateDeviceInfoList function

However, in my program, trying to call FT_Open consistently fails with FT_DEVICE_NOT_FOUND (2). I'll copy the program here for reference:

The output I get from this little program is consistent. It is always:

Devices: 1

Error: FT_Open(2)

I always build this program with:

The fact that the first bit does say there is one connected device gives me hope that I can get this working. But basically any other function at all (FT_Open, FT_OpenEx, and even FT_ListDevices) fails with the same #2 error. What am I missing?

0 投票
1 回答
5817 浏览

ftdi - VCP 和 D2XX 之间的 FTDI 差异

我有一个 FTDI FT232R 设备,目前正在尝试确定是使用 VCP 还是 D2XX。我已经阅读了一些关于两者的优缺点,但我仍然无法确定该项目使用哪一个。既然我打算在这个项目中使用 Linux,那么使用 D2XX 是否值得付出额外的努力?任何帮助或信息将不胜感激。

问候, 斯帕卡斯

0 投票
1 回答
318 浏览

c - 为什么我的 D2XX 应用程序在分叉时无法工作?

我正在用 C 语言编写一个简单的应用程序,在 Raspberry Pi 上运行,它利用D2XX 驱动程序与串行端口设备进行通信。我遵循了许多在线教程和参考指南来使其正常工作,并采取了一些步骤,例如设置自定义 udev 规则以确保驱动程序可以正确加载,我遵循 FTDI 的构建说明来安装共享库,我使用-lgcc 的参数在编译时链接到库中,我运行我的 C 程序sudo以确保驱动程序具有正确的访问权限。这已经成功了!该程序按预期工作。

现在我正在尝试将我的简单程序转换为可以使用 init.d 脚本(a la service start)控制的守护进程,但遇到了麻烦。

为简单起见,这是我的 C 程序的淡化版本,它确实有效

myprog.c:

我用 编译它,gcc -lftd2xx -o myprog myprog.c然后用 运行它sudo ./myprog,并相信它会完成它应该做的所有事情。但是现在我正在尝试将相同的代码重新编写为守护程序,我一直在关注其他一些在线教程,并且上面的代码已经转换成看起来更像这样的东西。目前,这不起作用:

mydaemon.c:

我以完全相同的方式编译该程序gcc -lftd2xx -o mydaemon mydaemon.c:我以同样的方式运行它:sudo ./mydaemon,但不幸的是它不起作用。在一个单独的控制台窗口中,我正在跟踪/var/log/messages文件,我可以清楚地看到它到达了我的第一条日志消息(即“我可以到达这条线”),但在那之后它就死在了水中。我从来没有看到第二条日志消息,实际上,此时程序完全没有响应。我必须找到它的进程 ID 并杀死它。

换句话说,一旦它尝试调用分叉进程中的 D2XX 驱动程序,它就会失败。我究竟做错了什么?我已经用第一个示例演示了代码确实可以工作,那么作为守护进程运行会导致它完全崩溃是什么意思?据我所知,它甚至没有机会执行有问题的 D2XX 方法;就好像它在分叉进程中运行时根本找不到方法一样。

0 投票
0 回答
212 浏览

linux - 是否可以在 Linux 上通过 USB 转 RS485 串行转换器电缆连接到 i2c 设备?

我目前有一个传感器连接到 USB 到 RS485 串行转换器电缆,该电缆插入树莓派。我尝试使用 ftdi d2xx 驱动程序连接到它,但到目前为止我无法读取任何数据,虽然写入没有失败,但我不确定它们是否正常工作。

此设置使用制造商提供的自定义软件在 Windows 上工作,但我找不到任何让它在 linux 系统上工作的东西。这可能吗?

0 投票
0 回答
336 浏览

android - FTDI D2XX 库使用 openByUSBDevice() 调用打开多接口设备

在我的一个设计中,我使用的是FT4232 Quad RS232 IC。由于该设计有多个 FTDI 设备,因此我使用 Android USB Manager API 按供应商 ID 和产品 ID 进行过滤。经过这样的过滤器,我得到的本质上是一个UsbDevice。但是在这种情况下,我们有多个接口,createDeviceInfoList() 调用将枚举到不同的设备中。如何使用 D2XX 库在 UsbDevice 上打开特定接口?

0 投票
1 回答
713 浏览

linux - FTDI D2XX FT_DEVICE_LIST_INFO_NODE 结构全为零

我正在尝试让 Matlab MEX 在 Linux 中运行。它使用 FTDI 的 D2XX 库 v1.3.6(文档)。

FT_CreateDeviceInfoList(&ftdi_count)给我一个ftdi_count1,所以检测到 FTDI 芯片。

但是,当从 遍历设备列表时FT_GetDeviceInfoList(device_list, &ftdi_count),我的FT_DEVICE_LIST_INFO_NODE结构全为零,因此显然代码无法找到具有它正在寻找的描述的设备:

我的第一个猜测是 udev 没有设置。但问题仍然存在

lsusb -v可以访问以下值:

我该怎么做才能使 FTDI 功能正常工作?

0 投票
0 回答
683 浏览

c++ - 在 Linux 上使用 FTDI D2xx 和 Thorlabs APT 通信协议会导致延迟

我正在尝试通过在 Linux 上使用 FTDI D2xx 驱动程序与 Thorlabs TDC001 控制器(apt - dc 伺服控制器)进行通信。但是,当我发送写入命令时,会出现很大的延迟(1-2 秒),直到命令在 TDC001 上实际执行。特别是,当连接的线性平台正在移动并发送新的位置命令时,可以观察到这一点。舞台真正改变方向需要 1-2 秒。此外,如果我请求 DCSTATUSUPDATE(它给出位置和速度)然后读出 FTDI 的队列,我没有得到正确的数据。只有当我在请求和读取之间等待 1 秒时,我才会得到(正确的)数据,但只是过去的数据。我为此案例添加了 C++ 代码。我需要实时数据和更快地执行闭环控制的编写命令。

我不确定问题出在 Thorlabs 还是 FTDI 一方。一切正常,除了大的延迟。还有其他命令,例如 MOVE_STOP,它们会立即响应。此外,如果我在完成归位后立即发送新的位置命令,它会立即执行。每当我请求 FT_GetStatus 时,Tx 或 Rx 队列中除了 DCSTATUSUPDATE 的 20 个字节外,没有其他内容。

D2XX 和 APT 通信协议的参考资料可以在这里找到:

FTDI 程序员指南

Thorlabs APT通信协议

初始化函数:

我如何读出我的数据:

如果我在归位后和移动到绝对位置期间使用 read_tdc 功能,我只会在第一次尝试时收到“归位完成”消息。当我再次尝试 read_tdc 时,我得到一个旧值(可能是之前的那个)。我不明白这里发生了什么。为什么这个旧数据甚至保留在队列中(延迟为 10 毫秒)。任何人都可以帮助我获得更快的响应和反应吗?