3

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

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

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

XBee 端源地址为 0x1,目的地址为 0x2。现在,当我在 picocom 中输入一个ASCII字符时,这是我在另一台设备上看到的,以混杂模式运行:

-- 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 读取它 - 可能就是这样。)

4

3 回答 3

1

我认为第二个计数器ct是 Zigbee 协议中的应用程序层的计数器,用于通知它何时应该更新其数据,因为它正在接收新数据:) Zigbee 协议中的 APS 帧格式

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

于 2015-03-06T12:12:14.033 回答
1

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

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

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

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

框架是这样的:

API 框架

但前提是您之前已使用以下命令将 xbee 配置为在 API 模式下工作:

ATAP 1

或与 XCTU。

于 2016-06-22T14:48:33.177 回答
0

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

尝试发送一个字节序列。

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

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

在对协议进行逆向工程时,查看对话的双方很有用。您可以通过模拟协议的每一面来测试各种理论,并尝试您所看到的变化。例如,“如果我改变了这个字节,远端是否仍然响应?”。

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

随着对结构的了解逐渐加深,您可以编写一个程序来解析和转储帧的内容。转储您所知道的解释版本,并将未知字节保留为十六进制字节序列。继续试验,直到可以缩小剩余字节的含义。

于 2013-08-29T21:55:02.920 回答