我正在通过调用向 USB 设备发送同步控制消息usb_control_msg
。完成需要 0.25 秒。这是正常的/预期的吗?USB 端口为 USB 3.0。该器件是赛普拉斯 FX3 模块。对 Windows 系统(相同端口、设备、FX3 固件)进行的类似测试在更短的时间内返回每条消息。在 Linux 中,我注意到发送的第一条消息需要 10 微秒才能完成,而接下来的 19 条左右则需要 0.25 秒才能完成。还有另一条消息会很快完成,然后是另外 19 条左右的消息会很慢。此外,我无法发送设置数据长度超过 8 个字节的控制消息。我将尝试实现异步消息,但最好知道是否可以针对同步调用改进这种行为。
ktime_t start_time = ktime_get();
int ret = usb_control_msg(device, usb_sndctrlpipe(device, 0), 0, 0x40, 0, 0, &command_data_payload, 8, 5000);
if (ret < 0)
printk(KERN_ERR "Messaged failed: %d\n", ret);
else
printk("message took: %llu\n", ktime_get() - message_start_time);
更正:我不知道我在比较中使用的 Windows 应用程序是使用同步调用还是异步调用。我一定会尝试使用异步调用来实现测试。
更新:使用异步调用,消息发送得更快,但调用完成回调仍需要 0.25 秒。对于按顺序发送的 20 条消息,其中 1 条在很短的时间内完成,其他的则每条耗时 0.25 秒。可能延迟是 FX3 USB 设备模块的功能。此外,在 Windows 上仔细检查后,消息也大多需要 0.25 秒才能完成,其中一些完成得更快。