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-13 12:35] 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 333: | Line 341: | ||
**TODO** | **TODO** | ||
- | === Link layter | + | === Link layer === |
| 3: | | 3: | ||
| 3: | | 3: | ||
| 3: | | 3: | ||
| 3: | | 3: |