【XBEE手册】传输、寻址和路由(Transmission, addressing, and routing)
@(ZigBee)[ZigBee, XBEE手册]
1 寻址(Addressing)
###64位设备地址(64-bit device addresses)
即MAC地址
。前三个字节是由IEEE分配给制造商的组织唯一标识符(OUI)。XBee设备的OUI是0x0013A2。(or 0x13A200?)
###16位设备地址(16-bit device addresses)
设备加入Zigbee网络时会收到16位地址。16位地址也称为网络地址。0x0000的16位地址保留给协调器。所有其他设备从允许加入的路由器或协调器设备接收随机生成的地址。在某些条件下,16位地址可能会发生变化:
- 检测到地址冲突,其中发现两个设备具有相同的16位地址
- 设备离开网络后来加入(它可以接收不同的地址)
所有Zigbee的数据传输需使用源和目标的16位地址。Zigbee设备上的路由表也使用16位地址来确定如何通过网络路由数据包。但是,由于16位地址不是静态的,因此它不是识别设备的可靠方法。
为了解决这个问题,64位目标地址通常包含在数据传输中,以保证数据被传送到正确的目的地。在将数据传输到远程之前,Zigbee堆栈可以发现16位地址(如果未知)。
###应用层寻址(Application layer addressing):
Zigbee设备支持多个应用程序配置文件(application profile),群集ID(cluster ID)和端点(endpoint)。应用层寻址允许将数据传输寻址到特定的配置文件ID,群集ID和端点。如果应用程序必须执行以下任何操作,则应用程序层寻址很有用:
- 与Digi应用程序配置文件之外的其他Zigbee设备互操作。
- 使用ZDO的服务和网络管理功能。
- 在家庭自动化或智能能源等公共应用程序配置文件上运行。
API模式提供了一个简单而强大的界面,可以轻松地将数据发送到Zigbee网络中任何设备上的任何配置文件ID,端点和群集ID组合。
##2 数据传输(ZigBee data transmission)
###数据传输(Data transmission)
可以将Zigbee数据包作为单播或广播传输方式发送。单播传输将数据从一个源设备路由到一个目的地设备,而广播传输被发送到网络中的许多或所有设备。
###广播传输(Broadcast transmission)
Zigbee协议内的广播传输旨在在整个网络中传播,使得所有节点都接收传输。为实现此目的,协调器和接收广播传输的所有路由器重传该分组三次。
注意:当路由器或协调器向终端设备子节点传送广播传输时,传输仅发送一次(在终端设备唤醒后立即轮询父节点以获取任何新数据)。有关更多信息,请参阅父操作(Parent Operation)。
发送广播的每个节点还在本地广播传输表中创建条目。此条目用于跟踪每个接收的广播数据包,以确保数据包不会无限传输。每个条目持续8秒,并且广播传输表保持8个条目,有效地将网络广播传输限制为每秒一次。
对于每个广播传输,Zigbee堆栈为数据包的副本保留缓冲区空间,该副本根据需要重传该分组。大型广播包需要更多的缓冲空间。用户不能改变任何缓冲间距; 有关缓冲区空间的信息仅供一般参考。XBee /XBee-PRO Zigbee射频模块自动处理缓冲器间距。
由于网络中的每个设备都重新发送广播传输,因此请谨慎使用广播消息以避免网络拥塞。
###单播传输(Unicast transmission)
单播传输从一个源设备发送到另一个目标设备。目标设备可以是源的直接邻居,也可以是几跳。沿多跳路径发送的单播传输需要一些方法来建立到目的地设备的路由。有关更多信息,请参阅RF数据包路由( RF packet routing)。
###地址解析(Address resolution)
Zigbee网络中的每个设备都具有16位(网络)地址和64位(扩展)地址。64位地址是唯一的并且在制造期间分配给设备,16位地址是在加入网络之后获得的。在某些条件下,16位地址也会发生变化。
当发送单播传输时,Zigbee网络层使用目的地和每一跳的16位地址来路由数据包。如果不知道目标的16位地址,则Zigbee堆栈包含一个搜寻设置,用于在路由数据之前自动搜寻设备的目标16位地址。
为了发现远程的16位地址,发起搜寻的设备发送广播地址搜寻传输。地址搜寻广播包括请求16位地址的远程设备的64位地址。接收此传输的所有节点都会检查有效负载中的64位地址,并将其与自己的64位地址进行比较。如果地址匹配,则设备将响应数据包发送回发起者。此响应包括远程的16位地址。当设备接收到发现响应时,发起者发送数据。
您可以使用扩展或网络地址寻址帧。如果使用扩展地址表单,请将网络地址字段设置为0xFFFE(未知)。如果使用网络地址格式,请将扩展地址字段设置为0xFFFFFFFFFFFFFFFF(未知)。
如果使用无效的16位地址作为目标地址,并且64位地址未知(0xFFFFFFFFFFFFFFFF),则调制解调器状态消息显示传递状态代码为0x21(网络确认失败)且发现状态为0x00(未发现开销)。如果使用不存在的64位地址作为目标地址,并且16位地址未知(0xFFFE),则设备会尝试地址搜寻,并且调制解调器状态消息显示交付状态代码为0x24(未找到地址)并且发现状态代码为0x01(尝试了地址发现)。
地址表(Address table)
每个Zigbee设备都维护一个地址表,将64位地址映射到16位地址。当传输寻址到64位地址时,Zigbee堆栈在地址表中搜索具有匹配的64位地址的条目,以确定目标的16位地址。如果Zigbee堆栈找不到已知的16位地址,它会执行地址发现以发现设备的当前16位地址。
64-bit address | 16-bit address |
---|---|
0013 A200 4000 0001 | 0x4414 |
0013 A200 400A 3568 | 0x1234 |
0013 A200 4004 1122 | 0xC200 |
0013 A200 4002 1123 | 0xFFFE (unknown) |
对于Smart Energy配置文件和相关固件,XBee设备最多可存储10个地址表条目。对于标准固件版本,模块最多支持20个地址表条目。对于单个设备(例如,协调器)向10个以上设备发送单播传输的应用程序,应用程序实现了一个地址表,用于存储每个远程设备的16位和64位地址。对任何将数据发送到10个以上远程设备的XBee设备使用API模式。然后,应用程序可以在API发送帧中将16位和64位地址发送到XBee设备,这大大减少了16位地址发现的数量,并大大提高了数据吞吐量。
如果应用程序支持地址表,则大小应大于设备与之通信的最大目标地址数。地址表中的每个条目都应包含64位目标地址及其最后已知的16位地址。
当将传输发送到目标64位地址时,应用程序在地址表中搜索匹配的64位地址。如果找到匹配项,应用程序会将16位地址填充到API帧的16位地址字段中。如果找不到匹配项,请在API发送帧中将16位地址设置为0xFFFE(未知)。API在以下帧中提供远程设备的16位地址的指示:
- 所有接收数据帧
- Rx数据(0x90)
- Rx显式数据(0x91)
- I / O示例数据(0x92)
- 节点识别指示器(0x95)
- 路线记录指示器(0xA1)等
- 传输状态帧(0x8B)
###组表(Group table)
每个路由器和协调器都维护一个持久性组表。每个条目包含以下内容:
- 端点值(Endpoint value)
- 两个字节的组ID(Group ID)
- 可选的0到16个ASCII字符的名称字符串
- 绑定表(Binding table)里的索引号
可以将多个端点与一个组ID相关联,并且可以将多个组ID与给定端点相关联。组表的容量为16个条目。
当应用程序收到其中一个帧时,应用程序始终更新地址表中的16位地址,以确保该表具有最近已知的16位地址。如果发生传输失败,应用程序会将表中的16位地址设置为0xFFFE(未知)。
##3 绑定传输(Binding transmissions)
绑定传输使用间接寻址将一个或多个消息发送到其他目标设备。设备使用间接Tx选项(0x04)作为绑定传输请求来处理显式寻址命令帧( Explicit Addressing Command frame ) - 0x11。
###地址解析(Address resolution)
所述的XBee /的XBee-PRO Zigbee射频模块使用绑定传输的源端点和群集ID值作为密钥来查找匹配的绑定表条目。对于每个匹配的绑定表条目,条目的类型字段指示是发送单播还是多播消息。在单播条目的情况下,使用目标端点和MAC地址更新传输请求,并将其单播到其目的地。在多播条目的情况下,设备使用目的地MAC地址的两个最低有效字节作为groupID来更新消息,并多播到其目的地。
###绑定表(Binding table)
每个路由器和协调器都维护一个持久性绑定表,以将源端点和群集ID值映射到64位目标地址和端点值。绑定表的容量是16个条目。
##4 多播传输(Multicast transmission)
XBee模块使用多播传输将消息广播到具有与公共组ID相关联的活动端点的目标设备。设备 使用Multicast Tx选项(0x08)作为多播传输请求处理显式寻址命令帧(Explicit Addressing Command frame ) - 0x11。
###地址解析(Address resolution)
64位目标地址值无关紧要,我们建议将其设置为0xFFFFFFFFFFFFFFFF。将16位目标地址值设置为目标groupID。
##5 分段(Fragmentation)
每个单播传输可以支持多达84个字节的RF有效载荷,尽管启用安全性或使用源路由可以减少这个数量。有关更多信息,请参阅NP(最大数据包有效负载字节数)。但是,XBee Zigbee固件支持称为分段的Zigbee功能,允许将单个大型数据包分解为多个RF传输,并在将数据发送到其串行端口之前由接收器重新组装。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IqwO38tG-1597889252308)(https://www.digi.com/resources/documentation/digidocs/90002002/Resources/Images/RF/dwg_tx_rx_514x170.png)]
发送帧可以包括多达255个字节的数据,这些数据被分解成多个传输并在接收侧重新组装。如果接收设备未接收到一条或多条分段消息,则丢弃整个消息,并且发送方