본문 바로가기
임베디드.일렉트로닉스

XMODEM 128 byte CRC16 개념정리, 코드예.

by i.got.it 2015. 8. 30.

 

 

개요.

 

XMODEM 128byte CRC16 은 시리얼 통신매체로 데이터 전송 패킷 및 프로토콜 규약.

송신측에서 1패킷 전송시 마다 수신측에서 오류점검하여 오류 발생시  재전송 요청하는 방식으로 작동된다.

 

 

 

 

 

 

XMODEM 128byte CRC16 패킷

 

 

패킷의 구성은 아래 처럼 간단하다. 1패킷의 총 길이는 133 byte 로 고정.

 

 Byte 1  Byte 2 

 Byte 3 

 Bytes 4 ~ 131   Bytes 132 ~ 133 

SOH, 1byte 

값: 0x01

 Packet Number, 1byte

값 : 0(0x01)~255(0xFF)

 ~Packet Number, 1byte

값 : Packet Number 반전값

 Data, 128 byte

 CRC16, 2byte

 

SOH : Start of Header. 0x01고정기록.

Packet Number : 매번의 패킷 전송시 +1,  첫전송시 1부터 시작하며, 255packet 전송이후는 0부터 시작한다.

~Packet Number : Packet Number 의 반전값. 상기 Packet Number 와 더하기 하면 항상 0xFF가 되어야 함.

Data : 전송할 전체 데이터를 128 byte 단위로 잘라서 Data 영역에 배치하여 전송. 

- 마지막 패킷에서는 Data 영역(Byte4~131) 의 뒷부분에 기록할 데이터 없는 영역은 모두 0x1A 로 채운다.

즉, 마지막 패킷에서 실데이터가 100바이트만 기록되는 상황에서는 나머지 28 바이트에는 0x1A 를 기록한다.

CRC16 : Cyclic Redundancy Check 16bit, Data 부분의 CRC16비트 계산값.  CRC 2바이트중 High Byte값이 Byte132 에 배치됨.

 

 

 

 

 

 

 

 

XMODEM 프로토콜.

 

 

프로토콜 flow control 에 사용되는 지정데이터.

Symbol 

Description 

Value 

 SOH

 Start of Header 

 0x01

 EOT

 End of Transmission

 0x04

 ACK

 Acknowlwdge 

 0x06

 NAK

 Not Acknowledge 

 0x15

 C

 전송개시. 수신측이 송신측에 전송하여 데이터 송신 시작시킴.

 0x43 

 

수신측이 NAK (0x15)를 송신측으로 보내는 경우.

1. Framing error on any byte.

2. OverRun error on any byte.

3. Duplicate packet.

4. CRC error.

5. Receiver timed out.(1초이내에 패킷을 받지 못한 경우)

 

 

첫패킷 전송 동기처리. 

수신측에서 송신측으로 0x43 (C의 ASCII 코드임.)을 전송하면 송신측에서 1패킷 133 바이트를 전송해야함. 이것이 수신측에서 동기 잡는 방식임.

수신측에서 0x43 전송후 3초이내에 데이터가 수신되지 않으면 0x43 을 또 보냄.

 

첫패킷 이후의 동기처리.

송신측에서 1패킷 전송된 것을 수신한 측에서 ACK(1패킷 정상수신된 경우) 혹은 NACK(1패킷 비정상인경우) 를 전송하고 이를 수신한 송신측에서 ACK 를 수신하면 다음 패킷을 전송하고, NACK를 수신한 경우 재전송하는 방식으로 패킷 데이터의 동기 처리 이뤄짐.

 

송신측에서 전송의 끝임을 알리는 방법과 XMODEM 프로토콜 종료처리하는 방법.

1. 송신측에서 마지막 패킷을 전송한 후 수신측에서 ACK를 보내며 이를 수신한 송신측에서는 EOT (0x04) 를 전송함.

2. 상기1의 EOT(0x04) 를 수신한 수신측은 ACK를 전송함.

3. 상기 ACK를 수신한 송신측은 또 EOT 를 전송함.

4. 상기 EOT 를 수신한 수신측은 ACK 를 전송하는 것으로 XMODEM 프로토콜이 종료됨.

 

XMODEM Data Flow 예.

 

아래 예는 송신측에서 5패킷의 데이터를 XMODEM 규격으로 전송하는 과정에 송신측과 수신측에서 이뤄지는 과정의 예를 보이고 있다.

 

 

 

 

 

 

 

 

 

 

XMODEM 코드 구현 예.

 

 상기의 패킷 규격과 프로토콜 기반으로 구현한다.

아래 참고자료중 3번, 4번 항목의 코드예가 많은 도움이 된다.

 

 

 

 

참고자료.

 

1.AVR350_XmodemCRC Receive Utility for AVR.pdf

 

2.AN_SPMC75_0109_en_V1.3.pdf

 

3. XMODEM 코드예 : http://www.opensource.apple.com/source/gdb/gdb-186.1/src/gdb/xmodem.c

 

4. XMODEM, CRC16  코드예 : http://www.menie.org/georges/embedded/

 

5. XMODEM, YMODEM 프로토콜 간략 : http://Cfile22.uf.tistory.com/

 

6. http://www.lima.com.tr/Documents/ENG/XModemEng.PDF

 

///428.

댓글



 

비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5