[XMODEM] 프로토콜 정리

2023. 1. 24. 20:322018년 이전 관심사/통신프로토콜

반응형

XMODEM 이란?

바이너리 데이터 전송을 하기 위한 프로토콜입니다. 최초의 Xmodem 프로토콜은 최대 128bytes의 데이터만 보낼 수 있어, Ymodem, Zmodem 등의 개량판이 있었습니다.

 

최근 Xmodem은 모드를 선택해서 128bytes의 데이터를 사용 할지 1KBytes의 데이터를 사용할지 선택 할 수 있습니다.

 

XMODEM 기본 Protocol Byte

시리얼 통신에서 일반적으로 사용하는 통신 제어 문자를 사용 합니다.

각 문자 별 특징은 아래와 같습니다.

  • SOH, Start Of Header ( 0x01 )
    • 메시지의 시작을 의미 함
    • XMODEM 128 모드에서 사
  • STX, Start Of Text ( 0x02 )
    • 본문 시작, 헤더 종료
    • XMODEM 1K 모드에서 사용
  • EOT, End Of Transmission ( 0x03 )
    • 전송 종료, 데이터 링크 초기화
  • ACK, Acknowledge ( 0x06 )
    • 긍정 응답
  • DLE, Data Link Escape ( 0x10 )
    • 데이터 전송 중단
  • NAK, Negative Acknowledge ( 0x15 )
    • 부정 응답
  • CAN, Cancel ( 0x18 )
    • 취소

 

XMODEM 1K

패킷 구조

XMODEM 1K의 패킷 구조는 아래와 같습니다.

STX
(1Byte)
Packet Number
(1Byte)
~(Packet Number)
(1Byte)
Data
(1024 Bytes)
CRC
(2Bytes)
0x02 0x01 0xFE XXXXXXX 0xXXXX

 

흐름도

RECEIVER는 SENDER가 첫 메시지를 보낼 때까지 C(0x43)를 주기적으로 송신합니다.

NAK(0x15)를 수신한 SENDER는 위 메시지 포맷으로 Data를 포함하여 메시지를 보내고, RECEIVER로 부터 ACK 수신을 기대 합니다. 혹 NAK를 수신 시, 특정 횟수 만큼 메시지를 재 전송 합니다.

ACK를 수신하면, Packet Number를 1증가 시키고 다음 Data를 포함하여 메시지를 보내고 ACK 수신을 기다립니다.

 

마지막 데이터를 송신 할 때는 아래 로직을 따릅니다.

  • 마지막 송신할 데이터가 1024 보다 작은 경우 남은 사이즈만큼 지정된 패딩 데이터로 채웁니다.
  • 예를 들어 마지막 남은 데이터가 1000 Bytes이며 지정된 패딩 값이 0xAA인 경우, 아래 그림의 CPMEOF에 0xAA를 채워서 메시지를 보냅니다.

 

XMODEM 128 bytes

패킷 구조

XMODEM 128의 패킷 구조 및 메시지 흐름은 아래 그림과 같습니다.

SOH
(1Byte)
Packet Number
(1Byte)
~(Packet Number)
(1Byte)
Data
(128Bytes)
Check Sum
(1Bytes)
0x01 0x01 0xFE XXXXXXXXX 0xXX

흐름도

RECEIVER는 SENDER가 첫 메시지를 보낼 때까지 NAK(0x15)를 주기적으로 송신합니다.

나머지 흐름은 위 XMODEM 1K와 동일 합니다. 단 이때는 CRC 대신 Check Sum을 사용하여 메시지 유효성 검사를 수행 합니다.

 

 

Mixed 1024 & 128

패킷 구조

SOH or STX
(1Byte)
Packet Number
(1Byte)
~(Packet Number)
(1Byte)
Data
(1024 Bytes)
CRC
(2Bytes)
0x01 or 0x02 0x01 0xFE XXXXXXX 0xXXXX

 

흐름도

데이터 사이즈를 1024 & 128을 선택해서 사용할 수 있는 모드도 지원 합니다.

추가로 테스트를 해 보면, Teraterm이나 일반적으로 XModem 프로토콜을 사용하는 Tool에서는 Mixed Mode를 사용하여 XMODEM 128를 지원 하는 것으로 보입니다.

 

 

 

참고 자료

https://ko.wikipedia.org/wiki/%EC%A0%9C%EC%96%B4_%EB%AC%B8%EC%9E%90

 

 

반응형