이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

직렬 포트 개요

소개

많은 직렬 포트 응용 프로그램의 경우, 직렬 포트의 작동 방식을 자세히 몰라도 장치와 통신할 수 있습니다. 응용 프로그램이 간단하거나 앞서 언급한 주제를 사용자가 이미 잘 알고 있는 경우 직렬 포트 세션 항목부터 시작해서 MATLAB®과 함께 직렬 포트 장치를 사용하는 방법을 살펴봐도 됩니다.

직렬 통신이란?

직렬 통신은 두 개 이상의 장치 간에 통신하기 위한 가장 일반적인 로우 레벨 프로토콜입니다. 일반적으로 한 장치는 컴퓨터이고 다른 장치는 모뎀, 프린터, 다른 컴퓨터 또는 오실로스코프나 함수 생성기 같은 과학 기기일 수 있습니다.

그 이름에서도 알 수 있듯이, 직렬 포트는 한 번에 1비트씩 직렬 방식으로 정보 바이트를 송수신합니다. 이러한 바이트는 이진(숫자) 형식 또는 텍스트 형식을 사용하여 전송됩니다.

직렬 포트 인터페이스 표준

두 장치를 연결하기 위한 직렬 포트 인터페이스는 TIA(Telecommunications Industry Association: 통신산업협회)에서 발표한 TIA/EIA-232C 표준에 규정되어 있습니다.

원래 직렬 포트 인터페이스 표준은 Recommended Standard number 232를 의미하는 RS-232로 정해진 바 있습니다. RS-232라는 용어가 여전히 널리 사용되고 있는데, 이 문서에서는 TIA/EIA-232 표준을 따르는 직렬 통신 포트를 지칭할 때 사용합니다. RS-232는 다음과 같은 직렬 포트 특성을 정의합니다.

  • 최대 비트 전송률과 케이블 길이

  • 신호의 이름, 전기적 특성 및 함수

  • 기계식 연결과 핀 할당

기본 통신은 데이터 전송(Transmit Data) 핀, 데이터 수신(Receive Data) 핀 및 접지(Ground) 핀 등 세 가지 핀을 사용하여 이루어집니다. 데이터 흐름 제어를 위해 다른 핀을 사용할 수 있지만, 필수적인 것은 아닙니다.

RS-485 등의 다른 표준에서는 더 높은 비트 전송률, 더 긴 케이블 길이, 256개의 장치에 대한 연결과 같은 추가적인 기능을 규정합니다.

직렬 케이블를 사용하여 두 장치 연결하기

RS-232 표준에서는 직렬 케이블로 연결된 두 장치를 DTE(데이터 단말 장치)와 DCE(데이터 회선 종단 장치)로 정의합니다. 이 용어에는 컴퓨터 단말기와 모뎀 간의 통신 표준이라는 RS-232의 기원이 반영되어 있습니다.

이 문서에서는 사용자 컴퓨터를 DTE로, 모뎀과 프린터 같은 주변 장치를 DCE로 간주합니다. 많은 과학용 기기가 DTE의 기능을 합니다.

RS-232는 주로 DTE를 DCE에 연결하는 문제와 관련이 있으므로 핀 할당이나 케이블 연결은 간단한 방식으로 정의됩니다. 즉, 핀 1은 핀 1에 연결되고 핀 2는 핀 2에 연결되는 식입니다. 다음 도식은 TD(데이터 전송) 핀과 RD(데이터 수신) 핀을 사용하는 DTE와 DCE 간의 직렬 연결을 보여줍니다.

직렬 포트 핀에 대한 자세한 내용은 직렬 포트 신호와 핀 할당 항목을 참조하십시오.

직선형 직렬 케이블을 사용하여 두 개의 DTE나 두 개의 DCE를 연결하는 경우 각 장치의 TD 핀은 서로 연결되고 각 장치의 RD 핀 역시 서로 연결됩니다. 따라서 같은 장치 두 개를 연결하려면 널 모뎀 케이블을 사용해야 합니다. 다음 도식에 나와 있는 것처럼, 널 모뎀 케이블은 케이블의 전송 라인과 수신 라인을 가로지릅니다.

참고

