C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 강좌/문서
C++Builder Programming Tutorial&Docments
[21] Component 를 만들며 배우는 Serial Programming(2) - 약간의 하드웨어지식
최보현.U&I [uriduri] 21675 읽음    2002-04-01 17:06

l        약간의 하드웨어 지식

 전회 강좌에서 필자가 이런 말을 했다. 하드웨어에 대해서 더 자세히 알라고 들지 말라고 했다. 그런데 왠 약간의 하드웨어 지식 ... 이런 독자가 있을지도 모르겠다.. 하지만 평가는 끝까지 일고서 해도 늦지 않을 것이다. 지금부터 설명할 내용은 철저하게 프로그래머가 알아야 할  최소한의 하드웨어 지식 및 왜 하드웨어를 몰라도 된다를 설명 할 테니깐 말이다.

전회에서 시리얼통신을 설명 하면서 시리얼 통신은 비트 데이터의 이동이라고 말했다. 그럼 이 데이터를 어떻게 받아서 내 프로그램에서 처리 할 것인가 ? 또 어떻게 보낼 것인가 ? x86 계열의 C/C++ 프로그램의 데이터의 최소 단위는 Byte 일진데( 물론 비트 필드 등을 이용해서 비트도 사용 할 수 있지만 이 또한 char 형에 포함된 비트를 의미한다.) 어떻게 Bit 단위로 데이터를 주고 받는단 말인가 ...

필자가 그 해답을 주리라~ “그것은 ... 하드웨어가 해준다.” 이것이 해답이다.

피시안에는 16c450 or 16c550 같은 Serial 통신을 위한 전용 디바이스 IC 가 있다. 요 넘이 Bit 데이터를 모아서 1 Byte 단위로 받을 수 있도록, 또 1 Byte 데이터를 Bit 단위로 쪼개서 보낼 수 있도록 해준다. 그래서 우리는 1 Byte 단위로 통신을 할 수 있는 것 이다.

이해가 않 되는 독자를 위해 다음 그림을 보자.


[그림2] 시리얼 통신 16C550 의 역할

위 그림으로 충분히 그 역할에 대해 알았을 것이다. 여기까지 읽고 독자 여러분 중에 컴퓨터를 뜯어서 진짜 16C550 이 붙어 있나 찾아보는 사람이 있는가? 혹시라도 그런 사람이 있다면, 그러고 싶다면 말리고 싶다. 아무리 찾아봐라 없다. 첨단 시대에 저런 칩이 마더보드에 올라와 있을 거라고 생각 하는 사람이 있다니 .. 용기는 참으로 가상 하다. 예전 XT, 286 시대에는 16C550 이 나오기도 전에 말이다. 그때에는 같은 역할을 하는 8250 이라는 시리얼 디바이스가 실제 마더보드(또는 ISA I/O 보드) 상에 떡 하니 자리를 잡고 있었다. 하지만, 요즘 마더보드에는 ChipSet 이라는 통합 칩에 16c550 코어를 포함 하고있다 아무리 찾아도 없을 것이다. 하지만, 아직도 16c550 같은 칩은 많이 사용 된다. 어디에 ? 독자적인 통신 보드에 지금도 사용 되고 있다. 혹시라도 이미 뜯어 버린 독자는 뜯은 그대로 두고 고물상에 가봐라 .. 진로를 잘못 택했다. 동네 전파사에서 순돌이 아빠 역할이 딱 이다. ㅋㅋㅋ

자 그럼 다음의 경우를 생각해보자. 만약 A 컴퓨터가 1 Byte 데이터 중에서 4 Bit 의 데이터를 보낸 상태에서 B 컴퓨터가 전원이 켜졌다면 ? 그렇다면 B 컴퓨터는 그 데이터가 시작인줄 알고 받았다면, 데이터는 엉망이 되겠지요? 그래서 1 Byte 의 데이터를 보내기위해서는 그 1 Byte 의 데이터를 시작한다는 스타트 Bit, 끝내는 스톱 비트가 필요 합니다.

여러분은 “9600-1-N” 라는 스트링을 본적이 있을 겁니다. 9600 은 통신속도로 전회 강좌에서 소개했던 클럭의 속도를 의미하고, 1 은 스톱 Bit 를 의미하고, N 은 패리티 Bit 를 애기 합니다. , 나머진 다 설명이 되었고, 패리티에 대해서만 설명이 안되었군요.

여기서 잠깐 패리티에 대해서 알아보기로 하지요. 일반적으로 패리티는 None, Even, Odd 방식이 있습니다. 패리티는 데이터 통신을 하는 중에 오류를 검출하기 위해 사용됩니다. 8 Bit 의 데이터 중에서 1 의 개수가 3 개라면 패리티 비트에 1로, 4개라면 0으로 설정하여 짝수로 맞추는 것을 Even 패리티 방식, 그 반대의 방식을 Odd 패리티 방식, 그리고 None 은 말 그대로 검출하지 않는다. 이 모든걸 16C550 이 해준다는 겁니다. 프로그래머는 16C550 을 설정만 하면 되지요~~

여기까지 시리얼 통신의 개념에 대해서 설명했다. 앞으로 한 두 가지만 더 하드웨어 지식을 익히자. 전회 강좌에서 시리얼 통신은 오로지 한 선으로 통신을 할 수 있다고 말했다. 오로지 한선 ? 정말? 물론 거짓말이다. 최소한 2 가닥의 회선이 필요하다. 왜냐하면, 비트의 1 과 0 의 값을 나타 내기 위해서는 전압이라는 게 필요하다 .. 전압을 표현하기 위해서는 2 가닥이 필요하다. 이해 않가는 사람들은 건전지를 보라. + 만 있는 건전지를 본적이 있는가 ? 건전지도 전압을 나타내기 위해서 양극(+) 와 음극(-)가 필요 한것이다. 따라서 최소한 2 선이 필요 하다. 흠 그래 통신을 위해선 최소한 2가닥이 필요하군~

