我在Windows-host上有应用程序,它通过完全握手(RTS,CTS,DTR)的RS232连接到板卡设备。我现在想把RS232换成USB。我使用带有嵌入式linux和USB device (g_serial)模块的板卡。我得到了终端两端的所有数据,但应用程序无法处理它(缺少握手信号)。怎么可能处理它呢?(主机或设备端)也许有一些关心PC主机端握手的握手“模拟器”?
BR Bartlomiej Grzeskowiak
发布于 2013-03-20 12:37:37
我查看了Linux内核中的g_serial驱动程序的内核(最初是3.8,后来是4.11)源代码,看看它是否实现了控制Linux端API (/dev/ttyGS0)上的硬件握手线路的API。例如:
#include <unistd.h>
#include <termios.h>
int fd;
int status;
...
ioctl(fd, TIOCMGET, &status);
status |= TIOCM_DTR;
ioctl(fd, TIOCMSET, &status);看起来驱动程序似乎不支持它。在drivers/usb/gadget/function/u_serial.c中,请参阅struct tty_operations gs_tty_ops,它没有定义.tiocmset或.tiocmget成员,而这些成员通常是支持上述代码所需的。
因此,我认为驱动程序需要改进才能添加这种支持。
发布于 2012-09-17 22:39:52
如果底层驱动程序实现CDC ACM类,则使用SET_CONTROL_LINE_STATE (0x22)请求设置控制线状态。当设置了控制线状态时,Windows肯定会发出此请求,并且也会响应来自设备的请求。
然而,这些信号对USB传输没有影响,因为底层USB协议具有其自己的流控制机制。两端的应用程序都需要处理信号。例如,在Windows中,您必须显式地为端口启用硬件流控制。
https://stackoverflow.com/questions/12456829
复制相似问题