Busan IT/RFID2015. 12. 7. 17:04

==================================Outline====================================

리눅스 시리얼 통신

- 가상 시리얼 포트 설치

- 시리얼 데이터 통신의 기법

    - canonical

    - non-canonical

    - asynchronous

    - multi-flexing

----------------------------------------------------------------------------

 

리눅스 시리얼 통신

 

가상 시리얼 포트 설치

 

모든 장치는 리눅스에서는 파일로 간주한다.

 

 

'/dev' 디렉토리에 serial port 또한 파일로 존재한다.

 

 

가상 머신를 실행하여 시리얼 포트를 설치해보자. 가상 머신이 구동 중에는 시리얼 포트 설치가 불가함으로 ‘halt' 명령어를 사용하여 구동을 중지 후 전원을 끈다.

 

그 후에 시리얼포트를 설치한다.

 

 

 





 

2개를 설치한다.

 

 

 

가상 머신을 사용하여 가상 머신과 본체가 통신을 할 수 있도록 소프트웨어적으로 시리얼 포트를 설치한다.

 

 

요놈을 설치해준다. 설치 후 실행시킨다.

 

 

가상 시리얼 포트를 만들어준다.

 

 

하이퍼 터미널을 두 개 실행시켜서 통신을 해보자.

 

 

 

가상의 시리얼 포트는 재부팅을 하더라도 지속적으로 존재한다.

 

VMware를 종료하고 다시 시작하면 추가한 포트가 보이게 된다.

 

 

추가한 두 개의 포트에 가상 시리얼 포트를 하나씩 연결해준다.

 

가상 머신을 구동시킨다.

 

시리얼 포트 중에 2번째 것을 disconnect시킨다.

 

연결이 해제되면 해당 장치가 회색으로 변하는 것을 알 수 있다.

 



시리얼 데이터 통신의 기법

 

'struct termios'는 터미널의 input/output을 설정하는 구조체이다.

 



 

 

Canonical: 한 줄씩(엔터 전) 데이터를 통신한다. Dos의 기법과 같다.

Non-Canonical : 정해진 데이터 크기에 도달했을 때 데이터를 읽어들인다.

 

** Canonicalnon-canonical의 송신하는 데이터의 크기가 고정(non-canonical)이 되었는지 아닌지(canonical)의 차이이다.

 

Asynchronous: 소프트웨어적인 인터럽트가 발생하면 데이터를 처리하는 방식이다.

 

Multi Flexing: select함수의 개념이다.


 

SPEED를 사용할 때 대문자 ‘B'를 붙여줘야 한다.

 

 

'O_NOCTTY'는 프로그램 명령어를 보냈을 때 해당 내용을 송신하지 않고 내부적인 프로그램 명령어로 사용하라는 옵션이다.

 

//tc: terminal control

//attr: attribute

//get 명령어의 반대개념은 set이다.

 

Canonical

canonical 방식으로 시리얼 통신을 해보자. 하이퍼 터미널에서는 송신을 하고 canonical 프로그램에서는 받는 방식으로 하자.

 

 








 

리눅스에서 수신

 

 

리눅스에서 송신

 

 

 

Non-canonical

 

 

 

데이터가 5byte가 되면 수신하도록 설정해보자.

 

 

Asynchronous(인터럽트 방식)



 

fcntl로 인터럽트를 시리얼포트로 전송해준다.

 

//시리얼 통신은 canonical 혹은 non-canonical 중 반드시 하나를 사용해야 한다.




 


Multi-flexing 


동시에 두 곳 이상의 포트를 감시한다.

 




linux serial.pdf


반응형

'Busan IT > RFID' 카테고리의 다른 글

Dos Serial 통신  (0) 2015.12.09
RFID(Radio Frequency Identification)  (0) 2015.12.08
Posted by newind2000