음 그럼 데이터를 주는데 2 선 필요 하구 받는데 2 선 필요하니 총 4 선이 필요 하겠군.. 짝!짝!짝!~ 산수 진짜 잘한다. 하지만 틀렸다. 3 선이 필요 하다 1 선은 공통으로 사용 하기 때문에~~

~ 그럼 컴퓨터 어딘가에 통신을 할수 있는 선이 최소한 3 선이상 있다는 소리인데~ 어디 있을까요~ 설마 또 피시 케이스를 뜯는건 아니겠지요~ 아래 그림을 보세요.


[그림3] 컴퓨터 백 패널의 시리얼 포트

위 그림처럼 컴퓨터에는 2 개의 시리얼 포트가 이미 준비 되어 있습니다.(요즘 컴퓨터에는 1 개만 있는 제품도 있더군요) 어~ 근데 한 포트에 9 개의 핀이 있네요. 통신 하는데 3 선이 필요하다는데 나머지 6 개의 선은 무엇을 하는 것일까요~


[그림 4] Serial Port (9 Pin Male)

1. DCD  : ( Data Terminal Ready ) 모뎀이 상대편 모뎀과 전화선등을 통해서 접속이 완료되었을 때 상대편 모뎀이 캐리어신호를 보내오며 이신호를 검출하였음을 알려주는 신호선이다.
2. RXD : ( Receive Data ) 외부장치에서 들어오는 데이터를 입력받는 신호선.
3. TXD : ( Transmit Data ) 외부장치로 보낼 때 직렬통신 데이터가 나오는 신호선이다
4. DTR : ( Data Terminal Ready ) 컴퓨터 또는 터미널이 모뎀에게 자신이 송수신 가능한 상태임을 알리는 신호선이며 일반적으로 컴퓨터등이 전원 인가후 통신 포트를 초기화한 후 이 신호를 출력시킨다.
5. SG   : ( Signal Ground )
6. DSR : ( Data Set Ready ) 모뎀이 컴퓨터 또는 터미널에게 자신이 송수신 가능한 상태임을 알려주는 신호선이며 일반적으로 모뎀에 전원인가 후 모뎀이 자신의 상태를 파악 한 후 이상이 없을 때 이 신호를 출력시킨다.
7. RTS : ( Ready To Send ) 컴퓨터와 같은 DTE장치가 모뎀 또는 프린터와 같은 DCE장치에게 데이터를 받을 준비가 됐음을 나타내는 신호선이다.
8. CTS : ( Clear To Send ) 모뎀 또는 프린터와 같은 DCE장치가 컴퓨터와 같은 DTE장치에게 데이터를 받을 준비가 됐음을 나타내는 신호선이다.
9. RI    : ( Ring Indicator ) 상대편 모뎀이 통신을 하기위해서 먼저 전화를 걸어오면 전화 벨이 울리게 된다. 이때 이 신호를 모뎀이 인식하여 컴퓨터 또는 터미널에 알려주는 신호선이며 일반적으로 컴퓨터가 이 신호를 받게되면 전화벨 신호에 응답하는 프로그램을 인터럽터등을 통해서 호출하게 된다. 

위 설명처럼 여러가지 선이 있습니다만, 여기서 실제 통신에 있어 가장 중요한 3 선은 2(RxD), 3(txD), 5(SG) 입니다.

다음 강좌(일단 해보자)를 위해서 여러분은 선을 연결 해야 합니다.
그럼 어떻게 연결 해야 최소한의 데이터 통신을 할 수 있는지 결선도를 볼까요!


[그림 5] 데이터 통신을 위한 최소한의 결선도

위 그림에서 COM1 이 보낸 것을 COM2 가 받고, COM2 가 보낸 것을 COM1 이 받는 것을 확인할 수 있습니다.

직접 만드실 수 있는 분은 만드시고~ 아니면 용산이나, 천개천 나가서 클로스 통신 케이블 PC 9핀 ?PC 9핀용 케이블을 하나씩 준비하세요~ 이강좌 끝까지 사용 해야 하니깐요~~

URIDURI ( 최보현.U&I  - 현지아빠 )

** P.S.

강좌를 읽으시는 분들은 싶게 읽으시겠지만, 쓰는 저는 몇 번을 고쳐쓰고 생각하고, 그림도 일일히 그려서 올리기 때문에 늦을 수 밖에 없답니다. 이점 양해 하시고 느긋한 마음으로 천천히 따라오시기를,,, 그럼 다음 회에 만나요.


미스콜이아 [catchv]   2002-04-02 00:22 X
참고. 연결도에 나온 컨넥터는 둘다 암놈(?) 이여야 합니다.(저는 항상 이게 어려워서..)
김승철 [sc1089]   2002-04-08 15:27 X
둘다 암놈입니다.
Aquarius [cheolry1]   2002-06-19 20:31 X
정말 정말 좋아요.. 알고 싶어도.. 늘~ 어렵게만 말하는 사람들이 있으니.. 동화책 듣는 것처럼 재미있고 좋아여~ 캄사합니다.
4GW [rsaint]   2003-05-14 01:29 X
맞아요. 정말 쉽게 쓰신거 같네요. 확실히 알아야만 설명도 쉽게 할 수 있죠. 보현님 강좌 고맙습니다.

+ -

관련 글 리스트
21 Component 를 만들며 배우는 Serial Programming(2) - 약간의 하드웨어지식 최보현.U&I 21675 2002/04/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.