CodingDrone / Protocol / Intro
Modified : 2024.6.19
1. CodingDrone 소개
CodingDrone은 코딩 교육에 맞추어 개발된 드론입니다.
2. 전송 데이터 구조
CodingDrone은 외부 장치와 통신할 경우, 주로 조종기를 PC와 연결한 상태에서 시리얼 통신을 하게 됩니다. 이 때 송수신 데이터의 구조는 아래와 같습니다.
0 |
1 |
2 |
3 |
4 |
5 |
... |
N-1 |
N |
Start code |
Header |
Data |
CRC16 |
|||||
DataType |
Length |
From |
To |
|||||
0x0A |
0x55 |
- |
- |
- |
- |
- |
- |
- |
각 항목에 대한 설명은 다음과 같습니다.
영역 |
설명 |
|
Start code |
데이터 전송 시작을 알림 |
|
Header |
DataType |
데이터의 형식 |
Length |
데이터의 길이 |
|
From |
데이터를 전송하는 장치의 DeviceType |
|
To |
데이터를 수신 받는 장치의 DeviceType |
|
Data |
전송할 데이터 |
|
CRC16 |
Header와 Data가 정상적으로 전달되었는지 판별 http://www.menie.org/georges/embedded/crc16.html |
Data 영역과 CRC16 영역 모두 Little Endian을 사용하고 있습니다. Little Endian일 때 2바이트 이상의 변수는 하위 바이트가 배열의 앞 부분에 위치합니다. C#에서는 Bitconverter를 사용하시면 편리하게 변경할 수 있습니다.
16진수 값 |
0x1234 |
|
배열의 인덱스 |
0 |
1 |
Big Endian |
12 |
34 |
Little Endian |
34 |
12 |
16진수 값 |
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. 드라이버 설치
CodingDrone 조종기는 윈도우10인 경우 자동으로 인식합니다. 그 외에 장치를 인식하지 못하는 경우 별도의 드라이버를 설치하셔야 합니다.