그라운드 임베디드 EN 유튜브 구독

노트 / 통신 프로토콜

프로토콜 설계: 나만의 통신 규칙 만들기

헤더, 길이, 명령, 데이터, CRC. 바이트 흐름에서 패킷을 안정적으로 잘라 내는 통신 규칙을 설계합니다.

GROUND EMBEDDED · 정리 노트통신 12프로토콜 설계필드크기역할시작 바이트1~2패킷 시작 표시 (예: …길이1뒤따르는 데이터 길이

UART나 BLE는 바이트를 흘려 줄 뿐 "어디서부터 어디까지가 한 메시지인지"는 알려 주지 않습니다. 그 규칙을 정하는 것이 프로토콜 설계입니다.

기본 패킷 구조

시작0xAA 0x55길이명령데이터N바이트CRC2바이트
직접 만드는 패킷의 기본 모양. 길이와 CRC가 있어야 바이트 흐름에서 패킷을 잘라 낼 수 있습니다.
필드 크기 역할
시작 바이트 1~2 패킷 시작 표시 (예: 0xAA 0x55)
길이 1 뒤따르는 데이터 길이
명령 / ID 1 무슨 메시지인가
데이터 N 내용
CRC 2 깨졌는지 확인

수신 파서는 상태 머신으로

시작 바이트 기다림길이 읽기데이터 모으기CRC 확인처리
수신 파서의 상태. 어느 단계에서든 값이 이상하면 처음으로 돌아가 시작 바이트를 다시 찾습니다.

시작 바이트 대기 → 길이 → 명령 → 데이터 N개 → CRC 확인. 중간에 이상한 값이 오면 처음으로 돌아갑니다. 바이트 사이 시간이 너무 길면 타임아웃으로 초기화합니다.

설계 체크리스트

  • 엔디언: 다바이트 값의 바이트 순서를 문서에 명시 (보통 리틀 엔디언)
  • 재전송: 중요한 명령은 응답(ACK)을 받고, 일정 시간 안에 없으면 다시 보냄. 순번을 붙여 중복 실행을 막음
  • 버전 필드: 나중에 포맷을 바꿔도 호환되게
  • 바이트 스터핑: 데이터 안에 시작 바이트가 나와도 혼동하지 않게 하려면 COBS나 SLIP 같은 인코딩 사용
  • 구조체를 그대로 보내지 않기: 패딩과 엔디언 문제 (C 언어 구조체 노트 참고)

새로 만들기 전에 Modbus, MAVLink, CANopen처럼 이미 검증된 프로토콜이 맞는지 먼저 봅니다.

영상으로 이어 보기통신 시리즈 13편UART 통신 완벽정리 | 전기전자, 전자과, 임베디드 개발자 필수 시청PROJECT COURSEI2C로 MPU6050을, UART로 블루투스 모듈을 직접 붙여 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →