시리얼 통신 개요

2015. 5. 28. 21:59 from 통신

1. 시리얼이란?

시리얼은 거의 모든 PC에서 표준으로 사용되는 디바이스 통신 프로토콜입니다. 시리얼의 개념을 USB의 개념과 잘 구분하십시오. 대부분의 컴퓨터에는 2개의 RS232 기반 시리얼 포트가 있습니다. 시리얼은 또한 여러가지 디바이스에서 계측을 위한 일반 통신 프로토콜이며, 여러 GPIB 호환 디바이스에는 RS232 포트가 장착되어 있습니다. 뿐만 아니라, 원격 샘플링 디바이스로 데이터 수집을 하는 경우에도 시리얼 통신을 사용할 수 있습니다.

시리얼 통신의 개념은 간단합니다. 시리얼 포트는 정보의 바이트를 한번에 한 비트씩 순차적으로 송수신합니다. 한번에 전체 바이트를 동시에 전달하는 병렬 통신과 비교하면 시리얼 통신은 속도가 느리지만 훨씬 간단하며 장거리에도 사용할 수 있습니다. 예를 들어, 병렬 통신용 IEEE 488 스펙을 보면 기기간 케이블링은 총 20 m 미만이어야 하며, 두 개의 디바이스간은 2 m 미만이어야 합니다. 반면 시리얼 통신은 최대 1.2 Km의 통신거리를 보장합니다.

통상 엔지니어들은 ASCII 데이터를 전송할 때 시리얼 통신을 사용합니다. 이 때 송신용 (Tx), 수신용 (Rx), 그라운드용 (GND)의 세 가지의 전송 라인을 사용하여 통신합니다. 시리얼은 비동기식이므로 포트는 한 라인에서 데이터를 전송하고 다른 라인에서 데이터를 수신합니다. 핸드쉐이킹용 라인도 사용 가능하지만 필수 요구사항은 아닙니다. 시리얼 통신의 가장 중요한 특징에는 보드 속도 (baud rate), 데이터 비트, 정지 비트, 패리티가 있습니다. 두 개의 포트가 통신하기 위해서는 이러한 파라미터가 반드시 적절하게 맞춰져야 합니다.

  1. 보드 속도는 통신의 속도를 측정하는 수치이며 초당 비트 전송 숫자로 표시됩니다. 예를 들어 300 보드 속도는 초당 300 비트를 의미합니다. 엔지니어들이 흔히 말하는 클럭 주기는 보드 속도를 의미합니다. 따라서 프로토콜에 4800 보드 속도라고 나오는 경우 클럭이 4800 Hz로 작동한다는 뜻입니다. 즉, 시리얼 포트는 4800 Hz로 데이터 라인을 샘플링합니다. 전화선의 일반적인 보드 속도는 14400, 28800 또는 33600입니다. 보다 높은 속도도 가능하지만 그 경우 디바이스를 분리할 수 있는 거리가 줄어들게 됩니다. 따라서 엔지니어들은 디바이스가 같은 장소에 위치해 있는 디바이스 통신에 높은 보드 속도를 사용하게 되며, 그 예로 GPIB 디바이스를 들 수 있습니다.
  2. 데이터 비트는 전송되는 실제 데이터 비트의 측정값을 의미합니다. 컴퓨터가 정보 패킷을 보낼 때 실제 데이터의 양은 전체 8 비트가 되지 않습니다. 데이터 패킷의 표준 값은 5, 7, 8비트입니다. 어떤 정보를 전송하느냐에 따라 어떤 세팅을 선택할 지를 결정해야 합니다. 예를 들어, 표준 ASCII는 0 ~127 (7 비트)의 값을 가집니다. 확장된 ASCII는 0 ~ 255 (8 비트)를 사용합니다. 전송하려는 데이터가 단순 텍스트 (표준 ASCII)일 경우, 패킷당 7비트의 데이터를 보내면 통신에 무리가 없습니다. 패킷은 단일 바이트 전송을 의미하며, 시작/정지 비트, 데이터 비트, 패리티가 포함됩니다. 실제 비트의 수는 선택된 프로토콜에 따라 달라지므로 모든 경우를 포괄하는 "패킷"이라는 용어를 사용합니다.
  3. 정지 비트는 단일 패킷에 대한 통신의 종료를 알리는 데 사용됩니다. 일반적인 값은 1, 1.5, 2 비트입니다. 데이터는 모든 라인을 통해 클럭되며 각 디바이스에는 고유의 클럭이 있기 때문에 두 개의 디바이스는 동기화가 되지 않을 가능성이 있습니다. 따라서 정지 비트는 전송의 종료를 알려줄 뿐 아니라 클럭 속도 오류를 방지하기 위한 완충 역할을 합니다. 더욱 많은 비트가 정지 비트에 쓰이면 다른 클럭을 동기화할 수 있지만 데이터 전송 속도는 느려집니다.

