我有Windows主機上的應用程序,通過RS232完全握手(RTS,CTS,DTR)連接到板設備。我想現在用USB替換RS232。我使用嵌入式Linux和USB設備(g_serial)模塊。我獲得了終端兩側的所有數據,但應用程序無法處理它(缺少握手信號)。 如何處理它? (主機或設備端) 也許有一些關於PC主機端握手的握手「模擬器」?g_serial與握手小工具
BR 巴特洛梅耶Grzeskowiak
我有Windows主機上的應用程序,通過RS232完全握手(RTS,CTS,DTR)連接到板設備。我想現在用USB替換RS232。我使用嵌入式Linux和USB設備(g_serial)模塊。我獲得了終端兩側的所有數據,但應用程序無法處理它(缺少握手信號)。 如何處理它? (主機或設備端) 也許有一些關於PC主機端握手的握手「模擬器」?g_serial與握手小工具
BR 巴特洛梅耶Grzeskowiak
我查看了Linux內核中g_serial
驅動程序的內核(最初是3.8,後來是4.11)的源代碼,看它是否實現了API來控制Linux端API(/dev/ttyGS0
)上的硬件握手線。例如:
#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
成員。
所以我認爲驅動程序需要改進才能添加此支持。
如果底層驅動程序實現CDC ACM類則控制線狀態使用SET_CONTROL_LINE_STATE(爲0x22)請求設置。當控制線狀態設置時,Windows肯定會發出此請求,並且還會響應來自設備的請求。
但是這些信號對USB傳輸沒有影響,因爲底層USB協議有它自己的流量控制機制。您的應用程序需要處理信號。例如,在Windows中,您必須爲端口明確啓用硬件流控制。