프로토콜 설계: 나만의 통신 규칙 만들기
헤더, 길이, 명령, 데이터, CRC. 바이트 흐름에서 패킷을 안정적으로 잘라 내는 통신 규칙을 설계합니다.
UART나 BLE는 바이트를 흘려 줄 뿐 "어디서부터 어디까지가 한 메시지인지"는 알려 주지 않습니다. 그 규칙을 정하는 것이 프로토콜 설계입니다.
기본 패킷 구조
| 필드 | 크기 | 역할 |
|---|---|---|
| 시작 바이트 | 1~2 | 패킷 시작 표시 (예: 0xAA 0x55) |
| 길이 | 1 | 뒤따르는 데이터 길이 |
| 명령 / ID | 1 | 무슨 메시지인가 |
| 데이터 | N | 내용 |
| CRC | 2 | 깨졌는지 확인 |
수신 파서는 상태 머신으로
시작 바이트 대기 → 길이 → 명령 → 데이터 N개 → CRC 확인. 중간에 이상한 값이 오면 처음으로 돌아갑니다. 바이트 사이 시간이 너무 길면 타임아웃으로 초기화합니다.
설계 체크리스트
- 엔디언: 다바이트 값의 바이트 순서를 문서에 명시 (보통 리틀 엔디언)
- 재전송: 중요한 명령은 응답(ACK)을 받고, 일정 시간 안에 없으면 다시 보냄. 순번을 붙여 중복 실행을 막음
- 버전 필드: 나중에 포맷을 바꿔도 호환되게
- 바이트 스터핑: 데이터 안에 시작 바이트가 나와도 혼동하지 않게 하려면 COBS나 SLIP 같은 인코딩 사용
- 구조체를 그대로 보내지 않기: 패딩과 엔디언 문제 (C 언어 구조체 노트 참고)
새로 만들기 전에 Modbus, MAVLink, CANopen처럼 이미 검증된 프로토콜이 맞는지 먼저 봅니다.
연결된 개념
영상으로 이어 보기통신 시리즈 13편UART 통신 완벽정리 | 전기전자, 전자과, 임베디드 개발자 필수 시청PROJECT COURSEI2C로 MPU6050을, UART로 블루투스 모듈을 직접 붙여 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →