728x90
반응형
리눅스 시리얼 통신
- 리눅스 환경에서 시리얼 통신하기 위해서
-
- /dev/ttyS~ 라는 이름의 장치를 저수준 함수로 제어
- 실제 장치가 없으면 컴퓨터에 가상 포트를 설치하면 된다
- struct termios
-
- 시리얼 포트의 입출력을 설정하는 구조체
-
- 소켓 네트워크에서 네트워크 정보를 설정하던 방식과 비슷하게 사용됨
- POSIX가 지정한 표준 인터페이스
-
- 운영체제 표준안을 만족한다
- 구조체 항목
-
- c_iflag: 터미널 입력에 대해 설정
- c_oflag: 터미널 출력에 대해 설정
- c_cflag: 터미널 제어에 대해 설정(데이터 비트, 패리티 등)
- c_lflag
- c_cc
- 시리얼 통신 프로그래밍 기법
-
- canonical
-
- 한 줄 단위(엔터 단위)로 통신
-
- 도스창같이 엔터를 입력할 때까지 통신하지 않음
- NL(LF), EOF, EOL로 줄을 구분
- non-canonical
-
- 고정된 크기의 데이터만 읽어들임
- asynchronous
-
- non-canonical에서 추가 조건이 들어감
- multi flexing
-
- select()를 사용하는 방식
- 윈도우에 가상 시리얼 포트를 만들어 가상 머신/하이퍼터미널과 연결해 PC 내부에서 시리얼 통신할 수 있도록 설정
- 컴퓨터에 가상 serial 포트 추가(Eltima)
-
- serial 통신 중간에서 데이터를 중개하여 데이터를 알아내 통신 프로토콜을 분석할 때 활용 가능
- VMware를 껐다 켜야 가상 포트가 VMWare에 인식된다
- VMWare에 serial port 추가
-
- 전원을 완전히 off시킨 후에 VM->setting에 들어가서 아래와 같이 serial port 추가
- 시리얼 통신 방식
-
- canonical: 엔터입력 대기
- non-canonical: 시간/개수제한
- asynchronous: SW 인터럽트
- multi flexing: select() 사용
- O_NOCTTY
-
- 프로그램 제어 신호를 제어신호로 인식하도록
- Ctrl+C 제어문자를 전송 문자로 인식하여서 프로그램 종료 기능이 먹지 않는 경우를 방지
- tcgetattr(터미널 장치 번호, 데이터를 저장할 구조체)
-
- 터미널의 속성을 가져온다
- canonical uart
-
- 엔터 입력이 들어오면 데이터 수신 종료
-
- 실행 결과
- non-canonical uart
-
- 정해진 길이의 글자가 들어오면 수신 종료
-
- 실행 결과
- asynchronous
-
- sigaction(SIGIO, 핸들러, NULL)
-
- 입출력이 발생하면 실행할 핸들러 함수 설정
- fcntl
-
- open으로 연 fd의 특성을 바꾸기 위한 함수
- canonical 방식을 SW인터럽트와 함께 사용하는 방식
-
- 입출력이 발생하면 SIGIO 신호 발생
- SIGIO에 의해 핸들러 함수 Handle_Serial_Sig 호출됨
- iBreak=1이 되면서 while문 안의 read 함수 실행 -> 시리얼 통신으로 문자 읽기
-
- 실행 결과
- multi flexing
-
- select() 함수를 사용한 시리얼 통신
-
- 실행 결과
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151208 22번 우대희 일일업무일지 (2) | 2015.12.08 |
---|---|
20151208_일일업무보고서_박서연_RFID(1) (2) | 2015.12.08 |
20151208 수업 / RF 수업_ 남수진 (2) | 2015.12.08 |
20151208-김재홍-Serial_2일차-RFID_리눅스_CRC (2) | 2015.12.08 |
20151207 리눅스 시리얼 통신 이량경_ (4) | 2015.12.08 |
20151207 임현수 업무일지 리눅스 시리얼통신 (4) | 2015.12.08 |
2015-12-07 Linux Serial 통신개인업무일지 - 천정호 (5) | 2015.12.08 |
20151207 윤재희 리눅스 시리얼 통신 (5) | 2015.12.07 |