여러 RS-422 또는 RS-485 장치를 직렬 포트에 연결할 수 있습니다. RS-232/RS-485 어댑터가 있는 경우 이런 장치와 함께 MATLAB 직렬 포트 객체를 사용할 수 있습니다.

직렬 포트 신호와 핀 할당

직렬 포트는 데이터 신호와 제어 신호의 두 가지 신호 유형으로 구성됩니다. 이런 신호 유형뿐 아니라 신호 접지도 지원하기 위해, RS-232 표준에는 25핀 연결이 규정되어 있습니다. 하지만 대부분의 Windows® 플랫폼과 UNIX® 플랫폼에서는 9핀 연결을 사용합니다. 사실, 직렬 포트 통신에는 데이터 수신, 데이터 전송, 신호 접지를 위해 각각 하나씩, 세 개의 핀만 있으면 됩니다.

다음 도식은 DTE의 9핀 수 커넥터에 대한 핀 할당 방식을 보여줍니다.

9핀 커넥터와 관련된 핀과 신호가 다음 표에 설명되어 있습니다. 25핀 커넥터에 사용되는 신호와 핀 할당에 대한 설명은 RS-232 표준을 참조하십시오.

직렬 포트 핀과 신호 할당

레이블신호 이름신호 유형

1

CD

Carrier Detect

제어

2

RD

Received Data

데이터

3

TD

Transmitted Data

데이터

4

DTR

Data Terminal Ready

제어

5

GND

Signal Ground

접지

6

DSR

Data Set Ready

제어

7

RTS

Request to Send

제어

8

CTS

Clear to Send

제어

9

RI

Ring Indicator

제어

데이터 세트라는 용어는 모뎀이나 장치와 같은 뜻이고, 데이터 터미널이라는 용어는 컴퓨터와 같은 뜻입니다.

참고

직렬 포트 핀과 신호 할당은 DTE에 관한 것입니다. 예를 들어, 데이터는 DTE의 TD 핀에서 DCE의 RD 핀으로 전송됩니다.

신호 상태

신호는 활성 상태이거나 비활성 상태일 수 있습니다. 활성 상태는 이진 값 1에 대응되고 비활성 상태는 이진 값 0에 대응됩니다. 활성 신호 상태는 종종 논리 1, on, true 또는 마크로 기술됩니다. 비활성 신호 상태는 종종 논리 0, off, false 또는 스페이스로 기술됩니다.

데이터 신호의 경우 on 상태는 수신 신호 전압이 -3V보다 더 낮은 음의 값일 때 발생하고, off 상태는 이 전압이 3V보다 더 높은 양의 값일 때 발생합니다. 제어 신호의 경우 on 상태는 수신 신호 전압이 3V보다 더 높은 양의 값일 때 발생하고, off 상태는 이 전압이 -3V보다 더 낮은 음의 값일 때 발생합니다. -3V에서 +3V 사이의 전압은 천이 영역으로 간주되며, 이때의 신호 상태는 정의되어 있지 않습니다.

신호를 on 상태로 전환하려면 제어 장치가 데이터 핀에 대한 값을 어설션 해제(또는 감소)하고 제어 핀에 대한 값은 어설션(또는 증가)합니다. 반대로, 신호를 off 상태로 전환하려면 제어 장치가 데이터 핀에 대한 값을 어설션하고 제어 핀에 대한 값은 어설션 해제합니다.

다음 도식은 데이터 신호와 제어 신호에 대한 on 상태와 off 상태를 보여줍니다.

데이터 핀

대부분의 직렬 포트 장치는 전이중 통신을 지원하므로 데이터 송수신을 동시에 수행할 수 있습니다. 따라서 데이터 전송과 수신에 각각 별개의 핀을 사용합니다. 이런 장치의 경우 TD, RD 및 GND 핀이 사용됩니다. 하지만 몇몇 유형의 직렬 포트 장치는 단방향 또는 반이중 통신만 지원합니다. 이런 장치의 경우 TD 핀과 GND 핀만 사용됩니다. 이 문서에서는 전이중 직렬 포트가 장치에 연결되어 있는 것으로 가정하고 설명합니다.

