This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
projects:crazyflie:firmware:comm_protocol [2012-08-12 19:19] macke |
projects:crazyflie:firmware:comm_protocol [2013-07-11 18:03] arnaud [Overview] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Overview ====== | ====== Overview ====== | ||
- | ===== CRTP ===== | + | CRTP is the protocol used to communicate |
- | The CRTP (Crazy RealTime Protocol) | + | |
- | * [[comm_protocol# | + | CRTP is implemented in 3 layers: |
- | | + | |
- | | + | < |
- | * ... | + | |
+ | | ||
+ | | ||
+ | | CRTP packets handling | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | * **CRTP Link** is responsible for transferring the packets between the copter and the PC. It will typically handles packet size and error detection. | ||
+ | * **CRTP Packet handling** delivers the packet to the right subsystem in the copter and in the PC control software. | ||
+ | * **Application/ | ||
+ | |||
+ | Implemented link drivers: | ||
+ | ^ **Link** | ||
+ | | [[comm_protocol# | ||
+ | | [[comm_protocol# | ||
+ | | [[comm_protocol# | ||
+ | |||
+ | Current port allocation: | ||
+ | ^ **Port** | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
====== Communication ====== | ====== Communication ====== | ||
Line 13: | Line 39: | ||
7 | 7 | ||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | ||
- | | R | | + | | |
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | ||
| DATA 0 | | | DATA 0 | | ||
Line 21: | Line 47: | ||
| DATA 30 | | | DATA 30 | | ||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | ||
+ | |||
</ | </ | ||
^ **Field** ^ **Byte** ^ **Bit** ^ | ^ **Field** ^ **Byte** ^ **Bit** ^ | ||
- | | | + | | |
- | | ::: | | + | | ::: | |
- | | ::: | | + | | ::: | |
| Data | | Data | ||
Line 34: | Line 61: | ||
==== 2.4 GHz NordicSemi Radio ==== | ==== 2.4 GHz NordicSemi Radio ==== | ||
- | The wireless interface will add additional header data like CRC when sending the packet and therefore the packet sent to the wireless interface is only a CRTP packet. | + | The wireless interface will add additional header data like CRC when sending the packet and therefore the packet sent to the wireless interface is only a CRTP packet |
==== USB port ==== | ==== USB port ==== | ||
Line 40: | Line 67: | ||
==== Serial port ==== | ==== Serial port ==== | ||
+ | The serial port is configured in 115200 8N1. CRTP packets are sent and received asynchronously using the following packet format: | ||
+ | |||
< | < | ||
7 | 7 | ||
Line 47: | Line 76: | ||
| | | | ||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | ||
- | | R | | + | | |
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | ||
| | | | ||
Line 57: | Line 86: | ||
| DATA 30 | | | DATA 30 | | ||
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | ||
- | | | + | | |
+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+ | ||
+ | |||
+ | +--------+--------+--------+--------+--------+--....--+--------+ | ||
+ | | 0xAA | 0xAA | Header | Length | Data0 | Packet | Cksum | | ||
+ | +--------+--------+--------+--------+--------+--....--+--------+ | ||
+ | |||
</ | </ | ||
^ **Field** ^ **Byte** ^ **Bit** ^ | ^ **Field** ^ **Byte** ^ **Bit** ^ | ||
| | | | ||
- | | | + | | |
- | | ::: | | + | | ::: | |
- | | ::: | | + | | ::: | |
- | | Size | + | | Size |
- | | Data | + | | Data |
- | | | + | | Cksum | |
- | ===== Ports ===== | + | === Examples |
- | The following ports are used during | + | To send setpoints to the [[projects: |
- | ^ | + | < |
- | | [[comm_protocol# | + | 0xaa 0xaa 0x30 0x0e 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x3e |
- | | | + | </ |
- | | | + | |
- | | | + | |
- | | | + | |
- | + | ||
- | ==== Console ==== | + | |
- | This port is used as a one-way text console. Printouts using printf will be sent on this port and can be read by a receiver if connected. | + | |
+ | To ping Crazyflie: | ||
< | < | ||
- | | + | |
- | +---+---+---+---+---+---+---+---+ | + | <- 0xaa 0xaa 0xf0 0x01 0x01 0xf2 # Received from the copter |
- | | CHAR 0 | | + | |
- | +---+---+---+---+---+---+---+---+ | + | |
- | : | + | |
- | +---+---+---+---+---+---+---+---+ | + | |
- | | CHAR 30 | | + | |
- | +---+---+---+---+---+---+---+---+ | + | |
</ | </ | ||
- | + | ===== Ports ===== | |
- | The contents of the buffer on the copter side is sent if any of the following is fulfulled: | + | |
- | * The output buffer (of 31 bytes) is full | + | |
- | * A " | + | |
- | * A flush command as been issued | + | |
==== Logging ==== | ==== Logging ==== | ||
Line 116: | Line 135: | ||
The following messages are sent from the Client to the Crazyflie: | The following messages are sent from the Client to the Crazyflie: | ||
- | ^ **Command byte** ^ **Description** | + | ^ **Request for** ^ **Byte** ^ **Description** |
- | | | + | | TOC item | 0 | 0x00 to identify |
- | | | + | | ::: | 1 | The index of the TOC item to request. This is optional, if the index is omitted the first item of the TOC will be returned |
- | | 3 | + | | TOC CRC and count | 0 | Request the TOC CRC and item count | |
The following messages are sent from the Crazyflie to the Client: | The following messages are sent from the Crazyflie to the Client: | ||
- | ^ **Command byte** ^ **Byte** | + | ^ **Reply for** ^ **Byte** |
- | | 0 or 1 | | + | | TOC item | |
- | | ::: | + | | ::: |
- | | ::: | + | | ::: |
- | | ::: | + | | ::: |
+ | | ::: | ||
| ::: | | ::: | ||
- | | 3 | + | | TOC CRC and count |
| ::: | | ::: | ||
| ::: | | ::: | ||
- | |||
- | < | ||
- | Bytes | ||
- | +---+------------+------+----------+--------------+ | ||
- | | 0 | | | | | | ||
- | +---+ Var ID | Type | Group | ||
- | | 1 | | | | | | ||
- | +---+------------+------+---+------+--------------+ | ||
- | | 3 | Num. Vars | CRC32 | | ||
- | +---+------------+----------+ | ||
- | Bytes | ||
- | </ | ||
== Usage == | == Usage == | ||
Line 158: | Line 166: | ||
| | ||
| | ||
- | Reset TOC pointer | + | Request for TOC item ---> |
- | Get next element | + | with ID omitted |
- | | + | < |
- | | + | Request for TOC item ---> |
- | | + | |
- | Get next element | + | |
- | | + | |
- | Get next element | + | Request for TOC item ---> |
- | < | + | |
[Fetch complete] | [Fetch complete] | ||
</ | </ | ||
Line 174: | Line 182: | ||
== Messages == | == Messages == | ||
The following messages are sent from the Client to the Crazyflie: | The following messages are sent from the Client to the Crazyflie: | ||
- | ^ **Command byte** ^ **Byte** | + | ^ **Request for** ^ **Byte** |
- | | 0 | + | | |
| ::: | | ::: | ||
- | | ::: | + | | ::: |
| ::: | | ::: | ||
- | | 1 | + | | |
| ::: | | ::: | ||
| ::: | | ::: | ||
- | | 2 | + | | |
| ::: | | ::: | ||
- | | 3 | + | | |
| ::: | | ::: | ||
- | | 4 | + | | |
| ::: | | ::: | ||
Line 255: | Line 263: | ||
Adding a new log block to the settings: | Adding a new log block to the settings: | ||
< | < | ||
- | Insert fancy ASCII graphics | + | |
+ | | ||
+ | Add log packet | ||
+ | < | ||
+ | [DONE] | ||
+ | |||
+ | Packet structure: | ||
+ | Computer | ||
+ | CF -> Computer : 0x[5,1] 0x00 0x55 0x00 | ||
</ | </ | ||
Deleting an existing log block from the settings: | Deleting an existing log block from the settings: | ||
< | < | ||
- | Insert fancy ASCII graphics | + | |
+ | | ||
+ | Delete log packet | ||
+ | < | ||
+ | [DONE] | ||
+ | |||
+ | Packet structure: | ||
+ | Computer | ||
+ | CF -> Computer : 0x[5,1] 0x02 0x55 0x00 | ||
</ | </ | ||
=== Log data access === | === Log data access === | ||
- | **TODO** | + | Logging data is sent back to the copter as raw data with only the block id. This means that the lookup of what data is for what variable has to be done on the computer side. |
+ | |||
+ | < | ||
+ | Adding a log block logging variable ID 0x55 at 100ms interval and of type uint16: | ||
+ | Computer -> CF : 0x[5,1] 0x00 0x01 0x0A 0x02 0x55 | ||
+ | CF -> Computer : 0x[5,1] 0x00 0x55 0x00 | ||
+ | |||
+ | Receiving a log block logging variable (value 0xBABE): | ||
+ | CF -> Computer : 0x[5,2] 0x55 0xBA 0xBE | ||
+ | </ | ||
==== Parameters ==== | ==== Parameters ==== | ||
Line 308: | Line 341: | ||
**TODO** | **TODO** | ||
- | === Link layter | + | === Link layer === |
| 3: | | 3: | ||
| 3: | | 3: | ||
| 3: | | 3: | ||
| 3: | | 3: |