패리티는 시리얼 통신에서 에러를 체크하는 데 사용됩니다. 패리티에는 짝수, 홀수, 마크, 스페이스 패리티의 네 가지 형태가 있습니다. "패리티 없음"을 사용할 수도 있습니다. 짝수 및 홀수 패리티를 이용하면, 시리얼 포트는 패리티 비트 (데이터 비트 뒤에 따라옴)를 특정 값으로 설정함으로써 전송에 logic-high bits가 짝수개 또는 홀수개 있음을 나타냅니다. 예를 들어, 데이터가 011이고 짝수 패리티를 선택했다면 logic-high bits가 짝수개 있으면 패리티 비트는 0 입니다. 홀수 패리티를 선택했다면 logic-high bits가 홀수개 (3개)이므로 패리티 비트는 1이 됩니다. 마크 패리티와 스페이스 패리티는 데이터 비트를 체크하는 기능이 없으며 단지 마크 패리티의 경우 패리티를 높게, 스페이스 패리티의 경우 패리티를 낮게 설정합니다. 따라서 수신 디바이스가 비트의 상태를 확인할 수 있게 되므로 소음으로 인한 데이터 방해 여부나 송수신 디바이스 클럭 동기화 여부 등을 알 수 있습니다.  

위로

2. RS232 개요

RS232는 IBM 호환 PC에서 쓰이는 시리얼 연결입니다. 엔지니어들은 컴퓨터를 센서 또는 모뎀에 연결하거나 계측기 컨트롤 등 여러 용도로 RS232를 사용합니다. RS232 하드웨어는 최장 15 m (50 ft)까지 통신 가능하며, PC 시리얼 포트와 디바이스간 포인트 투 포인트 연결로만 사용이 국한됩니다. 이러한 이유로 인해 추가의 RS232 시리얼 포트가 요구되기도 합니다. 표준 PC RS232 시리얼 포트 및 여러 시리얼 인터페이스 공급업체는 시리얼 통신에서 데이터 송수신에 Win32 API를 사용합니다. Win32 API는 원래 모뎀 통신을 위해 개발되었으며 전체 RS232 프로토콜을 실행하지 않으므로 특정 디바이스와 통신할 수 없습니다.

내쇼날인스트루먼트는 PCI, USB, PCMCIA, ExpressCard, PXI, 이더넷 등 여러 다양한 플랫폼에서 RS232 시리얼 인터페이스를 제공합니다. 플랫폼에 따라 NI Serial 인터페이스는 1, 2, 4, 8 및 16 포트 버전으로 사용 가능합니다. 또한, NI RS232 시리얼 인터페이스는 최고 1 Mb/s의 고속 보드 속도, DMA 전송을 통한 CPU 최소 사용, 최적화된 2000 V 포트간 절연, 구성 가능한 비표준 보드 속도와 같은 향상된 기능을 제공합니다. NI의 모든 시리얼 인터페이스에는 NI-Serial 드라이버 소프트웨어가 포함되므로 전체 RS232 프로토콜을 실행하고, 신속한 어플리케이션 개발을 위한 하이레벨, 사용하기 쉬운 함수를 제공합니다.

관련 정보: NI 시리얼 인터페이스

 

위로

3. RS422 개요