TD 핀은 DTE에서 전송되는 데이터를 DCE로 전달합니다. RD 핀은 DCE로부터 DTE에 수신되는 데이터를 전달합니다.

제어 핀

9핀 직렬 포트의 제어 핀은 연결된 장치의 존재 여부를 확인하고 데이터 흐름을 제어하는 데 사용됩니다. 제어 핀은 다음을 포함합니다.

RTS 핀과 CTS 핀.  RTS 핀과 CTS 핀은 장치가 데이터를 전송하거나 수신할 준비가 되었는지 알릴 목적으로 사용됩니다. 이 유형의 데이터 흐름 제어(하드웨어 핸드셰이킹이라고 함)는 전송 중 데이터 손실 방지를 위해 사용됩니다. DTE와 DCE에 대해 모두 활성화되는 경우, RTS와 CTS를 사용하는 하드웨어 핸드셰이킹은 다음 단계를 따릅니다.

  1. DTE가 RTS 핀을 어설션하여 DCE에 데이터 수신 준비가 된 상태임을 알립니다.

  2. DCE가 CTS 핀을 어설션하여 TD 핀을 통해 데이터를 전송할 준비가 완료되었음을 표시합니다. 데이터를 더 이상 전송할 수 없는 경우 CTS 핀이 어설션 해제됩니다.

  3. 데이터가 TD 핀을 통해 DTE로 전송됩니다. 데이터를 더 이상 받을 수 없는 경우 DTE에 의해 RTS 핀이 어설션 해제되고 데이터 전송이 중지됩니다.

MATLAB에서 하드웨어 핸드셰이킹을 사용하도록 설정하려면 Controlling the Flow of Data: Handshaking 항목을 참조하십시오.

DTR 핀과 DSR 핀.  연결되어 있는지 그리고 전원이 공급되는지를 알리기 위해 DSR 핀과 DTR 핀을 사용하는 장치가 많이 있습니다. DTR과 DSR을 사용하여 연결된 장치가 있음을 알리는 과정은 다음과 같습니다.

  1. DTE가 DTR 핀을 어설션하여 DCE가 통신 회선에 연결할 것을 요청합니다.

  2. DCE가 DSR 핀을 어설션하여 연결되어 있음을 나타냅니다.

  3. DCE는 통신 회선에서 연결이 끊길 때 DSR 핀을 어설션 해제합니다.

응용 프로그램에 따라 DTR/DSR 회선의 용도는 다양합니다. 예를 들어, 이 회선들은 핸드셰이킹이나 흐름 제어뿐 아니라 장치에 전원을 공급하는 용도로도 사용할 수 있습니다. 그러나 RTS/CTS 회선은 주로 호스트와 장치 간 데이터 흐름 제어에 사용됩니다. 특정 핀 동작을 확인하려면 장치 설명서를 참조하십시오.

CD 핀과 RI 핀.  CD 핀과 RI 핀은 일반적으로 모뎀 간 연결 중 특정 신호의 존재를 표시하는 데 사용됩니다.

모뎀은 CD 핀을 사용하여 다른 모뎀과 연결하거나 반송파 톤을 검출했음을 알립니다. DCE가 적합한 주파수의 신호를 수신 중일 때 CD가 어설션됩니다. DCE가 적합한 신호를 수신하고 있지 않을 경우 CD는 어설션 해제됩니다.

RI 핀은 가청 호출 신호의 존재를 표시하는 데 사용됩니다. DCE가 호출 신호를 수신 중일 때 RI가 어설션됩니다. DCE가 호출 신호를 수신하고 있지 않을 때는(예: 호출과 호출 사이) RI가 어설션 해제됩니다.

직렬 데이터 형식

직렬 데이터 형식은 5개의 데이터 비트와 8개의 데이터 비트 사이에 시작 비트 1개와 정지 비트 1개를 포함합니다. 패리티 비트와 추가적인 정지 비트가 형식에 포함될 수도 있습니다. 다음 도식은 직렬 데이터 형식을 보여줍니다.

다음 표기법은 직렬 포트 데이터의 형식을 표현한 것입니다.

number of data bits - parity type - number of stop bits

예를 들어, 8-N-1은 데이터 비트 8개, 패리티 비트 없음, 정지 비트 1개로 해석되고, 7-E-2는 데이터 비트 7개, 짝수 패리티, 정지 비트 2개로 해석됩니다.

