windows - 以已知速率将数据发送到 USB 端口

标签 windows tcl

我有一个 Windows TCL 应用程序,它通过 USB 端口控制电路板上的各个芯片。我在 bitbang 模式下使用 FTDI 驱动程序。 Bitbang 模式使板上的 USB 设备像 PC 并行端口一样。

假设电路板上的芯片是一个二进制计数器。如果我想让计数器递增,我会向 USB 端口写入一系列字节,使芯片计数。

如果我希望计数器以某种速率计数,我会以某种已知速率发送这些字节。

由于数据是二进制数据,我将端口配置为二进制模式。我将几个控制字节(称为 block )写入缓冲区,然后刷新端口,以便将数据发送到 USB 端口(因此它会在我需要时进行计数)。写入后,我等待一段时间,然后再次写入 block 。

我知道这不会是完美的时机;那没关系;这次我只需要关闭。

我的问题是数据 block 之间的传输速度不会超过大约 2 毫秒。 (我不是在谈论 block 内数据的传输速率,我是在谈论 block 之间的最短时间。)另一种说法是,它似乎是刷新任何缓冲区的最短时间(实际)大小约为 2mS。

我通过使用 o 型示波器观察数据变化来测量 2mS。这也与我放入代码中的计时器一致。

有什么办法可以让这个间隔时间变短吗?不知道是我从windows获取的实际执行时间片,还是buffer传输到USB的队列处理间隔。有没有办法找出导致操作系统延迟的原因?

有没有办法控制这个间隔。如果能达到 500uS 而不是 2mS 就太好了。

只是希望有人能提出建议。

谢谢

最佳答案

几个月前,我一直在为这个完全相同的问题而苦苦挣扎。

通过检查 USB 流量发现,当处于 bitbang 模式时,FTDI 驱动程序不断轮询 FTDI 芯片以获取新的可用数据,导致总线上的放置操作和占用大量 CPU 资源之间的延迟多个 FTDI 板连接到同一台 PC。

此行为在 Windows 和 Linux 中都是一致的。在 Windows 中,您可以使用 Wireshark 进行检查和 USBPcap .

就我而言,我在 FTDI 板上有一个 FPGA。将对时间更敏感的任务卸载到 FPGA 并批量发送命令对我来说很有效。

关于windows - 以已知速率将数据发送到 USB 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19991790/

相关文章:

c++ - Private Bytes >> Working Set 是否正常?

C++:使用 Win32 API 实现命名管道

python - 从 Python 运行 TCL 代码

windows - 是否可以使用 perl 处理退出代码 > 255?

windows - 既然微软不再支持 Windows XP,哪里可以下载 Windows SDK?

shell - TCL : difference between "tclsh "$ 0"${1+"$ @"}"and argc , argv , argv0

linux - 修改基于 expect 的 SSH 脚本以在不需要密码的机器上工作

tcl - tcl中两个字母数字值的比较

c# - C# 和 Python 之间的命名管道

user-interface - 在 tcl tk 组合框中做出选择后如何运行脚本