2012-09-17 1 views
0

전 핸드 셰이크 (RTS, CTS, DTR)로 RS232를 통해 보드 장치에 연결하는 Windows 호스트에 응용 프로그램이 있습니다. 지금 USB로 RS232를 대체하고 싶습니다. 임베디드 리눅스 및 USB 장치 (g_serial) 모듈이있는 보드를 사용합니다. 터미널 양쪽에있는 모든 데이터를 가져 오지만 애플리케이션에서 처리 할 수 ​​없습니다 (핸드 쉐이크 신호 없음). 어떻게 처리 할 수 ​​있습니까? (호스트 또는 장치 측) PC 호스트 측에서 핸드 셰이크를 신경 쓰는 핸드 셰이크 "에뮬레이터"가있을 수 있습니까?g_serial gadget with handshake

BR Bartlomiej Grzeskowiak

답변

2

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을 정의하지 않습니다.

그래서이 지원을 추가하려면 드라이버를 개선해야한다고 생각합니다.

0

기본 드라이버 다음 제어 라인 상태가 SET_CONTROL_LINE_STATE (0x22) 요청을 사용하여 설정된다 CDC ACM 클래스를 구현하는 경우. Windows는 제어 라인 상태가 설정되면이 요청을 확실히 내고 장치로부터의 요청에도 응답합니다.

그러나 이러한 신호는 기본 USB 프로토콜에 자체 흐름 제어 메커니즘이 있으므로 USB 전송에 영향을 미치지 않습니다. 양쪽 끝의 응용 프로그램은 신호를 처리해야합니다. Windows의 경우 예를 들어 포트에 대해 하드웨어 흐름 제어를 명시 적으로 활성화해야합니다.