데이터 비트는 보통 ASCII 문자를 표시하므로 종종 문자로 지칭됩니다. 나머지 비트는 데이터 비트의 구간을 구분하므로 프레임 비트라고 합니다.

바이트와 값

바이트는 직렬 데이터 형식을 구성하는 비트 모음입니다. 바이트는 8개의 비트이며 직렬 데이터 형식의 범위는 7비트와 12비트 사이일 수 있으므로, 처음에는 바이트라는 용어가 부정확해 보일 수도 있습니다. 하지만 직렬 데이터가 컴퓨터에 저장될 때는 프레임 비트가 없어지고 데이터 비트만 유지됩니다. 게다가, 전송을 위해 지정된 데이터 비트 수에 상관없이 항상 8개의 데이터 비트가 사용되며, 사용되지 않는 비트에는 0의 값이 할당됩니다.

데이터를 읽거나 쓸 때 1개 이상의 바이트로 구성될 수 있는 을 지정해야 할 수도 있습니다. 예를 들어, int32 형식을 사용하는 장치에서 한 개의 값을 읽는 경우 그 값은 4바이트로 구성됩니다. 값을 읽고 쓰는 방법에 대한 자세한 내용은 데이터 쓰기와 읽기 항목을 참조하십시오.

동기 통신과 비동기 통신

RS-232 표준은 동기와 비동기의 두 가지 통신 프로토콜 유형을 지원합니다.

동기 프로토콜을 사용하면 전송되는 모든 비트가 공통 클록 신호로 동기화됩니다. 두 장치가 처음에는 상호 간에 스스로 동기화하고 계속 문자를 보내면서 동기화된 상태를 유지합니다. 실제 데이터가 사실은 전송되지 않을 때도 일정한 비트 흐름을 통해 각 장치는 다른 장치가 특정 시점에 어느 위치에 있는지 알 수 있습니다. 즉, 전송되는 각각의 비트는 실제 데이터이거나 유휴 문자입니다. 동기 통신을 사용하면 비동기 통신보다 빠른 데이터 전송 속도를 달성할 수 있습니다. 각 데이터 바이트의 시작과 끝을 마킹하기 위한 추가 비트가 불필요하기 때문입니다.

비동기 프로토콜을 사용할 경우 각 장치는 고유의 내부 클록을 사용하므로 임의의 시간에 전송되는 바이트가 발생합니다. 따라서 비트를 동기화하는 방법으로 시간을 사용하는 대신 데이터 형식이 사용됩니다.

특히, 데이터 전송은 워드의 시작 비트를 사용하여 동기화되고, 한 개 이상의 정지 비트가 워드의 끝을 나타냅니다. 비동기 통신에서는 이런 추가 비트를 보내야 하므로 동기 통신보다 속도가 약간 느려집니다. 하지만 프로세서가 추가적인 유휴 문자를 처리하지 않아도 된다는 장점이 있습니다. 대부분의 직렬 포트는 비동기식으로 작동합니다.

참고

이 설명서에서 동기비동기라는 용어를 사용할 때는 읽기 또는 쓰기 작업이 MATLAB 명령줄에 대한 액세스를 차단할지 여부를 지칭하는 것입니다. 자세한 내용은 MATLAB 명령줄에 대한 액세스 제어하기 항목을 참조하십시오.

비트의 전송 방식

정의에 따라, 직렬 데이터는 한 번에 한 비트씩 전송됩니다. 비트가 전송되는 순서는 다음과 같습니다.

  1. 시작 비트가 0의 값으로 전송됩니다.

  2. 데이터 비트가 전송됩니다. 첫 번째 비트는 최하위 유효 비트(LSB)에 대응되고, 마지막 데이터 비트는 최상위 유효 비트(MSB)에 대응됩니다.

  3. 패리티 비트(정의된 경우)가 전송됩니다.

  4. 한 개 또는 두 개의 정지 비트가 전송되며, 각각의 값은 1입니다.

전송 속도는 초당 전송되는 비트의 수입니다. 전송되는 비트는 시작 비트, 데이터 비트, 패리티 비트(정의된 경우) 및 정지 비트를 포함합니다.

