gpt4 book ai didi

c - 为什么读取不终止我的 USB 设备?

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:54 25 4
gpt4 key购买 nike

我有一个 USB 设备连接到我的 RaspberryPi 3 B+(Raspbian Buster Lite 2019-07-10)。我还编写了一个小程序来从 USB 设备读取数据。该设备具有符合 CDC 的自定义固件,因此操作系统可以正确检测到该设备并附加 tty。

但是当我为设备调用“读取”时,系统调用永远不会终止。奇怪的是,当我使用 MiniCom、CuteCom 甚至 H-Term 访问设备时,它都能正常工作。

我已经尝试过以下问题的答案:

Reading and writing to serial port in C on Linux

How to open, read, and write from serial port in C?

C program to read data from USB device connected to the system

它们都不起作用。

我还尝试用 tcflush 和 tcdrain 刷新 tty。

int dev = open("/dev/ttyACM0", O_RWDR | O_NOCTTY);

// I tried to adapt the device parameters with termios, see above

uint8_t req[] = {0x21, 0x42, 0x00, 0x12}; // the actual request
write(dev, req, 4);

uint8_t resp[12];
read(dev, resp, 8); // does not terminate

我希望得到一个 12 字节长的结果,但只读取 block 。如果我尝试 O_NONBLOCK/O_NDELAY 选项,读取将因 EAGAIN 错误而终止。

当然,我检查了每个系统调用和库函数的结果值,它们都按预期返回/终止。正如我上面提到的,当连接到终端程序时,设备会按应有的方式工作,所以它不可能是固件。

我还用 strace 追踪了 minicom 和 cutecom 做了什么,但它们也只是打开、写入和读取,当然我用 sudo 尝试了一切,所以权限不是问题。

最佳答案

似乎该设备从未接受过请求,因此它从未处理过并被阻止。因此,请求的编写方式可能存在问题。您是否尝试设置端口/接口(interface)的速度?

关于c - 为什么读取不终止我的 USB 设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57794862/

25 4 0
文章推荐: c# - 如何对图像应用 3D 变换?
文章推荐: html - 水平滚动固定位置的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com