XBee 数据包格式

标签 xbee

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

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

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

XBee 端源地址为 0x1,目的地址为 0x2。现在当我输入 ASCII字符到 picocom 中,这是我在另一台设备上看到的,以混杂模式运行:
-- 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 读取它——大概就是这样。)

最佳答案

我想第二个专柜ct 的计数器应用层在 Zigbee 协议(protocol)中通知它何时应该更新其数据,因为它正在接收新数据:)
APS Frame Format in Zigbee Protocol

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

关于XBee 数据包格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18502510/

相关文章:

python - 数据打印时防止终端字符集切换

xbee - ZigBee Mesh VS DigiMesh

c++ - 将 libxbee 与 MinGw 和 eclipse 结合使用

python - python-xbee 的 ser.send() 中的frame_id 和frame 字段是什么?

python - 从 XBee 接收的 pySerial 数据未正确显示

arduino - XBee 发送给所有人

python - 为什么 XBEE Sensor.py 检查 self.__tracer.info() :

c++ - 将十六进制发送到 xbee radio 模块

serial-port - 为什么通信协议(protocol)中常用0x7E作为起始分隔符?

Python 异或运算和 ser.read()