시작 비트와 정지 비트

동기 통신과 비동기 통신에 설명되어 있는 것처럼, 대부분의 직렬 포트는 비동기식으로 작동합니다. 이는 전송되는 바이트를 시작 비트와 정지 비트로 식별해야 한다는 의미입니다. 시작 비트는 데이터 바이트가 시작되려는 시점을 표시하고 정지 비트는 데이터 바이트의 전송이 완료된 시점을 표시합니다. 직렬 데이터 형식을 가진 바이트를 식별하는 과정은 다음 단계를 따릅니다.

  1. 직렬 포트 핀은 유휴 상태일 때(데이터를 전송하지 않을 때) on 상태입니다.

  2. 데이터가 전송되려 할 때 직렬 포트 핀은 시작 비트로 인해 off 상태로 바뀝니다.

  3. 직렬 포트 핀은 정지 비트로 인해 on 상태로 다시 바뀝니다. 이는 바이트의 끝을 표시합니다.

데이터 비트

직렬 포트를 통해 전송되는 데이터 비트는 장치 명령, 센서 판독값, 오류 메시지 등을 나타낼 수 있습니다. 데이터는 이진 데이터 또는 ASCII 데이터로 전송될 수 있습니다.

대부분의 직렬 포트는 5개에서 8개 사이의 데이터 비트를 사용합니다. 이진 데이터는 일반적으로 8개의 비트로 전송됩니다. 텍스트 기반 데이터는 7개의 비트 또는 8개의 비트로 전송됩니다. 데이터가 27개 또는 128개의 서로 다른 문자를 보유한 ASCII 문자 집합을 기반으로 한다면 최소 7개의 비트가 필요합니다. 8번째 비트가 사용되는 경우 이 비트의 데이터는 0의 값을 가져야 합니다. 데이터가 28개 또는 256개의 서로 다른 문자를 보유한 확장된 ASCII 문자 집합을 기반으로 한다면 8개의 비트를 사용해야 합니다.

패리티 비트

패리티 비트는 전송되는 데이터에 대한 간단한 오류(패리티) 검사 기능을 제공합니다. 다음 표에는 패리티 검사의 유형이 나와 있습니다.

패리티 유형

패리티 유형설명

짝수

데이터 비트와 패리티 비트가 합쳐져 짝수 개의 1이 됩니다.

마크

패리티 비트가 항상 1입니다.

홀수

데이터 비트와 패리티 비트가 합쳐져 홀수 개의 1이 됩니다.

스페이스

패리티 비트가 항상 0입니다.

마크 패리티 검사와 스페이스 패리티 검사는 최소한의 오류 감지 기능만 제공할 뿐이므로 거의 사용되지 않습니다. 패리티 검사를 전혀 사용하지 않도록 선택할 수도 있습니다.

패리티 검사 과정은 다음 단계를 따릅니다.

  1. 전송 장치는 데이터 비트 값과 선택한 패리티 검사의 유형에 따라 패리티 비트를 0 또는 1로 설정합니다.

  2. 수신 장치는 패리티 비트가 전송되는 데이터와 일치하는지 검사합니다. 일치할 경우 데이터 비트가 수락됩니다. 일치하지 않을 경우에는 오류가 반환됩니다.

참고

패리티 검사는 1비트 오류만 감지할 수 있습니다. 다중 비트 오류는 유효한 데이터로 나타날 수 있습니다.

예를 들어, 데이터 비트 01110001이 컴퓨터로 전송된다고 가정하겠습니다. 짝수 패리티가 선택된 경우 짝수 개의 1을 생성하기 위해 전송 장치가 패리티 비트를 0으로 설정합니다. 홀수 패리티가 선택된 경우 홀수 개의 1을 생성하기 위해 전송 장치가 패리티 비트를 1로 설정합니다.

플랫폼에 맞는 직렬 포트 정보 찾기

이 섹션에서는 Windows와 UNIX 플랫폼에 맞는 직렬 포트 정보를 찾는 방법을 설명합니다.

참고