RS422는 애플사의 매킨토시 컴퓨터에서 사용되는 시리얼 연결입니다. RS232가 접지 참조된 불균형 (unbalanced) 신호를 채택하고 있는 것과 달리 RS422는 차동 전기 신호를 사용합니다. 차동 전송 방법은 신호 송수신시 2개의 라인을 각각 사용하며 따라서 RS232에 비해 소음이 적고 장거리 통신을 보장합니다. 소음 제거 및 확장된 통신 거리는 산업 어플리케이션에 있어 중요한 요소입니다.

내쇼날인스트루먼트는 PCI, USB, PCMCIA, ExpressCard, PXI, 이더넷 등 여러 다양한 플랫폼에서 RS485/RS422 시리얼 인터페이스를 제공합니다. 플랫폼에 따라 NI Serial 인터페이스는 1,2, 4-포트 버전으로 사용 가능합니다. 또한, NI RS485/RS422 시리얼 인터페이스는 최고 3 Mb/s의 고속 보드 속도, DMA 전송을 통한 CPU 최소 사용, 최적화된 2000 V 포트간 절연, 구성가능한 비표준 보드 속도와 같은 향상된 기능을 제공합니다. NI의 모든 시리얼 인터페이스에는 NI-Serial 드라이버 소프트웨어가 포함되어 있어 전체 RS485/RS422 프로토콜을 실행하며, 신속한 어플리케이션 개발을 위한 하이레벨, 사용하기 쉬운 함수를 제공합니다.

관련 정보: NI 시리얼 인터페이스

 

위로

4. RS485 개요


RS485는 디바이스 수를 10개에서 32개로 확대하고, 최대 부하에서 적절한 신호 전압이 있음을 확인하는 전자 특성을 정의하기 때문에 RS422 보다 강화된 장치라고 할 수 있습니다. 향상된 멀티드롭 (multidrop) 기능을 통해 단일 RS485 시리얼 포트에 연결된 디바이스의 네트워크를 생성할 수 있습니다. PC에 네트워크 연결된 여러 분산 디바이스가 필요하거나 데이터 수집, HMI 또는 기타 작업을 위해 컨트롤러를 필요로 하는 산업용 어플리케이션에 있어 소음 제거 및 멀티드롭 (multidrop) 기능을 갖춘 RS485는 최상의 선택입니다. RS485는 RS422의 상위 집합이므로 모든 RS422 디바이스는 RS485에 의해 컨트롤됩니다. RS485 하드웨어를 사용하면 최장 1.2 Km (4000 ft) 케이블 시리얼 통신을 수행할 수 있습니다.

내쇼날인스트루먼트는 PCI, USB, PCMCIA, ExpressCard, PXI, 이더넷 등 여러 다양한 플랫폼에서 RS485/RS422 시리얼 인터페이스를 제공합니다. 플랫폼에 따라 NI Serial 인터페이스는 1,2, 4-포트 버전으로 사용 가능합니다. 또한, NI RS485/RS422 시리얼 인터페이스는 최고 3 Mb/s의 고속 보드 속도, DMA 전송을 통한 CPU 최소 사용, 최적화된 2000 V 포트간 절연, 구성가능한 비표준 보드 속도와 같은 향상된 기능을 제공합니다. NI의 모든 시리얼 인터페이스에는 NI-Serial 드라이버 소프트웨어가 포함되어 있어 전체 RS485/RS422 프로토콜을 실행하며, 신속한 어플리케이션 개발을 위한 하이레벨, 사용하기 쉬운 함수를 제공합니다.

관련 정보: NI 시리얼 인터페이스

 

위로

5. NI 시리얼 인터페이스 커넥터를 위한 핀아웃


DB-9 수 (Male)
DB-25 수 (Male)
10-포지션 모듈형 잭
RS232
RS485/RS422
RS232
RS485/RS422
RS232
RS485/RS422
1
DCD
GND
2
TXD
RTS+ (HSO+)
1
No Connect
No Connect
2
RXD
CTS+ (HSI+)
3
RXD
CTS+ (HSI-)
2
RI
TXD-
3
TXD
RTS+ (HSO+)
4
RTS
RTS- (HSO-)
3
CTS
TXD+
4
DTR
RXD+
5
CTS
TXD+
4
RTS
RTS- (HSO-)
5
GND
RXD-
6
DSR
CTS- (HSI-)
5
DSR
CTS- (HSI-)
6
DSR
CTS- (HSI-)
7
GND
RXD-
6
GND
RXD-
7
RTS
RTS- (HSO-)
8
DCD
GND
7
DTR
RXD+
8
CTS
TXD+
20
DTR
RXD+
8
TXD
RTS- (HSO+)
9
RI
TXD-
22
RI
TXD-
9
RXD
CTS+ (HSI+)
-
-
-
-
-
-
10
DCD
GND
 

 

