본문 바로가기
코스웨어/15년 스마트컨트롤러

20151207 일일업무보고서_박서연_LinuxSerial통신

by 알 수 없는 사용자 2015. 12. 7.
728x90
반응형

2015-12-07


*Serial 통신


# 기본 세팅하기

1. 가상의 시리얼 포트를 2개 만든 뒤 서로 연결한다.(Virtual Serial Port Driver 프로그램 사용)


2. VMWare 세팅에서 시리얼 포트를 2개 생성해 준다.

이 때 주의할 점은 리눅스가 꺼진상태여야 한다.


이렇게 세팅을 하는 이유는 

위와 같은 구조로 통신을 하기 위해서이다. PC의 Com1과 Com2는 Virtual Serial Port Driver프로그램을 사용해서 연결해 주었고 Vmware의 Com1과 PC의 Com1은 VMware가 알아서 열결해 준다. 

위와 같이 연결을 하게되면 하이퍼 터미널과 Linux간 통신이 가능하게 된다.


# Canonical

- 터미널의 기본 처리 방식이다.

- 한줄 단위로 통신을 한다. (Enter로 구분)


프로그래밍 대략적 순서

iDev = open(SPORT, O_RDWR | O_NOCTTYT); --> 시리얼 포트 열기

tcgetattr(iDev, &stOldState);                    --> 현재 Serial Port상태를 저장한다.


stNewState.c_cflag = ......

stNewState.c_iflag = ....... 

stNewState.c_oflag = .......

stNewState.c_lflag = .......    

stNewState.c_cc[VMIN] = 1               --> 플래그 및 구조체 설정


tcflush(iDev, TCIFLUSH);                  --> 시리얼 포트 수신 큐 초기화

tcsetattr(iDev, TCSANOW, &stNewState)  --> 시리얼 포트에 새 속성 적용


read(iDev, cBuff, 255);                    --> 데이터 읽기, 조작


tcsetattr(iDev, TCSANOW, &stOldState);    --> 원래 속성으로 복귀

close(iDev);


결과


#Non-Canonical 

- 한번에 정해진 크기의 데이터만 읽어 들임

- 타이머를 사용해서 대기시간 설정도 가능하다.


기존의 Canonical 방식에서 플래그와 구조체만 살짝 바꾸어 주면 된다.

stNewState.c_lflag = 0;    //Non Canonical


stNewState.c_cc[VTIME] = 0;        //문자 입력까지 무한 대기

stNewState.c_cc[VMIN] = 5;        //최소 5문자 받을때 까지 Blocking


여기소 VMIN과 VTIME의 값에 때라서 처리방법이 변화된다.



결과


#Asynchronous




#Multi Flexing


728x90