시리얼 통신을 구현하고 싶은데요...
잘 안되네요...신호가 들어오지도 나가지도 않습니다.
윈도우 시스템에 VMware를 설치해서 리눅스를 설치하였습니다.
analyzer로 시리얼 포트에서 나오는 신호를 체크하는데...신호가 전혀 나오지 않네요..
시리얼 프로그래밍 하우투나 기타 문서들에 나온 예제들을 다 해보았지만 뚜렷한 이유를 잘 모르겠습니다.
윈도우에서 하이퍼터미널을 이용해 테스트를 해보면 신호가 잘 나갑니다.
케이블에는 문제가 없는것 같습니다.
minicom 프로그램을 사용해보려고 했는데
사용법을 잘 모르겠더군요 minicom -s 해서 시리얼 포트 환경은 잡아주었는데
minicom 실행해서 Ctrl-A 하면서 부터 막힙니다.
간단히 사용법좀 알려주실수 있으면 이것도 좀 부탁드리겠습니다.
테스트 소스를 첨부합니다. 조언좀 부탁드리겠습니다.
자료를 찾아보니 다들 어느정도 막히시는것 같은데..뚜렷하게 해결된 결과는 찾기가 어렵더군요...제가 아직 검색능력이 부족하여....
아 그리고 miniterm.c 프로그램도 컴파일 해서 사용해 봤는데 ctrl-b눌러서 종료를 해도 타이핑한 문자가 화면에 안나타나더라구요...
엔터키나 명령어들을 치면 새줄에서 시작하지 않고 그냥...옆으로쭉 붙고요...왜 그런지?
아직 프로그램도 능숙치 않고 리눅스는 왕초보라 막히는것 투성이입니다.
아..그리고 사족...
윈도우에서 VMware를 실행하여 리눅스를 동작시키고 윈도우에서 플로피디시크를 읽으려고 해보았더니 안읽히더군요..ㅤ
VMware를 종료하면 읽힙니다. 씨디롬은 상관이 없던데 왜 그런지...?
혹시 시리얼 포트도 윈도우나 리눅스 둘중에 하나가 잡고 있는건 아닌지 궁금합니다.
질문이 너무 길어져서....죄송합니다. 고수님들의 답 기다리고 있겠습니다. 고수아니셔도 도움이 될 만한 정보가 있으면 부탁드리겠습니다.
테스트 소스입니다.
#include <termios.h> #include <stdio.h> #include <fcntl.h> int main(void) { int fd, n; struct termios options; int a,b,c; fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1){ printf("Can't open Modem\n"); } else{ printf("Open Modem success\n"); fcntl(fd, F_SETFL, 0); } printf("Fd is %d\n", fd); a = tcgetattr(fd, &options); printf("TcGetAttr is %d\n",a); cfsetispeed(&options, B38400); cfsetospeed(&options, B38400); options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_cflag |= CRTSCTS; options.c_lflag |= ICANON; options.c_oflag |= OPOST; b = tcsetattr(fd, TCSANOW, &options); printf("TcSetAttr is %d\n", b); n = write(fd, "aaaaaaaaaaaaaATZ\r\n", 20); printf("write number n is %d\n",n); if (n<0){ printf("Write error\n"); } else{ printf("Write success\n"); } close(fd); }
댓글 달기