운영 체제에서는 모든 직렬 포트 설정에 대해 디폴트 값을 제공합니다. 하지만 이런 설정은 MATLAB 코드로 재정의되며 직렬 포트 응용 프로그램에는 아무런 영향도 주지 않습니다.

seriallist 함수 사용하기

seriallist 함수는 시스템에 있는 모든 직렬 포트의 목록을 반환합니다. 이 목록에는 USB-직렬 장치와 Bluetooth 직렬 포트 프로파일 장치에서 제공하는 가상 직렬 포트가 포함되어 있습니다. 컴퓨터에서 액세스하여 직렬 포트 통신에 사용할 수 있는 직렬 포트의 목록이 제공됩니다. 예를 들어, 다음과 같이 입력합니다.

seriallist

ans = 

  1×2 string array

  "COM1"    "COM3"

Microsoft Windows 플랫폼

  1. Windows 제어판을 엽니다.

  2. 장치 관리자(Device Manager)를 클릭합니다.

  3. 장치 관리자(Device Manager) 대화 상자에서 포트 노드를 확장합니다.

  4. Communications Port (COM1) 노드를 더블 클릭합니다.

  5. 포트 설정(Port Settings) 탭을 선택합니다.

UNIX 플랫폼

UNIX 플랫폼에 대한 직렬 포트 정보를 찾으려면 직렬 포트 이름을 알아야 합니다. 직렬 포트 이름은 운영 체제마다 다를 수 있습니다.

Linux® 플랫폼에서는 직렬 포트 장치의 이름이 보통 ttyS0, ttyS1 등으로 되어 있습니다. setserial 명령을 사용하여 직렬 포트 정보를 표시하거나 구성합니다. 예를 들어, 사용 가능한 포트를 표시하려면 다음을 입력하십시오.

setserial -bg /dev/ttyS*
/dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A
/dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A

ttyS0에 대한 자세한 정보를 표시하려면 다음을 입력하십시오.

setserial -ag /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
        Baud_base: 115200, close_delay: 50, divisor: 0
        closing_wait: 3000, closing_wait2: infinte
        Flags: spd_normal skip_test session_lockout

참고

setserial -ag 명령이 효과가 없으면 해당 포트에 대한 읽기 권한과 쓰기 권한이 있는지 확인해 보십시오.

지원되는 모든 UNIX 플랫폼에서 stty 명령으로 직렬 포트 정보를 표시하거나 구성할 수 있습니다. 예를 들어, ttyS0에 대한 직렬 포트 속성을 표시하려면 다음을 입력하십시오.

stty -a < /dev/ttyS0

전송 속도를 4,800bps로 구성하려면 다음을 입력하십시오.

stty speed 4800 < /dev/ttyS0 > /dev/ttyS0

가상 USB 직렬 포트 사용하기

운영 체제에서 직렬 포트로 표시되는 장치가 있을 경우 MATLAB에서 이런 장치를 가상 USB 직렬 포트로 사용할 수 있습니다. 이런 장치의 한 예로 USB 직렬 동글을 들 수 있습니다. Bluetooth® 장치의 경우 Instrument Control Toolbox™에서 Bluetooth 지원을 사용하십시오. 자세한 내용은 Bluetooth Interface Overview (Instrument Control Toolbox) 항목을 참조하십시오.

MATLAB은 장치 공급업체에서 제공하는 직렬 드라이버가 네이티브 하드웨어를 에뮬레이션할 수 있는 한 이러한 장치와 통신할 수 있습니다. HyperTerminal 같은 소프트웨어에서는 네이티브 하드웨어를 완전하게 구현하고 지원하는 데 장치 드라이버를 필요로 하지 않습니다.

정선된 참고 문헌

[1] TIA/EIA-232-F, Interface Between Data Terminal Equipment and Data Circuit-Terminating Equipment Employing Serial Binary Data Interchange.

[2] Jan Axelson, Serial Port Complete, Lakeview Research, Madison, WI, 1998.

[3] Instrument Communication Handbook, IOTech, Inc., Cleveland, OH, 1991.

[4] TDS 200-Series Two Channel Digital Oscilloscope Programmer Manual, Tektronix, Inc., Wilsonville, OR.

[5] Courier High Speed Modems User's Manual, U.S. Robotics, Inc., Skokie, IL, 1994.