# 프로토콜

{% hint style="info" %}
이 페이지와 하위 페이지의 내용은 CoDrone EDU 에 사용될 수 있는 프로토콜 안내입니다.
{% endhint %}

## 1. CoDrone EDU 소개

CoDrone EDU는 드론 대회 코딩 교육에 맞춰 개발된 드론입니다.

## 2. 전송 데이터 구조

CoDrone EDU는 외부 장치와 통신 할 경우, 주로 조종기를 PC와 연결한 상태에서 시리얼 통신을 하게 됩니다.이 때 송수신 데이터의 구조는 아래와 같습니다.

|      0     |      1     |     2    |    3   |    4   |    5   |   …  |  N-1  |   N   |
| :--------: | :--------: | :------: | :----: | :----: | :----: | :--: | :---: | :---: |
| Start Code | Start Code |  Header  | Header | Header | Header | Data | CRC16 | CRC16 |
| Start Code | Start Code | DataType | Length |  From  |   To   | Data | CRC16 | CRC16 |
|    0x0A    |    0X55    |     -    |    -   |    -   |    -   |   -  |   -   |   -   |

각 항목에 대한 설명은 다음과 같습니다.

| 영역                 | 설명                                                                                                                                 |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| Start Code         | 데이터 전송 시작을 알림                                                                                                                      |
| Header -  DataType | 데이터의 형식                                                                                                                            |
| Header -  Length   | 데이터의 길이                                                                                                                            |
| Header -  From     | 데이터를 전송하는 장치의 DeviceType                                                                                                           |
| Header -  To       | 데이터를 수신 는 장치의 DeviceType                                                                                                           |
| Data               | 전송할 데이터                                                                                                                            |
| CRC16              | Header와 Data가 정상적으로 전달되었는지 판별 [http://www.menie.org/georges/embedded/crc16.html](http://www.menie.org/georges/embedded/crc16.html) |

Data 영역과 CRC16 영역 모두 Little Endian을 사용하고 있습니다. Little Endian일 때 2바이트 이상의 변수는 하위 바이트가 배열의 앞 부분에 위치합니다. C#에서는 Bitconverter를 사용하시면 편리하게 변경할 수 있습니다.

| 16진수          | 0X1234 | 0X1234 |
| ------------- | ------ | ------ |
| 배열의 인덱        | 0      | 1      |
| Big Endian    | 12     | 34     |
| Little Endian | 34     | 12     |

| 16진수          | 0x12345678 | 0x12345678 | 0x12345678 | 0x12345678 |
| ------------- | ---------- | ---------- | ---------- | ---------- |
| 배열의 인덱        | 0          | 1          | 2          | 3          |
| Big Endian    | 12         | 34         | 56         | 78         |
| Little Endian | 78         | 56         | 34         | 12         |

## 3. 사용 시 주의사항

* 모든 장치는 데이터를 요청했을 경우에만 관련된 데이터를 응답으로 전송합니다.
* 데이터를 수신받는 장치를 지정한 경우, 해당 장치는 데이터를 요청받은 경우가 아니라면 Ack를 응답으로 보냅니다.
* Broadcasting으로 데이터를 전송한 경우, 데이터 요청이 아닌 일반적인 명령이었다면 해당 명령을 처리할 수 있는 장치는 받은 명령을 실행합니다.
* Broadcasting으로 데이터를 전송한 경우, 데이터 요청을 전달하였다면 해당 데이터에 대해 응답을 할 수 있는 장치가 응답을 합니다. 이 과정에서 두 개 이상의 장치가 같은 데이터에 대해 응답이 가능하다면 데이터 송수신 간에 충돌이 발생할 수 있습니다. 사용 시 주의하셔야 합니다.
* Broadcasting에 대해서는 Ack를 응답으로 보내지 않습니다.



## 4. 시리얼 통신 설정

| 영역        | 설정    |
| --------- | ----- |
| Baud Rate | 57600 |
| Parity    | None  |
| Data Bits | 8     |
| Stop Bits | 1     |

## 5. 드라이버 설치

CoDrone EDU 조종기는 윈도우10인 경우 자동으로 인식합니다. 그 외에 장치를 인식하지 못하는 경우, 별도의 드라이버를 설치하셔야 합니다. (Win 7/8 : 수동 설치 필요, Win 10/osx : 자동인식)

* [Win 32bit 다운로드](http://robolink.ipdisk.co.kr/publist/HDD1/download/file/petrone_v2_usb_driver_32.zip)
* [Win 64bit 다운로드](http://robolink.ipdisk.co.kr/publist/HDD1/download/file/petrone_v2_usb_driver_64.zip)
* [설치 방법](http://robolink.ipdisk.co.kr/publist/HDD1/download/file/usbdriver_guide.pdf)
