Unterschiede zwischen den Revisionen 16 und 22 (über 6 Versionen hinweg)
Revision 16 vom 20.11.2008 22:10
Größe: 1732
Autor: ligi
Kommentar: right toc
Revision 22 vom 23.11.2008 14:34
Größe: 2179
Autor: ligi
Kommentar: moving links sections to bottom
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 4: Zeile 4:
 The protocol is based on individual serial data frames that are organized as shown in the following table.
 ||<tablewidth="690px" tableheight="43px" tablestyle="text-align: center;"bgcolor="#cccccc">'''''Start-Byte''''''''''''''''''''''' ||<bgcolor="#cccccc">'''''Address-Byte''''''''''''''''''''''' ||<bgcolor="#cccccc">'''''ID-Byte''''''''''''''''''''''' ||<bgcolor="#cccccc">'''''n Data-Bytes coded ''''''''''''''''''''''' ||<bgcolor="#cccccc">'''''CRC-Byte1''''''''''''''''''''''' ||<bgcolor="#cccccc">'''''CRC-Byte2''''''''''''''''''''''' ||<bgcolor="#cccccc">'''''Stop-Byte''''' ||
 ||<style="text-align: center;">'#' ||<style="text-align: center;">variable ||<style="text-align: center;">V,D etc ||<style="text-align: center;">"modified-base64" ||<style="text-align: center;">variable ||<style="text-align: center;">variable ||<style="text-align: center;">'\r' ||
 . The protocol is based on individual serial data frames that are organized as shown in the following table.
Zeile 8: Zeile 6:
||<tablewidth="690px" tableheight="43px" tablestyle="text-align: center;"bgcolor="#cccccc">Start-Byte||<bgcolor="#cccccc">Address-Byte||<bgcolor="#cccccc">ID-Byte||<bgcolor="#cccccc">n Data-Bytes coded||<bgcolor="#cccccc">CRC-Byte1||<bgcolor="#cccccc">CRC-Byte2||<bgcolor="#cccccc">Stop-Byte||
||<style="text-align: center;">'#' ||<style="text-align: center;">variable ||<style="text-align: center;">'V','D' etc ||<style="text-align: center;">"modified-base64" ||<style="text-align: center;">variable ||<style="text-align: center;">variable ||<style="text-align: center;">'\r' ||
Zeile 13: Zeile 12:
 ||<tablewidth="" tablestyle="text-align: center;"bgcolor="#cccccc"> '''''Slave-Address''''''''''''''''''''''' ||<bgcolor="#cccccc"> '''''Part''''' ||
 ||<style="text-align: center;"> 1 ||<style="text-align: center;"> FC ||
 ||<style="text-align: center;"> 2 ||<style="text-align: center;"> NC ||
 ||<style="text-align: center;"> 3 ||<style="text-align: center;"> MK3MAG ||
||<tablewidth="" tablestyle="text-align: center;"bgcolor="#cccccc">Slave-Address||<bgcolor="#cccccc">Part||
||<style="text-align: center;"> 1 ||<style="text-align: center;"> FC ||
||<style="text-align: center;"> 2 ||<style="text-align: center;"> NC ||
||<style="text-align: center;"> 3 ||<style="text-align: center;"> MK3MAG ||
Zeile 18: Zeile 17:
 Have a look into the Functions Decode64 and !SendOutData in uart.c of the FC Firmware to see how the Data is encoded and decoded.
Zeile 20: Zeile 20:
 . /!\ ToDo: describe checksum calculation  || unsigned int tmpCRC = 0; [[BR]] for(int i = 0; i < !DataBufferLength;i++)[[BR]] { tmpCRC += !DataBuffer[i]; } [[BR]] tmpCRC %= 4096; [[BR]] CRC1 = '=' + tmpCRC / 64; [[BR]] CRC2 = '=' + tmpCRC % 64;[[BR]] ||

 . /!\ ToDo: describe checksum calculation verbaly
= Implementations =
 Sometimes its a lot more easy to look at code rather than reather than to look at Specifications/Documentation:
 * uart.c in the Flight-Ctrl Firmware ( C )
 * MKCommunicator.java from ["DUBwise"] ( Java / J2ME )
 * mktool.cpp @ ["QMKGroundStation"] ( C++ )
 * !GroundStation ( !LabView )
Zeile 23: Zeile 32:

TableOfContents

Protocol

  • The protocol is based on individual serial data frames that are organized as shown in the following table.

Start-Byte

Address-Byte

ID-Byte

n Data-Bytes coded

CRC-Byte1

CRC-Byte2

Stop-Byte

'#'

variable

'V','D' etc

"modified-base64"

variable

variable

'\r'

Commands

  • The Commands based on the dataframes above are listed [:en/SerialCommands:here]

Slave Adresses

  • Since Navi 0.12h FC 0.71f Mag 0.19 there are constant SlaveAdresses:

Slave-Address

Part

1

FC

2

NC

3

MK3MAG

Data Format

  • Have a look into the Functions Decode64 and SendOutData in uart.c of the FC Firmware to see how the Data is encoded and decoded.

  • /!\ ToDo: describe data-format

Checksum

  • unsigned int tmpCRC = 0; BR for(int i = 0; i < DataBufferLength;i++)BR { tmpCRC += DataBuffer[i]; } BR tmpCRC %= 4096; BR CRC1 = '=' + tmpCRC / 64; BR CRC2 = '=' + tmpCRC % 64;BR

  • /!\ ToDo: describe checksum calculation verbaly

Implementations

  • Sometimes its a lot more easy to look at code rather than reather than to look at Specifications/Documentation:
  • uart.c in the Flight-Ctrl Firmware ( C )
  • MKCommunicator.java from ["DUBwise"] ( Java / J2ME )
  • mktool.cpp @ ["QMKGroundStation"] ( C++ )
  • GroundStation ( LabView )

Links