앞으로 몇 회에 걸쳐서 시리얼 통신에 대해 말씀 드리려 합니다. (1) 통신의 기본이면서 (2) 값이 매우 저렴하기 때문에 (3) 가장 오래 동안, 그리고 제일 많이 사용되고 있으며 (4) 사용 방법이 간단하고 간편하지만 (5) 또한 개념없이 작성했다가는 개망신 당할 수 있는 것이 시리얼 통신입니다.

개망신이라는 말씀이 좀 지나치겠습니다만 통신이란 혼자서 모두 처리하기 보다는 다른 개발자 또는 이미 만들어진 시스템과 연결하는 경우가 많기 때문에 기본 지식과 개념이 반드시 필요합니다. 또한 개념없는 개발자를 만나서 고생할 때를 대비해서라도 반드시 필요하죠....^^

시리얼 포트

  예전에는 시리얼 포트가 모두 25pin 이었습니다. 초창기 P.C.에 달려 있는 시리얼 포트가 모두 25pin 이었거든요. 그러다가 점점 9pin이 사용되어 지다가 지금은 거의 9pin만 사용합니다. 16pin이나 없는데 문제가 없을까요? 없습니다. 실은 컴퓨터 끼리 통신하는데에는 pin 3개만 사용하기 때문이죠. 그럼에도 25pin, 9pin을 사용한 이유는 여러 가지겠지만 외부 모뎀을 사용하기 위해서 그랬지 않았나 생각합니다.

  우선 25pin과 9pin의 모양을 보겠습니다. 자세히 보시면 각 핀 별로 번호가 있습니다. 이 번호를 유의하시고 봐 주세요.

25pin
9pin

 

시리얼 통신 케이블 만들기

  통신 테스트를 하시려면 두 대의 시스템을 연결하는 케이블부터 만드어야 겠지요. 이 케이블을 만들기 위해서는 각 핀에 대한 정보부터 아셔야겠습니다.

   1:1 통신인 rs232 통신 외에도 1:N 통신이 422과 485통신이 있지만 여기서는 우선 rs232통신에 대해서만 언급하겠습니다. 또 너무 장황한 내용을 모두 담으면 정신 건강에 이롭지 못합니다.필요한 내용만 적어 보겠습니다. 우선 시리얼 통신에는 3개의 핀만 사용하면 통신이 가능합니다.

  그림을 보시면 아시겠지만 25pin은 2번이 TXD, 3번이 RXD이지만 9pin은 반대로 2번핀이 RXD, 3번핀이 TXD입니다. 이를 염두하고 통신을 위한 케이블을 만들어 보면 아래와 같습니다.

  • 25pin 2개로 만들기, 2번과 3번을 크로스하여 연결하면 되겠습니다.

  • 9pin 2개로 만들기, 2번과 3번을 크로스하여 연결하면 되겠습니다.

  • 25pin과 9pin으로 만들기, 2번과 3번핀의 사용이 서로 반대이므로 그대로 연결하면 되겠습니다.

 

간단 프로그램 작성

  이제 통신을 연결할 케이블까지 만들어 졌으므로 아주 간단한 프로그램을 짜 보겠습니다. 다른 컴퓨터로 "forum.falinux.com"이라는 문자열을 전송해 보죠.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <termios.h>
#include <fcntl.h>

int main( void)
{
   int fd;                                                     // (1) 시리얼 통신의 파일 디스크립터 
   struct termios newtio;
   
   fd = open( "/dev/ttyS0", O_RDWR ¦ O_NOCTTY ¦ O_NONBLOCK );  // (2) com1을 open?
   
   memset( &newtio, 0, sizeof(newtio) );
   newtio.c_cflag = B115200;                                   // (3) 통신 속도 115200 
   newtio.c_cflag ¦= CS8;                                      // (4) 데이터 비트가 8bit 
   newtio.c_cflag ¦= CLOCAL ¦ CREAD;                           // (5) 쓰기는 기본, 읽기도 가능하게 
   newtio.c_iflag = 0;                                         // (6) 패리티 사용 안함 
   newtio.c_oflag = 0;
   newtio.c_lflag = 0;
   newtio.c_cc[VTIME] = 0; 
   newtio.c_cc[VMIN] = 1; 
   
   tcflush (fd, TCIFLUSH );
   tcsetattr(fd, TCSANOW, &newtio );
   
   write( fd, "forum.falinux.com", 17);                        // (7) 시리얼로 17자의 문자열을 전송 
   
   close( fd);                                                 // (8) 통신 포트 사용 중지 
   
   return 0; 
}

주석에 간단히 설명을 달았습니다만 모두 이해를 못하셔도 좋습니다. 다음 시간에 요목조목 설명해 드리겠습니다. 중요한 것은  com 포트 1번에 115200 속도로 시리얼 포트를 사용한다는 점입니다. 이 프로그램을 실행하셔서 상대 P.C.에 문자열이 출력되는지를 확인해 보십시오.

어떻게 확인하냐구요? 본 포럼의 자료실에 통신 테스트 프로그램을 올렸습니다. 또한 설명을 자세히 올렸습니다. 참고하시고 상대 P.C.에 실행해 놓으신 후 통신 속도를 115200으로 맞추어 놓고 확인하시면 되겠습니다.