1. RS-232 시리얼 통신 기본 개념

  • 시리얼 인터페이스: 데이터를 한 번에 한 비트씩 직렬로 전송.
  • 패러럴 인터페이스: 데이터를 여러 비트씩 병렬로 전송.
    • 장단점 비교:
      • 시리얼: I/O 라인을 적게 사용, 장거리 전송에 적합.
      • 패러럴: 빠른 전송 속도, 라인 소모가 많음.

2. 주요 신호 정의

신호설명

DCD 데이터 캐리어 검출, 상대 모뎀 연결 상태 알림.
RD 수신 데이터, 상대방 송신 데이터와 연결.
TD 송신 데이터, 상대방 수신 데이터와 연결.
DTR 데이터 단말기 준비 상태. 컴퓨터가 송수신 준비 완료 알림.
DSR 데이터 세트 준비 상태. 모뎀이 송수신 준비 완료 알림.
RTS 송신 요청. 컴퓨터가 모뎀에 송신 준비 상태 물음.
CTS 송신 허가. 모뎀이 송신 가능 상태임을 컴퓨터에 알림.
RI 링 신호. 상대방으로부터 호출 상태를 알림.

3. 데이터 송수신 과정

  1. 장치 상태 확인:
    • DTR (컴퓨터 준비) → DSR (모뎀 준비).
  2. 송신 준비 확인:
    • RTS (컴퓨터가 송신 준비 요청) → CTS (모뎀이 송신 가능 응답).
  3. 데이터 송수신:
    • TXD (컴퓨터가 데이터 전송) → RXD (모뎀이 데이터 수신).

4. 비동기 및 동기식 통신

  • 동기식:
    • 송신자와 수신자의 동기화를 위해 별도의 클럭 신호 사용.
  • 비동기식:
    • 시작 비트와 정지 비트를 사용하여 동기화.

5. 양방향 통신 방식

유형설명예시

전이중 쌍방이 동시에 송수신 가능. 전화 통신
반이중 한쪽이 송신 중이면 다른 쪽은 대기. 무전기 (푸시토크)


6. 주요 설정

  1. BaudRate:
    • 데이터 전송 속도, 단위: bps (bits per second).
      예: 9600bps는 초당 9600비트 전송.
  2. DataBits:
    • 데이터 크기, 일반적으로 8비트.
  3. Parity:
    • 데이터의 정확성을 확인하는 방법 (홀수, 짝수, 없음 등).
  4. StopBits:
    • 데이터 패킷의 끝을 표시하는 비트 개수.


7. C#에서 시리얼 통신 구현

a. 포트 열기 및 닫기

SerialPort SP = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);

SP.Open(); // 포트 열기
if (SP.IsOpen)
{
    Console.WriteLine("포트가 열렸습니다.");
}
SP.Close(); // 포트 닫기

b. 사용 가능한 포트 탐색

foreach (string comport in SerialPort.GetPortNames())
{
    Console.WriteLine($"사용 가능한 포트: {comport}");
}

c. 데이터 송수신

// 데이터 송신
SP.WriteLine("Hello, RS-232");

// 데이터 수신
string receivedData = SP.ReadLine();
Console.WriteLine($"수신된 데이터: {receivedData}");

d. DataReceived 이벤트 처리

SP.DataReceived += new SerialDataReceivedEventHandler(SP_DataReceived);

private void SP_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    this.Invoke(new Action(() =>
    {
        string receivedData = SP.ReadExisting();
        Console.WriteLine($"수신된 데이터: {receivedData}");
    }));
}

8. RS-232와 TTL 비교

항목 TTL RS-232
전압 범위 0V~3.3V 또는 5V -13V~13V
시작 비트 0V 양전압
정지 비트 전압 레벨 (3.3V, 5V 등) 음전압

정리

  1. RS-232 시리얼 통신은 단순한 하드웨어 구현과 긴 전송 거리가 장점입니다.
  2. C#의 SerialPort 클래스를 활용해 손쉽게 시리얼 통신을 구현할 수 있습니다.
  3. 데이터 송수신 과정과 설정(속도, 데이터 크기 등)을 정확히 이해하고 적용해야 안정적인 통신이 가능합니다.

+ Recent posts