已绑定手机 已实名认证
|
ZigBee规范只定义了Zigbee的网络层和应用层,MAC层则属于802.15.4规范中定义的内容。我们在做产品开发时,可能比较少关注MAC层的内容。倘若能对MAC层命令有所了解,对我们分析Zigbee空中抓包会有很大的帮助。本文旨在阐述Zigbee的MAC层命令。
根据802.15.4规范中的定义,MAC层包含4种类型的帧:
Beacon(b000)
Data(b001)
MAC ACK(b010)
MAC Command(b011)
下面对这4种类型的帧进行简要分析,其中重点介绍命令帧的功能。
1. Beacon
Beacon主要用于设备加网和Rejoin过程中,它是对接收Beacon Request的回应。因此,只有Router设备才会回复Beacon。
在《Zigbee设备的扫描方式》一文中提到,Active Scan的过程中Router设备收到扫描设备发送的Beacon Request时会回复Beacon,以告知扫描设备自己所处网络的相关信息。简而言之,Beacon的payload中含有与网络相关的重要信息。
如下图所示:Beacon payload中的Router Capacity和End Device Capacity位域分别表示该设备是否有能力让其它Router设备或End Device通过其加入网络。此外,payload中也包含所处网络的Extended PAN ID等信息。
2. Data
Data表示MAC层的数据帧,也就是给更高层(网络层)传递数据帧和命令帧。换句话说,只要是传递到网络层的任何帧对MAC层来说都是数据帧。如下图所示,MAC层帧的Frame Control中Frame Type为0x01,表示该条消息是一个数据帧。
3. MAC ACK
MAC ACK即MAC层的应答帧,表示接收方已经接收发射方发送的数据包并进行应答确认。除了Beacon和广播之外,大部分Zigbee数据包被对方收到之后都需要返回MAC ACK。每一条数据包的MAC层FrameControl中会指明是否需要对方返回MAC ACK。如上图所示,当ACK Required位域为true时,则表明该条数据需要接收方返回MAC ACK。
因此,MAC ACK可以用于判断接收方是否收到发送方发送的数据包。如果发送方收到接收方返回的MAC ACK,则说明接收方已经收到我们发送的数据包。否则,说明通信链路可能有问题。如果没有收到MAC ACK,则会对该条数据包进行重传,MAC层的最大重传次数为3次。
4. MAC Command
802.15.4规范定义了MAC层的命令帧,其中用于Zigbee的命令帧如下,其中括号里为每条命令帧对应的命令ID。
Association Request(0x01)
Association Response(0x02)
Disassociation Notification(0x03)
Data Request(0x04)
PAN ID Conflict Notification(0x05)
Orphan Notification(0x06)
Beacon Request(0x07)
Coordinator realignment(0x08)
更多详细内容请下载附件查看
|
|