시리얼 통신의 기본 개념 - 2. 데이터 프레임 구조

2025. 2. 10. 14:00프로그래밍/시스템

2장: 데이터 프레임 구조

시리얼 통신에서 데이터를 주고받기 위해서는 데이터 프레임(Data Frame)이라는 특정한 형식을 따라야 합니다.
데이터 프레임은 데이터가 올바르게 전송되고 수신될 수 있도록 구성된 정보 단위입니다.
이 장에서는 데이터 프레임의 구성 요소와 패리티 비트(Parity Bit)를 활용한 오류 검출 방식을 자세히 살펴보겠습니다.


1. 시리얼 통신의 데이터 프레임 구조

시리얼 통신에서는 데이터를 한 비트씩 순차적으로 전송합니다.
이때 수신 장치가 올바르게 데이터를 해석할 수 있도록 일정한 형식으로 데이터를 패킹합니다.
이를 데이터 프레임(Data Frame) 이라고 하며, 기본적인 구조는 다음과 같습니다.

🔹 데이터 프레임 기본 구조 (8N1 예제)

Start Bit  |  Data Bits  |  Parity Bit (선택)  |  Stop Bit
---------------------------------------------------------
   1       |     8       |         0          |     1   

📌 예제: "A" (아스키코드 65, 8비트 데이터) 전송 시 (Baud Rate: 9600, 8N1 설정)

  • Start Bit → 0
  • Data Bits (8비트) → 01000001 (65의 바이너리 표현)
  • Parity Bit (없음) → 패리티 비트 미사용 (8N1 설정)
  • Stop Bit → 1

결과: 0 01000001 1 → 수신기가 이를 해석하여 "A"를 받음.

이제 각 구성 요소를 하나씩 자세히 살펴보겠습니다.


2. Start Bit (데이터 전송의 시작)

✅ Start Bit란?

시리얼 통신에서는 송신 측과 수신 측이 동기화되어야 합니다.
하지만 비동기식 통신(UART) 의 경우, 별도의 클럭 신호가 없기 때문에 수신기가 데이터의 시작을 알아차릴 수 있도록 Start Bit가 필요합니다.

📌 Start Bit의 특징

  • 항상 0(LOW, LOW Voltage Level) 으로 설정됨.
  • 수신기가 "데이터가 시작되었다"는 신호로 인식함.
  • Start Bit 이후에 데이터 비트(Data Bits) 가 전송됨.

🛠️ 예제

Start Bit   |  Data Bits  
-------------------------
      0     |   01000001   ("A"의 바이너리)

👉 Start Bit이 "0"으로 전송되면, 수신기는 데이터를 받을 준비를 시작합니다.


3. Data Bits (보낼 데이터)

✅ Data Bits란?

실제 데이터를 담고 있는 비트들을 의미합니다.
데이터 비트의 개수는 5~9비트로 설정 가능하지만, 일반적으로 8비트(1바이트)가 가장 많이 사용됩니다.

📌 Data Bits의 설정

  • 5, 6, 7, 8, 9비트 가능 (8비트가 가장 일반적)
  • 아스키(ASCII) 코드 문자 전송 시 보통 7비트 또는 8비트 사용
  • 센서 데이터, 바이너리 값 전송 시 8비트 이상 사용 가능

🛠️ 예제

Data Bits (8비트)
------------------
   01000001    ("A"의 바이너리)

👉 수신기가 이 값을 읽어 "A"로 변환하여 출력합니다.


4. Parity Bit (에러 검출을 위한 비트, 선택 사항)

✅ Parity Bit란?

패리티 비트(Parity Bit)는 전송 중 발생할 수 있는 데이터 오류를 감지하기 위한 추가적인 비트입니다.
전송 데이터가 손상되었는지 확인하는 기본적인 오류 검출 방식입니다.

📌 Parity Bit의 특징

  • 선택적으로 사용 가능 (일반적으로 "No Parity" 옵션 사용)
  • 패리티 비트를 사용할 경우 Even Parity(짝수 패리티) 또는 Odd Parity(홀수 패리티) 설정 가능
  • 하드웨어적으로 간단한 오류 감지가 가능하지만, 오류를 수정하지는 못함

🛠️ 예제

Data Bits   |  Parity Bit (Even Parity)
--------------------------------------
 01000001    |        0

👉 "A"(65, 8비트) 데이터의 1의 개수가 홀수이므로, 짝수 개로 맞추기 위해 0이 추가됨.


5. Stop Bit (데이터 전송 종료 신호)

✅ Stop Bit란?

데이터 전송이 끝났음을 나타내기 위해 사용됩니다.
시리얼 통신에서는 수신기가 데이터 패킷이 종료되었음을 인식할 수 있도록 Stop Bit를 포함합니다.

📌 Stop Bit의 특징

  • 1 또는 2비트로 설정 가능
  • 항상 1(HIGH, High Voltage Level)로 설정됨
  • 수신기가 다음 데이터를 기다릴 준비를 하도록 도움

🛠️ 예제

Data Bits   |  Parity Bit  | Stop Bit
--------------------------------------
 01000001    |      0      |    1

👉 Stop Bit이 "1"이므로, 수신기가 데이터 패킷이 끝났음을 인식합니다.


6. 패리티 비트의 역할과 오류 검출 방식

✅ Even Parity(짝수 패리티) vs Odd Parity(홀수 패리티)

패리티 비트는 데이터 비트에서 "1"의 개수를 세어 짝수 또는 홀수가 되도록 조정하는 방식으로 동작합니다.

📌 짝수 패리티(Even Parity)

  • 데이터 비트에서 "1"의 개수가 짝수(2, 4, 6, …)가 되도록 패리티 비트를 설정
  • "1"의 개수가 홀수일 경우 패리티 비트를 1로 설정하여 짝수로 맞춤
  • 예제: Data Bits: 01000001 (1의 개수 = 2) → Parity Bit = 0

📌 홀수 패리티(Odd Parity)

  • 데이터 비트에서 "1"의 개수가 홀수(1, 3, 5, …)가 되도록 패리티 비트를 설정
  • "1"의 개수가 짝수일 경우 패리티 비트를 1로 설정하여 홀수로 맞춤
  • 예제: Data Bits: 01000001 (1의 개수 = 2) → Parity Bit = 1

✅ 패리티 비트가 필요한 이유

  • 데이터 전송 중 오류(비트 변형, 노이즈 등) 감지 가능
  • 하드웨어적으로 간단하게 구현 가능 (복잡한 오류 검출 알고리즘 없이 감지 가능)
  • BUT, 오류를 수정할 수는 없음 (단순 검출만 가능)

📌 패리티 비트는 오류를 감지하는 데 사용되지만, 실제 데이터가 손상되었을 경우 수정할 수 없으므로 CRC(Cyclic Redundancy Check)나 ECC(Error Correction Code) 같은 추가적인 오류 검출 및 수정 기법이 필요할 수 있습니다.


📌 요약

Start Bit → 데이터 전송의 시작을 알리는 신호 (항상 0)
Data Bits → 실제 전송되는 데이터 (5~9비트, 보통 8비트 사용)
Parity Bit → 오류 검출을 위한 선택적 비트 (Even Parity / Odd Parity)
Stop Bit → 데이터 전송이 종료되었음을 알리는 신호 (항상 1, 보통 1비트 사용)