2012-09-17 74 views
0

我有Windows主機上的應用程序,通過RS232完全握手(RTS,CTS,DTR)連接到板設備。我想現在用USB替換RS232。我使用嵌入式Linux和USB設備(g_serial)模塊。我獲得了終端兩側的所有數據,但應用程序無法處理它(缺少握手信號)。 如何處理它? (主機或設備端) 也許有一些關於PC主機端握手的握手「模擬器」?g_serial與握手小工具

BR 巴特洛梅耶Grzeskowiak

回答

2

我查看了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成員。

所以我認爲驅動程序需要改進才能添加此支持。

0

如果底層驅動程序實現CDC ACM類則控制線狀態使用SET_CONTROL_LINE_STATE(爲0x22)請求設置。當控制線狀態設置時,Windows肯定會發出此請求,並且還會響應來自設備的請求。

但是這些信號對USB傳輸沒有影響,因爲底層USB協議有它自己的流量控制機制。您的應用程序需要處理信號。例如,在Windows中,您必須爲端口明確啓用硬件流控制。