<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Robotfreak Blog &#187; Wireshark</title>
	<atom:link href="http://www.robotfreak.de/blog/tag/wireshark/feed" rel="self" type="application/rss+xml" />
	<link>http://www.robotfreak.de/blog</link>
	<description>Robotik, Elektronik, Arduino und mehr</description>
	<lastBuildDate>Mon, 23 Jan 2012 21:13:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Roomba RF Protokoll (Teil 2)</title>
		<link>http://www.robotfreak.de/blog/robotik/roomba-rf-protokoll-teil-2/328</link>
		<comments>http://www.robotfreak.de/blog/robotik/roomba-rf-protokoll-teil-2/328#comments</comments>
		<pubDate>Fri, 14 May 2010 13:03:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Robotik]]></category>
		<category><![CDATA[Roomba]]></category>
		<category><![CDATA[IEEE 802.15.4]]></category>
		<category><![CDATA[RF protocol]]></category>
		<category><![CDATA[wireless protocol]]></category>
		<category><![CDATA[Wireshark]]></category>

		<guid isPermaLink="false">http://www.robotfreak.de/blog/?p=328</guid>
		<description><![CDATA[Im zweiten Teil der Roomba RF Protokoll Reihe geht es um die Unterschiede im MAC Layer Protokoll. Unverst&#228;ndlicherweise wird beim Roomba nicht der IEEE 802.15.4 MAC Layer verwendet, sondern ein eigenes Protokoll, obwohl IEEE 802.15.4 ein Standard ist und lizens- und kostenfrei verwendet werden kann, im Gegensatz zum lizens- und kostenpflichtigen Zigbee Protokoll. Das unterschiedliche [...]]]></description>
			<content:encoded><![CDATA[<p>Im zweiten Teil der Roomba RF Protokoll Reihe geht es um die Unterschiede im MAC Layer Protokoll. Unverst&#228;ndlicherweise wird beim Roomba nicht der IEEE 802.15.4 MAC Layer verwendet, sondern ein eigenes Protokoll, obwohl IEEE 802.15.4 ein Standard ist und lizens- und kostenfrei verwendet werden kann, im Gegensatz zum lizens- und kostenpflichtigen Zigbee Protokoll.<br />
Das unterschiedliche MAC Layer Protokoll ist wahrscheinlich auch die Ursache daf&#252;r, das ich mit der Standard RZRAVEN Software keinen Erfolg beim Sniffen der Pakete hatte.<br />
<span id="more-328"></span></p>
<h2>Unterschiede im MAC Layer</h2>
<p>Die Protokolle sind zwar &#228;hnlich aber im Detail doch sehr unterschiedlich, was das Reengineering nicht gerade einfach macht.</p>
<h3>IEEE 802.15.4 MAC Layer Frame:</h3>
<p>IEEE 802.15.4 Pakete sind im Little Endian Format. (HIGH Byte wird vor dem LOW Bate gesendet). Jedes Byte wird mit LSB zuerst gesendet.</p>
<pre>
  |  FCF  |Seq No|  Addressing |         Data          |  FCS  |
  |2 bytes|1 byte|0 to 20 bytes|Length-(Overhead) bytes|2 Bytes|
 </pre>
<p>Hier findet man neben dem 2 Byte Frame Control Field (FCF) noch einen 1 Byte Frame Counter.</p>
<h3>Roomba MAC Layer Frame:</h3>
<pre>
  |  FCF  Seq No |  Addressing |         Data          |  FCS  |
  |2 bytes       |0 to xx bytes|Length-(Overhead) bytes|2 Bytes|
 </pre>
<p>Beim Roomba Protokoll gibt es nur den kombinierten 2 Byte Frame Header / Frame Counter. </p>
<p>Wenn man nun mit Wireshark oder einem anderen Paket-Sniffer die Roomba Frames encoden m&#246;chte, erh&#228;lt man lauter &#8216;unknown frame types&#8217; und &#8216;invalid address mode&#8217; Fehlermeldungen. Man m&#252;&#223;te seinen eigenen Dissector f&#252;r Wireshark schreiben oder das frame encoding abschalten.<br />
<img src='http://farm2.static.flickr.com/1233/4606477712_565eca2776.jpg' alt='wireshark-frame'/><br />
<img src='http://farm2.static.flickr.com/1053/4605862947_7e83922905.jpg' alt='wireshark-frame7'/></p>
<h2>Frame Checksumme FCS</h2>
<p>Zum Gl&#252;ck wird bei beiden MAC layer das selbe Format f&#252;r die Frame Checksumme (FCS) verwendet. In den Wireshark Quellen findet man die genauen Parameter und den Algorythmus zur Checksummen Erzeugung.</p>
<pre>
   CRC16 is calculated using the x^16 + x^12 + x^5 + 1 polynomial
   as specified by ITU-T, and is calculated over the IEEE 802.15.4
   packet (excluding the FCS) as transmitted over the air. Note,
   that because the least significan bits are transmitted first, this
   will require reversing the bit-order in each byte. Also, unlike
   most CRC algorithms, IEEE 802.15.4 uses an initial and final value
   of 0x0000, instead of 0xffff (which is used by the CCITT).
</pre>
<p>Klingt kompliziert, aber es ist l&#246;sbar. Mein C# Sniffer kann inzwischen auch die Checksumme erzeugen. Damit steht dem Erzeugen/Senden eigener Frames eigentlich nichts mehr im Wege.<br />
<img src='http://farm5.static.flickr.com/4036/4606543876_6ece510ec4.jpg' alt='Roomba RF sniffer'/></p>
<h2>Fazit</h2>
<p>Mit den neuen Erkenntnissen und vor allem mit der Checksummen Erzeugung ist es nun m&#246;glich eigene Frames zu erzeugen und zu senden. Vorest als Notl&#246;sung auf PC Seite. Sp&#228;ter ist es sicher besser, die ganze MAC Schicht auf dem Jackdaw Board laufen zu lassen und zum PC nur auf der Applikationsebene zu kommunizieren.</p>
<h2>Weblinks</h2>
<ul>
<li><a href="http://standards.ieee.org/getieee802/download/802.15.4-2006.pdf" class="lipdf">IEEE 802.15.x Standards</a></li>
<li><a href="http://www.wireshark.org/" class="liexternal">Wireshark</a></li>
<li><a href="http://media-2.cacetech.com/wireshark/src/wireshark-1.2.8.tar.bz2" class="liexternal">Wireshark Sourcecode</a></li>
<li><a href="http://github.com/robotfreak/RoombaRFCtrl" class="liexternal">RoombaRFCtrl  Sourcecode (GitHub)</a></li>
<li><a href="http://pcapdotnet.codeplex.com/" class="liexternal">Pcap.Net Library</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.robotfreak.de/blog/robotik/roomba-rf-protokoll-teil-2/328/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

