본문 바로가기
  • Masacorgi 's Dev Bloggg
TIL/Embedded

[임베디드] UART 실전 시리얼 패킷 분석

by masacorgi 2025. 5. 25.


이번에는 우리가 실제로 다루는 센서 → MCU → 시리얼 → PC 흐름에서

어떤 데이터가 어떻게 구조화되어 전송되는지를 분석하는 단계를 정리해보았다.


1. 시리얼 패킷이란?

UART로 데이터를 보낼 때, 한 줄씩 단순 문자만 보내는 경우도 있지만
센서 장치나 펌웨어에서는 보통 **정해진 규칙(=패킷 구조)**에 따라 전송돼.


1.1 UART 패킷 기본 구조 예시

다음은 흔히 쓰이는 시리얼 패킷 포맷이야:

[Header] + [Command] + [Data Length] + [Data] + [Checksum]

1.1.1 구성 설명:

필드명 역할

Header 시작 표시 (예: 0xAA 0x55)
Command 명령 코드 (예: READ_TEMP = 0x01)
Data Length 데이터 길이
Data 실제 센서값 등
Checksum 오류 검출 (단순 XOR, SUM 등)

1.2 예제: 온습도 센서 패킷 분석

센서에서 이런 패킷을 보냈다고 가정해보자:

0xAA 0x55  0x01  0x02  0x1C 0x64  0x83

바이트 설명

0xAA 0x55 시작 헤더
0x01 명령어: 온습도 요청 응답
0x02 데이터 길이 = 2바이트
0x1C 온도 (섭씨 28도 = 0x1C)
0x64 습도 (100% = 0x64)
0x83 Checksum (XOR 또는 총합)

→ 이 데이터를 해석하면:
온도: 28°C / 습도: 100%


1.3 실제 분석 도구 예시

1.3.1 Arduino + Serial Monitor

if (Serial.available()) {
  byte header1 = Serial.read();
  if (header1 == 0xAA && Serial.read() == 0x55) {
    byte cmd = Serial.read();
    byte len = Serial.read();
    byte temp = Serial.read();
    byte humid = Serial.read();
    byte checksum = Serial.read();
    
    // 간단한 XOR 체크
    if ((cmd ^ len ^ temp ^ humid) == checksum) {
      Serial.print("Temp: "); Serial.println(temp);
      Serial.print("Humid: "); Serial.println(humid);
    }
  }
}

 

 

 

 

 

시리얼 통신은 단순히 문자열을 왔다갔다 하는 게 아니다.
정해진 패킷 구조를 이해하고 해석하는 능력이 있으면,
펌웨어가 어떤 데이터를 다루는지, 센서 응답이 정상인지 알 수 있다.

→ 이 능력은 앞으로 펌웨어 디버깅, 패킷 분석, 서버 연동 로직 설계 전부에 핵심이 된다.

 

1.5 참고자료