CODING CAR / Protocol / Intro

Modified : 2021.6.29



1. CODING CAR 소개

CODING CAR은 코딩 교육용 자동차 로봇입니다.




2. 시리얼 통신

2.1. 전송 데이터 구조

CODING CAR를 USB와 연결해서 통신하는 경우 송수신 데이터의 구조는 아래와 같습니다.

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



2.2. 사용 시 주의사항

  • 모든 장치는 데이터를 요청했을 경우에만 관련된 데이터를 응답으로 전송합니다.

  • 데이터를 수신받는 장치를 지정한 경우, 해당 장치는 데이터를 요청받은 경우가 아니라면 Ack를 응답으로 보냅니다.

  • Broadcasting으로 데이터를 전송한 경우, 데이터 요청이 아닌 일반적인 명령이었다면 해당 명령을 처리할 수 있는 장치는 받은 명령을 실행합니다.

  • Broadcasting으로 데이터를 전송한 경우, 데이터 요청을 전달하였다면 해당 데이터에 대해 응답을 할 수 있는 장치가 응답을 합니다. 이 과정에서 두 개 이상의 장치가 같은 데이터에 대해 응답이 가능하다면 데이터 송수신 간에 충돌이 발생할 수 있습니다. 사용 시 주의하셔야 합니다.

  • Broadcasting에 대해서는 Ack를 응답으로 보내지 않습니다.



2.3. 시리얼 통신 설정

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



2.4. 드라이버 설치

CODING CAR는 USB로 PC와 연결할 때 윈도우10인 경우 자동으로 인식합니다. 그 외에 장치를 인식하지 못하는 경우 별도의 드라이버를 설치하셔야 합니다.




3. Bluetooth Low Energy(Bluetooth SMART)

CODING CAR는 무선 연결에 Bluetooth Low Energy(이하 BLE)를 사용합니다.
CODING CAR에서 사용하는 ServiceCharacteristic은 다음과 같습니다.


Service Characteristic UUID 데이터 이동 방향
DRONE_SERVICE   C320DF00-7891-11E5-8BCF-FEFF819CDC9F  
DRONE_DATA C320DF01-7891-11E5-8BCF-FEFF819CDC9F 자동차 → 앱 (Notify)
DRONE_CONF C320DF02-7891-11E5-8BCF-FEFF819CDC9F 앱 → 자동차 (Write)



3.1. 전송 데이터 구조

0
1
2
3
...
N-1
N
Header
Data
DataType
Length
From
To
-
-
-
-
-
-
-


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


영역
설명
Header
DataType
데이터의 형식
Length
데이터의 길이
From
데이터를 전송하는 장치의 DeviceType
To
데이터를 수신 받는 장치의 DeviceType
Data
전송할 데이터

전체 길이는 최대 20byte 이하로만 사용 가능합니다.



3.2. 데이터 송수신 규칙

  • 데이터를 전송하는 주기는 Android인 경우 50ms, iOS인 경우 100ms를 권장
  • CODING CAR에 데이터를 요청한 경우엔 요청한 데이터를 응답으로 보냄. 이외의 경우에는 Ack를 응답. Control 명령은 Ack 및 어떤 응답도 보내지 않음
  • 에서 CODING CAR에 명령 시에는 DRONE_CONF에 전달할 데이터를 Write
  • CODING CAR으로 데이터를 보내는 경우엔 DRONE_DATANotify를 전송





CODING CAR

  1. Intro
  2. Typedef
  3. DataType
  4. Definitions
  5. Structs
  6. Structs - Light
  7. Structs - Card


Index