위로

6. 핸드쉐이킹이란?


본 RS232 통신 방식은 Tx, Rx, ground의 세 가지 라인의 간편한 연결을 제공합니다. 그러나 데이터가 전송되기 위해서는 양쪽이 반드시 동일한 보드 속도로 클럭되어야 합니다. 이 방식이 대부분의 어플리케이션에 적용되더라도 과부하된 수신기와 같은 문제를 해결하지는 못합니다. 이러한 경우 핸드쉐이킹이 필요합니다. RS232에서 핸드쉐이킹의 가장 보편적인 세 가지 형태는 소프트웨어 핸드쉐이킹, 하드웨어 핸드쉐이킹, Xmodem입니다.

소프트웨어 핸드쉐이킹
GPIB 통신 시 명령어를 전송하는 것과 마찬가지로 소프트웨어 핸드쉐이킹에서는 제어 문자코드를 데이터 바이트로 사용합니다. 제어문자가 일반 데이터와 마찬가지로 전송 라인을 통해 보내지므로 송신 (Tx), 수신 (Rx), 그라운드 (GND) 간단한 세 개 라인을 통합합니다. SetXMode 기능을 통해 두 개의 제어문자 코드인 XON와 XOFF를 활성화 또는 비활성화할 수 있습니다. 데이터 수신기는 본 문자를 보내어 통신 중인 송신기를 중지시킵니다.

본 방식의 가장 큰 단점이자 꼭 명심해야 할 점은 십진수 17과 19를 더이상 데이터 값으로 사용할 수 없다는 것입니다. 본 값은 비문자 값이므로 ASCII 전송에 있어서는 그다지 중요하지 않지만 바이너리로 정의된 데이터를 전송하는 경우 본 값을 데이터로 전송하면 실패할 확률이 높습니다.

하드웨어 핸드쉐이킹
하드웨어 핸드쉐이킹은 실제 하드웨어 라인을 사용합니다. Tx 및 Rx 라인과 마찬가지로 RTS/CTS 및 DTR/DSR 라인은 짝을 이루어서 사용됩니다. 하나는 출력이며 다른 하나는 입력입니다.

첫번째 라인세트는 RTS (Request to Send)와 CTS (Clear to Send)입니다. 수신부에서 데이터를 받을 준비가 되면 RTS 라인을 활성화하여 데이터 수신 준비가 되었음을 알립니다. 송신부에서는 이 신호를 CTS 입력을 통해 인식하며, 이는 데이터를 전송이 준비되었으므로 데이터를 보내달라는 뜻입니다.

다음에 나오는 라인세트는 DTR (Data Terminal Ready)와 DSR (Data Set Ready) 입니다. 시리얼 포트와 모뎀 사이에 양쪽의 상태를 파악하기 위해 사용되므로 엔지니어들은 이러한 라인을 사용하여 주로 모뎀 통신을 합니다. 예를 들어, PC가 데이터를 보내도록 모뎀이 준비되었을때 DTR 라인이 활성화되어 전화선을 통한 연결이 완성되었음을 알립니다. DSR 라인에서 신호를 인지하고 이제부터 PC에서 데이터를 보낼 수 있습니다. 일반적으로 DTR/DSR 라인을 사용하여 시스템이 통신할 준비가 되었음을 알리고, RTS/CTS 라인은 단위별 데이터 패킷을 대상으로 사용됩니다.

LabWindows/CVI에서 SetCTSMode는 하드웨어 핸드쉐이킹의 사용을 활성화 또는 비활성화합니다. CTS 모드가 활성화되면 LabWindows/CVI는 다음의 규칙을 따릅니다.

