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
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151207 임현수 업무일지 리눅스 시리얼통신 (4) | 2015.12.08 |
---|---|
2015-12-07 Linux Serial 통신개인업무일지 - 천정호 (5) | 2015.12.08 |
20151207 윤재희 리눅스 시리얼 통신 (5) | 2015.12.07 |
20151207 - 홍준모 Linux 와 Window 간의 시리얼 통신 1일차, 케노니칼, 논 케노니칼 실습 (4) | 2015.12.07 |
20151207 - 엄민웅 시리얼 통신 Canonical, Non-Canonical, Asynchronous, Multi Flexing (4) | 2015.12.07 |
20151207-김재홍-Serial_1일차-리눅스시리얼통신 (5) | 2015.12.07 |
20151202 22번 우대희 업무일지 (7) | 2015.12.03 |
20151202_박서연_일일업무보고서_ARM Assembly, WinSock (5) | 2015.12.03 |