当DTR和RTS为零时,停止从USB CDC设备接收数据

时间:2019-07-27 17:22:29

标签: linux usb usbserial

我有一个通过Raspbian连接到我的RaspberryPi的USB CDC设备。此USB设备的固件是由我公司开发的,并提供多种通信模式。 “普通”模式是ascii shell,您可以将其与由内核附加到设备的普通tty一起使用。

要激活我需要的模式(二进制通信模式),必须将DTR和RTS标志设置为零。不幸的是,当我这样做(将两个标志都设置为零)时,系统调用“ read”停止接收数据(不返回)。

当我在Windows PC上使用H-Term对其进行测试时,它可以按预期运行,甚至可以通过我的逻辑分析仪看到该设备正在发送数据,但是Linux并未将其发送给我。

我已经尝试将文件描述符设置为O_NONBLOCK,但是它不起作用。 如果我仅将其中一个标志设置为零,则read仍会收到一些内容。

int fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY);
int flags = TIOCM_DTR | TIOCM_RTS;
ioctl(fd, TIOCMBIC, &flags); // I also tried to set the flags separately

uint8_t req = {'t', 'e', 's', 't'};
write(fd, req, 4);

uint8_t resp[100];
ssize_t resp_len = read(fd, resp, 100); // does not return

我希望读取返回并得到一些数据。

我还编写了一个小的python脚本来测试连接,结果相同。

0 个答案:

没有答案
相关问题