PC가 데이터를 보내면:
RS232 라이브러리는 데이터 전송 전에 CTS 라인이 하이 (high)인지를 반드시 감지해야 합니다.

PC가 데이터를 받으면:
만약 포트가 열려있고 입력 큐에 데이터를 수용할 공간이 있으면 라이브러리에서 RTS 및 DTR을 나타냅니다.
포트 입력 큐가 90퍼센트 차 있으면 라이브러리는 RTS를 낮추고 DTR를 하이(high)로 유지합니다.
포트 입력 큐가 거의 비어있을 경우 라이브러리는 RTS를 높이고 DTR를 하이로 유지합니다.
포트가 닫혀있으면 라이브러리는 RTS와 DTR를 낮춥니다.

XModem 핸드쉐이킹
XModem 핸드쉐이킹은 모뎀 통신에서는 매우 일반적으로 사용되지만, 본 프로토콜을 다른 디바이스들이 따를 경우에는 그 디바이스간 직접 XModem 프로토콜을 사용할 수도 있습니다. LabWindows/CVI에서 실제의 XModem 실행은 사용자로부터 숨겨져 있습니다. PC가 XModem 프로토콜을 사용하여 다른 디바이스에 연결되어 있는 한 LabWindows/CVI XModem 함수를 사용하여 파일을 한 사이트에서 다른 사이트로 전송할 수 있습니다. 함수에는 XModemConfig, XModemSend, XModemReceive이 있습니다.

XModem은 여러 파라미터 (start_of_data, end_of_trans, neg_ack, ack, wait_delay, start_delay, max_tries, packet_size)에 기반하여 프로토콜을 사용합니다. 양쪽은 모든 파라미터에 일치되어야 하며 XModem에는 본 파라미터의 표준 정의가 있습니다. 그러나, 요구에 따라 LabWindows/CVI의 XModemConfig 함수를 통해 본 파라미터를 수정할 수도 있습니다. 송신측이 neg_ack 문자를 보내도록 하여 본 파라미터를 XModem에서 사용할 수 있습니다. 이 과정은 데이터 수신 준비가 되었음을 송신측에 알려줍니다. 그 후 수신측은 max_tries에 도달하거나 또는 송신측으로부터 start_of_data를 받을 때까지 start_delay를 시도합니다. max_tries에 이르면 수신측은 사용자에게 송신측과 통신할 수 없음을 알립니다. 송신측으로부터 start_of_data를 받으면 수신측은 다음과 같은 정보 패킷을 읽습니다. 이 패킷에는 패킷 번호, 에러 체크로써 패킷 번호 보완, packet_size 바이트의 실제 데이터 패킷, 추가 에러 체킹을 위한 데이터에 대한 체크섬이 포함되어 있습니다. 데이터를 읽은 후, 수신자는 wait_delay를 요청하고 발신자에게 ack를 다시 보냅니다. 발신자가 ack 받지 않았다면, ack를 받을 때까지 계속해서 데이터 패킷에 max_tries를 재전송합니다. 그럼에도 ack를 받지 못했을 경우 사용자에게 파일 전송이 실패했음을 알립니다.

발신자는 반드시 packet_size 바이트의 패킷 데이터를 전송해야 하므로, 수신측은 마지막 패킷을 채울 정도의 충분한 데이터가 없을 경우에 ASCII NULL (0) 바이트로 데이터 패킷을 채웁니다. 이 때문에 받은 파일이 원래 파일보다 클 수 있습니다. XModem 프로토콜과 함께 XON/XOFF을 사용하지 마십시오. XModem 전송으로부터의 패킷 번호가 XON/OFF 제어문자 값을 증가시킬 가능성이 매우 높으므로 통신의 실패를 유발할 수 있습니다.






출처 http://www.ni.com/white-paper/2895/ko/

'통신' 카테고리의 다른 글

왜 TTL 통신인가  (0) 2015.06.01
RS-232와 UART  (0) 2015.06.01
Buad rate  (0) 2015.06.01
직렬 통신과 병렬 통신  (0) 2015.06.01
동기 비동기 개념  (0) 2015.05.28
Posted by 나무길 :