XBee数据包格式

时间:2013-08-29 04:50:55

标签: xbee

我必须运行IEEE 802.15.4个设备。问题是关于XBee-PRO

Firmware: XBEE PRO 802.15.4 (Version: 10e6)
Hardware: XBEE (Version: 1744)

两个单元都配置为相同的通道(15)和相同的PAN ID(0x1234)。它连接到我的机器COM port,并且当我将picocom连接到它时实际上可以传输数据。 (它正确响应AT命令,可以通过moltosenso网络管理器完全配置 - 我在Mac)。除串行波特率外,所有其他寄存器均为默认值。

XBee端源地址为0x1,目标地址为0x2。现在,当我在picocom中键入ASCII个字符时,这就是我在其他设备上看到的,以promiscous模式运行:

-- Typing "a"
E 61 88 7E 34 12 2 0 1 0 2B 0 61 E1
E 61 88 7E 34 12 2 0 1 0 2B 0 61 E1
E 61 88 7E 34 12 2 0 1 0 2B 0 61 E1
E 61 88 7E 34 12 2 0 1 0 2B 0 61 E1
-- Typing "b"
E 61 88 7F 34 12 2 0 1 0 2C 0 62 58
E 61 88 7F 34 12 2 0 1 0 2C 0 62 58
E 61 88 7F 34 12 2 0 1 0 2C 0 62 58
E 61 88 7F 34 12 2 0 1 0 2C 0 62 58
--- Typing "a" again
E 61 88 80 34 12 2 0 1 0 2D 0 61 A9
E 61 88 80 34 12 2 0 1 0 2D 0 61 A9
...
ln      pc pan   da  sa  ct   pl ck

因此,对于发送的每个数据有效负载,我看到发出的四个帧(当然没有人正在挑选它们)。我想其中有三个是802.15.4重试,而XBee又添加了另一个(尽管RR寄存器显然为零......)。

这里的数据包格式是什么,指定了哪里?

我查看了XBee API数据包,这看起来与模糊类似,但我没有看到0x7e分隔符或类似的东西。

我想我所看到的是:

ln = length
61 = ??
88 = ??
pc = some sort of packet counter
pan = 16 bits of PAN ID
da = 16 bits of destination address
sa = 16 bits of source address
ct = another counter?
0 = ??
pl = my ASCII character payload
ck = probably a checksum

我尝试将PAN设置为0xFFFF并将目标地址设置为0xFF或广播,看起来几乎相同。这些0x61和0x88似乎与XBee文档中的任何内容都没有对应......

它也不直接看起来像802.15.4 MAC级别数据帧 - 或者如果是,那么缺少哪些字段以及它们在何处指定?指针?

编辑: 实际上,嗯。将十六进制格式的转储导入Wireshark后,它确切地告诉我它是一个802.15.4 MAC帧以及如何读取它。

IEEE 802.15.4 Data, Dst: 0x0002, Src: 0x0001, Bad FCS
Frame Control Field: Data (0x8861)
.... .... .... .001 = Frame Type: Data (0x0001)
.... .... .... 0... = Security Enabled: False
.... .... ...0 .... = Frame Pending: False
.... .... ..1. .... = Acknowledge Request: True
.... .... .1.. .... = Intra-PAN: True
.... 10.. .... .... = Destination Addressing Mode: Short/16-bit (0x0002)
..00 .... .... .... = Frame Version: 0
10.. .... .... .... = Source Addressing Mode: Short/16-bit (0x0002)
Sequence Number: 126
Destination PAN: 0x1234
Destination: 0x0002
Source: 0x0001

我仍然不知道第二个16位计数器来自实际数据字节前面的位置,以及为什么FCS搞砸了(我必须剥离起始len字段以使Wireshark读取它 - 这可能是它)。

3 个答案:

答案 0 :(得分:1)

我认为第二个计数器ct是Zigbee协议中应用程序层的计数器,用于注意何时应该更新其数据,因为它正在接收新数据:) APS Frame Format in Zigbee Protocol

有关Zigbee Stack中帧格式的更多信息,请尝试下载:
Newnes.ZigBee.Wireless.Networks.and.Transceivers.Sep.2008.eBook-DDU.pdf
祝你有愉快的一天:)

答案 1 :(得分:1)

您是否尝试使用X-CTU软件读取数据包?

我建议你阅读这篇文章:http://www.tunnelsup.com/xbee-guide/

带有“快速参考指南”的pdf非常有用,并且包含一些指示的数据格式。

此外,从开发人员(在本例中为Digi)研究真实文档总是好的。

框架如:

API Frame

但是,只有先前已使用命令:

配置xbee才能在API模式下工作
ATAP 1

或者使用XCTU。

答案 2 :(得分:0)

尝试监视两个XBee模块之间的通信,以查看确认帧的外观。

尝试发送一系列字节。

尝试执行节点发现(ATND)以查看这些帧的外观。

尝试从X-CTU发送远程AT命令,以查看这些帧和响应的样子。

对协议进行逆向工程时,查看对话的两侧非常有用。您可以通过模拟协议的每一方来测试各种理论,并尝试对所看到的内容进行变化。例如,“如果我更改此字节,远程端是否仍然响应?”。

我的猜测是你对ct字节作为计数器是正确的。以下零字节可以是标志,也可以标识发送的数据包类型(串行数据,远程AT命令/响应,节点发现/响应等)。

当您建立对结构的理解时,您可以编写一个程序来解析和转储帧的内容。转储您所知道的解释版本,并将未知字节保留为十六进制字节序列。继续进行实验,直到您可以缩小剩余字节的含义。