概述
【XBEE手册】传输、寻址和路由(Transmission, addressing, and routing)
@(ZigBee)[ZigBee, XBEE手册]
文章目录
- 【XBEE手册】传输、寻址和路由(Transmission, addressing, and routing)
- @[toc]
- 1 寻址(Addressing)
- 地址表(Address table)
- API模式(API mode)
- API帧(API frame)
文章目录
- 【XBEE手册】传输、寻址和路由(Transmission, addressing, and routing)
- @[toc]
- 1 寻址(Addressing)
- 地址表(Address table)
- API模式(API mode)
- API帧(API frame)
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个字节的数据,这些数据被分解成多个传输并在接收侧重新组装。如果接收设备未接收到一条或多条分段消息,则丢弃整个消息,并且发送方在发送状态帧中指示传输失败- 0x8B。
不希望使用分段的应用程序应避免在单个RF传输中发送超过最大字节数的内容(请参阅最大RF有效负载大小。
如果在接收设备上启用RTS流控制(使用D6命令),它将收到一条分段消息,它将忽略RTS流控制。
注意:
广播传输不支持分段。最大有效负载大小=最多84个字节。
##6 数据传输案例(Data transmission examples)
###透传模式(Transparent mode)
要以透明模式(AP = 0)发送数据包,请将DH和DL命令设置为与目标设备的64位地址匹配。DH必须匹配高4字节,DL必须匹配低4字节。由于协调器始终接收16位地址0x0000,因此64位地址0x0000000000000000是协调器的地址(在ZB固件中)。DH和DL的默认值是0x00,它将数据发送到协调器。
示例1:向协调器发送传输。
在此示例中,’ r’表示回车符。
路由器或终端设备可以通过两种方式发送数据。首先,将目标地址(DH和DL 命令)设置为0x00。
进入命令模式(’+++’)。
收到OK r后,发出以下命令:
- ATDH0 r
- ATDL0 r
- ATCN r
验证三个命令中的每一个都返回OK r n响应。
设置这些命令值后,UART上接收的所有串行字符将作为单播传输发送给协调器。
或者,如果协调器的64位地址已知,则可以将DH和DL设置为协调器的64位地址。假设协调器的地址是0x0013A200404A2244。
进入命令模式(’+++’)
收到OK r后,发出以下命令:
- ATDH13A200 r
- ATDL404A2244 r
- ATCN r
验证三个命令中的每一个都返回OK r n响应。
设置这些命令值后,UART上接收的所有串行字符将作为单播传输发送给协调器。
API模式(API mode)
使用发送请求或显式发送请求帧(分别为0x10和0x11)将数据发送到协调器。64位地址可以设置为0x0000000000000000,也可以设置为协调器的64位地址。使用所有0x00的64位地址时,16位地址应设置为0xFFFE。
要将ASCII“1”发送到协调器的0x00地址,请使用以下API帧:
7E 00 0F 10 01 0000 0000 0000 0000 FFFE 00 00 31 C0
如果使用显式传输帧,请将群集ID设置为0x0011,将配置文件ID设置为0xC105,将源端点和目标端点设置为0xE8。这些是Digi配置文件中数据传输的推荐默认值。
您可以使用以下显式传输帧发送相同的传输:
7E 00 15 11 01 0000 0000 0000 0000 FFFE E8 E8 0011 C105 00 00 31 18
16位地址设置为0xFFFE。发送到0x00s的64位地址时需要这样做。
假设协调器的64位地址是0x0013A200404A2244。以下传输请求API帧(0x10)向协调器发送ASCII“1”:
7E 00 0F 10 01 0013 A200 404A 2244 0000 0000 31 18
示例2:发送广播传输
在此示例中,’ r’表示回车符。
执行以下步骤配置广播传输:
进入命令模式(’+++’)
收到OK r后,发出以下命令:
- ATDH0 r
- ATDLffff r
- ATCN r
验证三个命令中的每一个都返回OK r n响应。
设置这些命令值后,所有串行字符都作为广播传输发送。
API帧(API frame)
发送请求API帧(0x10)可以使用以下API帧在广播传输中发送ASCII“1”:
7E 00 0F 10 01 0000 0000 0000 FFFF FFFE 00 00 31 C2
对于广播传输,目标16位地址设置为0xFFFE。
示例3:发送间接(绑定)传输。
此示例使用显式传输请求帧(0x11)通过绑定表使用间接寻址发送传输。它假设绑定表已经设置为将源端点0xE7和簇ID 0x0011映射到目标端点和64位目标地址。消息数据是使用配置文件ID 0xC105,命令ID 0x00,ZCL标头151E10,事务编号EE和ZCL有效负载000102030405的制造特定配置文件消息:
7E 001E 11 e4 FFFFFFFFFFFFFFFF FFFE E7 FF 0011 C105 00 04 151E10EE000102030405 14
注意
64位目标地址已设置为所有0xFF值,目标端点设置为0xFF。Tx选项0x04表示间接寻址。通过查找与绑定表条目相关联的数据来完成64位目标地址和目标端点。这与以下示例匹配。
示例4:发送多播(组ID)广播。
此示例使用显式传输请求帧(0x11)使用多播发送传输。它假定目标设备已将其组表设置为将活动端点与多播传输的组ID(0x1234)相关联。消息数据是使用配置文件ID 0xC105命令ID 0x00,ZCL标头151E10,事务编号EE和ZCL有效负载000102030405的制造特定配置文件消息:
7E 001E 11 01 FFFFFFFFFFFFFFFF 1234 E6 FE 0001 C105 00 08 151E10EE000102030405 BC
注意
64位目标地址已设置为所有0xFF值,目标端点设置为0xFE。Tx选项0x08表示使用多播(组)寻址。
##7 RF数据包路由(RF packet route)
单播传输可能需要某种类型的路由。Zigbee包括几种不同的数据路由方法,每种方法都有自己的优点和缺点,如下表所示。
路由方法 | 描述 | 什么时候用 |
---|---|---|
Ad hoc按需距离矢量(AODV)网格路由 | 在源和目标之间创建路由路径,可能遍历多个节点(“跳”)。每个设备都知道最后发送数据的位置,最终到达目的地。 | 在不会扩展到大约40个目标设备的网络中使用。 |
多对一路由 | 单个广播传输将所有设备上的反向路由配置到发送广播的设备中。 | 当许多远程设备必须将数据发送到单个网关或收集器设备时很有用。 |
源路由 | 数据包包括数据包应该遍历从源到目的地的整个路由。 | 提高大型网络(超过40个远程设备)的路由效率。 |
注意
终端设备不使用这些路由协议。相反,终端设备向其父节点发送单播传输,并允许父节点代表其路由数据分组。
注意
要从多对一路由恢复到AODV路由,网络必须首先进行网络重置(NR)。
注意
反向路由可以理解为设备回包的时候将访问过来的源ip当做目的地址然后查找设备上的路由表决定从哪个接口回包。
###链路状态传输(Link status transmission)
在讨论各种路由协议之前,有必要了解Zigbee建立可靠的双向链路的主要机制。该机制在可能具有不同输出功率和/或接收器灵敏度水平的设备混合的网络中特别有用。
每个协调器或路由器设备周期性地发送链路状态消息作为单跳广播传输,仅由一跳邻居接收。链路状态消息包含相邻设备的列表以及每个邻居的传入和传出链路质量。使用这些消息,相邻设备确定与每个邻居的双向链路的质量,并使用该信息来选择在两个方向上都良好工作的路由。
例如,考虑发送定期链路状态消息的两个相邻设备的网络。假设设备A的输出功率为+18 dBm,设备B的输出功率为+3 dBm(远小于设备A的输出功率)。链接状态消息可能指示以下内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qkqLASOc-1597889252309)(https://www.digi.com/resources/documentation/digidocs/90002002/Resources/Images/RF/link_status_messages_813x303.png)]
该机制使设备A和B能够识别链路在两个方向上都不可靠,并在建立路由时选择另外的邻居。这种链路称为非对称链路,这意味着链路品质在两个方向上都不相似。
当路由器或协调器设备通电时,它每隔几秒发送一次链路状态消息,以尝试快速发现与其邻居的链路质量。上电一段时间后,链路状态消息以较慢的速率发送,大约每分钟3-4次。
###AODV网格路由(AODV mesh routing)
Zigbee使用网状路由在源设备和目的地之间建立路由。网格路由允许数据包遍历网络中的多个节点(跳)以将数据从源路由到目的地。路由器和协调器可以使用称为路由搜寻的过程参与在源设备和目标设备之间建立路由。路由搜寻过程基于Ad-hoc按需距离矢量(Ad-hoc On-demand Distance Vector)路由(AODV)协议。
通过网状网络传输样本:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WOosWzWo-1597889252312)(https://www.digi.com/resources/documentation/digidocs/90002002/Resources/Images/RF/dwg_aodv_routing_388x360.png)]
AODV路由算法
AODV协议下的路由使用每个节点中的表来存储目的节点的下一跳(源节点和目的节点之间的中间节点)。如果下一跳未知,则启动路由搜寻以找到路径。由于路由器上只能存储有限数量的路由,因此在大型网络上更频繁地进行路由搜寻,并且在许多不同节点之间进行通信。
节点 | 目的地址 | 下一跳地址 |
---|---|---|
R3 | 路由器6 | 协调员 |
C | 路由器6 | 路由器5 |
R5 | 路由器6 | 路由器6 |
当源节点发现到目的节点的路由时,它会发送广播路由请求命令。route request命令包含源网络地址,目标网络地址和路径开销字段(用于测量路由质量的度量标准)。当路由请求命令通过网络传播时(参考广播传输),重新广播该消息的每个节点更新路径成本字段并在其路由搜寻表中创建临时条目。
下图是R3尝试发现到R6的路由的示例路由请求(广播)传输:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1QE4EWLS-1597889252313)(https://www.digi.com/resources/documentation/digidocs/90002002/Resources/Images/RF/dwg_aodv_sample_route_r3_r6.png)]
当目标节点收到路由请求时,它将“路径成本”字段与先前接收的路由请求命令进行比较。如果存储在路由请求中的路径成本优于先前接收的任何路径成本,则目的地节点将路由应答包发送到发起路由请求的节点。中间节点接收路由应答包并将其转发到源节点(发起路由请求的节点)。
下图是一个示例路由回复(单播),其中R6向R3发送路由回复:
注意
如果R6识别出更好的路由,它可以发送多个回复。
重试和确认
Zigbee在Mac和应用程序支持(APS)层都包含确认数据包。当数据传输到远程设备时,它可以遍历多个跳点以到达目的地。当设备从一个节点向其邻居发送数据时,它以相反的方向发送确认包(Ack)以指示成功接收到传输。如果未收到Ack,则发送设备最多重传4次数据。
此Ack称为Mac层确认。另外,发起传输的设备期望从目的地设备接收确认包(Ack)。此Ack遍历数据遍历的相同路径,但方向相反。如果发起者未能收到此Ack,则会重新传输数据,最多2次,直到收到Ack为止。此Ack称为Zigbee APS层确认。
注意
有关更多详细信息,请参阅Zigbee规范。
###多对一路由(Many-to-One routing)
在许多设备必须将数据发送到中央收集器或网关设备的网络中,AODV网状路由需要大量开销。如果网络中的每个设备在将数据发送到数据收集器之前必须发现路由,则网络很容易被广播路由搜寻消息淹没。
多对一路由是对这些类型网络的优化。设备不是要求每个设备进行自己的路由搜寻,而是从数据收集器发送单个多对一广播传输,以在所有设备上建立反向路由。
多对一广播是路由请求消息,其目标发现地址设置为数据收集器的地址。接收此路由请求的设备会创建一个反向多对一路由表条目,以创建返回数据收集器的路径。设备上的Zigbee堆栈使用有关每个邻居的历史链路质量信息来为反向路由选择可靠的邻居。
当设备向数据收集器发送数据,并且在其路由表中找到多对一路由时,它会在不执行路由搜寻的情况下发送数据。定期发送多对一路由请求,以更新和刷新网络中的反向路由。
需要多个数据收集器的应用程序也可以使用多对一路由。如果多个数据收集器设备发送多对一广播,则设备为每个收集器创建一个反向路由表条目。
ZB固件使用AR(聚合路由通知)在设备上启用多对一广播。AR设置用于发送多对一广播传输的时间间隔(以10秒为单位测量)。
###高/低RAM集中器模式(High/Low RAM Concentrator mode)
当广播多对一(MTO)请求时,DO = 40(位6)确定集中器是在高RAM模式还是低RAM模式下操作。高RAM模式表示集中器有足够的内存来存储整个网络的源路由,远程节点可能在集中器成功接收到之后停止发送路由记录。低RAM模式表示集中器缺少RAM来存储路由记录,并且该路由记录在每个入站APS单播消息之前被发送到集中器。默认情况下,设备使用低RAM模式。
###源路由(Source routing)
在设备必须向多个远程设备传输数据的应用中,AODV路由要求为每个目标设备执行一次路由搜寻以建立路径。如果目标设备多于路由表条目,则新路由将覆盖已建立的AODV路由,从而更频繁地启用路由搜寻。这可能导致更大的数据包延迟和较差的网络性能。
Zigbee源路由有助于解决这些问题。与从多个设备到一个数据收集器建立路由路径的多对一路由相比,源路由允许收集器存储和指定许多远程设备的路由。
要使用源路由,设备必须使用API模式,并且必须定期发送多对一路由请求广播(AR命令),以便在所有设备上创建到它的多对一路由。当远程设备使用多对一路由发送RF数据时,它们首先发送路由记录传输。路由记录传输沿多对一路由单播,直到到达数据收集器。当路由记录遍历多对一路由时,它会将路由中每个设备的16位地址附加到RF有效负载中。当路由记录到达数据收集器时,它包含发送方的地址和路由中每个跳点的16位地址。数据收集器可以存储路由信息并在以后检索它以将源路由数据包发送到远程数据库,如下图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdihTu9r-1597889252316)(https://www.digi.com/resources/documentation/digidocs/90002002/Resources/Images/RF/dwg_source_routing_flow_605x398.png)]
数据收集器发送多对一路由请求广播以在所有设备上创建反向路由。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R6ZZDSo5-1597889252317)(https://www.digi.com/resources/documentation/digidocs/90002002/Resources/Images/RF/dwg_zb_remote_to_collector_159x237.png)]
远程设备将RF数据包发送到数据收集器。这是以到数据收集器的路由记录传输开始的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-10DeT9Hc-1597889252317)(https://www.digi.com/resources/documentation/digidocs/90002002/Resources/Images/RF/dwg_zb_collector_to_remote_159x237.png)]
在获得源路由之后,数据收集器将源路由传输发送到远程设备。
获取源路由
获取源路由要求远程设备向数据收集器(发送多对一路由请求广播的设备)发送单播。有几种方法可以强制远程设备发送路由记录传输。
- 如果远程设备上的应用程序定期向数据收集器发送数据,则每次传输都会强制发生路由记录。
- 数据收集器可以发送网络发现命令(ND命令)以强制所有XBee设备发送网络发现响应。路由记录是每个网络发现响应的前缀。
- 您可以在远程设备上启用定期I / O采样,以强制它们以常规速率发送数据。路径记录作为每个I / O样本的前缀。有关更多信息,请参阅模拟和数字I / O线。
- 如果已知远程设备的NI字符串,则可以使用有效负载中的远程NI字符串发送DN命令。具有匹配NI字符串的远程设备将发送路由记录和DN响应。
存储源路由
当数据收集器收到路由记录时,它会将其作为路由记录指示符 - 0xA1发送出串行端口。要使用源路由,应用程序将接收这些帧并存储源路由信息。
发送源路由传输
要发送源路由传输,应用程序必须向XBee / XBee-PRO Zigbee RF模块发送创建源路由 - 0x21,以在其内部源路由表中创建源路由。在发送创建源路由帧之后,应用程序可以根据需要将数据传输或远程命令请求帧发送到同一目的地或源路由中的任何目的地。一旦必须将数据发送到新目的地(不包括在最后一个源路由中的目的地),应用程序必须首先发送新的创建源路由 - 0x21。
注意如果创建源路由API帧不在数据帧之前,则可能会遇到数据丢失。
所述的XBee /的XBee-PRO Zigbee射频模块可以缓冲一个包含至多11个跳点(不包括源和目的地)的源路由。例如,假设网络中存在一个协调器和5个路由器(R1,R2,R3,R4,R5),这些路由器具有已知的源路由,如下图所示。
为了将源路由数据包发送到R3,应用程序向XBee发送创建源路由API帧(0x21),目标为R3,并且为2跳(R1和R2)。如果R3的64位地址是0x0013A200 404a1234,R1,R2和R3的16位地址是:
设备 | 16位地址 |
---|---|
R1 | 0xAABB |
R2 | 0xCCDD |
R3 | 0xEEFF |
Create Source Route API帧将是:
7E 0012 21 00 0013A200 404A1234 EEFF 00 02 CCDD AABB 5C
场组成
×0012 长度
0x21 API ID(创建源路由)
0x00 帧ID(始终设为0)
0x0013A200 404A1234 R3的64位地址(目的地)
0xEEFF R3的16位地址(目标)
0x00 路线选项(设为0)
0×02 源路由中的中间设备数
0xCCDD 最远设备的地址(距离目标1跳)
0xAABB 下一个更近的设备的地址
0x5C 校验和(0xFF - SUM(长度后的所有字节))
修复源路由
网络可能使现有源路由失败(例如,路由中的设备移动或停止)。如果设备在源路由网络中关闭,则使用该设备的所有路由都将被破坏。
如前所述,源路由必须与多对一路由一起使用。使用源路由的设备还必须定期发送多对一广播,以保持路由最新。如果源路由中断,远程设备会向数据收集器发送新的路由记录传输,以便为其提供新的源路由。这要求远程设备定期将数据传输发送到数据收集器。有关更多信息,请参阅获取源路由。
重试和确认
Zigbee在Mac和应用程序支持(APS)层都包含确认数据包。当数据发送到远程设备时,它可以遍历多个跳点以到达目的地。当数据从一个节点发送到其邻居时,确认包(Ack)以相反的方向发送以指示成功接收到传输。如果发送设备没有收到Ack,它最多重传数据四次。此Ack称为Mac层确认。
另外,发起传输的设备期望从目的地设备接收确认分组(Ack)。此Ack遍历数据遍历的相同路径,但方向相反。如果发起者未能收到此Ack,它会重新传输数据,最多两次,直到收到Ack。此Ack称为Zigbee APS层确认。
注意
有关更多详细信息,请参阅Zigbee规范。
禁用MTO路由
要禁用网络中的MTO(多对一)路由,首先在聚合器上重新配置AR设置,然后广播网络范围电源复位(RE命令-0x08),以重建路由表。
- 将聚合器上的AR设置为0xFF。
- 完成AC命令以实施更改。
- 如果AR的保存配置设置值不是0xFF,则完成WR命令。
如果先前的设置是0x01 - 0xFE,则结束聚合器消息的周期性广播,如果先前的设置是0x00,则在电源重置之后阻止单个广播。将FR远程命令广播到网络并等待网络改造。这会从网络的路由表中删除聚合器作为聚合器的状态,以便不再向聚合器发送路由记录。
禁用路由记录
聚合器从网络节点收集路由记录后,不再需要发送路由记录(消耗网络吞吐量):
- 将DO的第 6位置1 以使能高RAM集中器模式。高RAM模式意味着聚合器具有足够的内存来保存其潜在目的地的路径记录。
- 将AR设置为0x00(一些节点可能会丢失),或者将值设置为0x01到0xFE(以10秒为单位),以周期性地发送广播以告诉其他设备网络聚合器正在运行高RAM集中器模式,不再需要接收路由记录。
- 使用Create Source Route - 0x21将目标的路由记录加载到本地设备的源路由表中。
- 发送单播到目的地。路由记录嵌入在有效载荷中,并确定用于将单播传输到目的地的路由器序列。收到单播后,目的地不再向聚合器发送路由记录,因为它已确认高RAM集中器聚合器“知道”其路由记录。
清除源路由表
要清除源路由表,请将AR设置从非0xFF设置更改为0xFF并完成AC命令。要重新建立定期聚合器广播,请将AR设置更改为非0xFF设置并完成AC命令。
##8 加密传输(Encrypted transmission)
加密传输的路由类似于非加密传输,但有一个例外。当加密数据包从一个设备传播到另一个设备时,每个设备使用网络密钥对数据包进行解密,并通过验证数据包完整性来验证数据包。然后,它使用自己的源地址和帧计数器值重新加密数据包,并将消息发送到下一跳。此过程会为单播传输增加一些开销延迟,但它有助于防止重放攻击(replay attack)。有关更多信息,请参阅Zigbee安全性。
##9 最大RF有效载荷大小(Maximum RF payload size)
NP命令返回以字节为单位的最大有效载荷大小。实际最大有效负载是以下参数的函数:
- 消息类型(广播或单播)
- AP设置
- APS加密选项
- 源路由
无法使用APS加密或分段的广播的最大有效负载为0x54字节(84字节)。 AP为0的单播也具有0x54字节的最大有效载荷。非零AP意味着NP将是0xFF或255字节。
对于AP == 0 时的广播消息和单播消息,最大有效载荷为0x54字节。
对于单播消息当AP非零时(API模式),最大有效载荷为0xFF(255字节)字节。如果有效负载和可选APS加密开销(EE1,TxOption 0x20)的组合太高,则消息最多会分段为五个片段。固件分别加密和传输每个片段。目标设备将片段重新组合成完整的消息。
对于Smart Energy固件版本5x32及更早版本,NP == 0x80。从5x56开始,NP == 0xFF。
计算最大有效载荷以估计聚合器源路由。为了减少最大有效负载,当聚合器发送源路由消息时,如果需要分段,则将路由作为开销嵌入到消息中,或嵌入到消息的每个片段中。如果使用APS加密(EE1,Tx选项0x20),则会进一步减少数量。
路由开销是2个字节加上每个跳点2个字节。字节是:
- 一个字节是跳数
- 一个字节是路由列表的索引,在每个跃点处递增值
- 其他数据是路由无线电的16位网络地址列表
4x58之前的固件版本支持最多11个聚合器源路由跳点。固件修订版本为4x58及之后的版本支持最多25个聚合器源路由跳点。
聚合器源路由有效负载最大值不适用于由非聚合器节点提供的消息,这些节点在其消息之前将路由记录发送到聚合器。聚合器是协调器或路由器,具有以下内容:
- 启用源路由或
- AR设置不是0xFF
下表显示了作为跳数和APS加密函数的聚合器源路由有效负载最大值:
跳点 | 最大加密有效负载 | 最大非加密有效负载 |
---|---|---|
1 | 255 | 255 |
2 | 255 | 255 |
3 | 255 | 255 |
4 | 255 | 255 |
5 | 255 | 255 |
6 | 215 | 255 |
7 | 205 | 250 |
8 | 195 | 240 |
9 | 185 | 230 |
10 | 175 | 220 |
11 | 165 | 210 |
12 | 155 | 200 |
13 | 145 | 190 |
14 | 135 | 180 |
15 | 125 | 170 |
16 | 115 | 160 |
17 | 105 | 150 |
18 | 95 | 140 |
19 | 85 | 130 |
20 | 75 | 120 |
21 | 65 | 110 |
22 | 55 | 100 |
23 | 45 | 90 |
24 | 35 | 80 |
25 | 25 | 70 |
##10 吞吐量(Throughout)
Zigbee网络中的吞吐量可能因许多变量而异,包括:
- 跳数
- 启用/禁用加密
- 休眠的终端设备
- 失败/路线发现。
我们的经验测试表明在稳健的操作环境(低干扰)下具有以下吞吐量性能。
Configuration | Data throughput |
---|---|
1 hop, RR, SD | 58 kb/s |
1 hop, RR, SE | 34 kb/s |
1 hop, RE, SD | Not yet available |
1 hop, RR, SE | Not yet available |
1 hop, ER, SD | Not yet available |
1 hop, ER, SE | Not yet available |
4 hops, RR, SD | Not yet available |
4 hops, RR, SE | Not yet available |
其中
RR =路由器到路由器
RE =路由器到终端设备(非休眠)
ER =路由器的终端设备(非休眠)
SD =安全性已禁用
SE =启用安全性
4跳=总共5个节点,3个中间路由器节点
注意
我们将串行接口速率设置为115200 b / s用于数据吞吐量测量,并测量从源到目标发送100,000个字节的时间。在测试期间,没有发生路由发现或故障。
##11 ZDO传输(ZDO transmission)
Zigbee定义了Zigbee设备对象层(ZDO),它提供设备和服务发现以及网络管理功能。
群集名称 | 群集ID | 描述 |
---|---|---|
网络地址请求 | 0x0000 | 请求具有匹配的64位地址(必需参数)的16位无线电地址。 |
活动端点请求 | 0×0005 | 从远程设备请求端点列表。 |
LQI请求 | 0x0031 | 从远程设备的邻居表请求数据。 |
路由表请求 | 0x0032 | 请求从远程设备检索路由表条目。 |
网络地址响应 | 0x8000 | 响应包括设备的16位地址。 |
LQI回应 | 0x8031 | 响应,包括来自远程设备的邻居表数据。 |
路由表响应 | 0x8032 | 响应包括来自远程设备的路由表条目数据。 |
有关所有Zigbee设备配置文件服务的详细说明,请参阅Zigbee规范。
###发送ZDO命令(Send a ZDO command)
您必须使用显式传输API帧(0x11)发送ZDO命令,并且必须正确格式化它。
将源和目标端点以及配置文件ID设置为0。
设置群集ID以匹配相应服务的群集ID。例如,要发送活动端点请求,请将群集ID设置为0x0005。
API帧中有效负载的第一个字节是应用程序序列号(事务序列号),可以设置为任何单个字节值。ZDO响应的第一个字节使用相同的值。
必须根据ZDO的要求设置所有剩余的有效负载字节。必须以小端字节顺序发送所有多字节值。
###接收ZDO命令和响应(Receiving ZDO command and responses)
在XBee ZB固件中,您可以使用API轻松发送ZDO命令。要接收传入的ZDO命令,请使用AO命令启用接收器应用程序寻址。请参阅本节后面的示例。并非所有传入的ZDO命令都传递给应用程序。
当在端点0和配置文件ID 0上接收到ZDO消息时,集群ID指示接收的ZDO消息的类型。有效载荷的第一个字节通常是对应于请求的序列号的序列号。其余字节按ZDO定义设置。与ZDO请求类似,响应中的所有多字节值都以小端字节顺序排列。
###示例(Examples)
示例1
:发送ZDO LQI请求以读取远程的邻居表内容
查看Zigbee规范,LQI请求的集群ID是0x0031,有效负载只需要一个字节(起始索引)。此示例向具有64位地址0x0013A200 40401234的远程设备发送LQI请求。起始索引设置为0,事务序列号设置为0x76。
API帧
7E 0016 11 01 0013A200 40401234 FFFE 00 00 0031 0000 00 00 76 00 CE
场组成
0x0016 长度
0x11 显式传输请求
0×01 帧ID(设置为非零值以启用传输状态消息,或设置为0以禁用)
0x0013A200 40401234 远程的64位地址
0xFFFE 远程的16位地址(0xFFFE =未知)。(可选)如果已知,则设置为目标的16位地址。
0x00 源端点
0x00 目标端点
0x0031 集群ID(LQI请求或邻居表请求)
0x0000 配置文件ID(Zigbee设备配置文件)
0x00 广播半径
0x00 Tx选项
0x76 交易顺序号
0x00 LQI请求命令所需的有效负载
0xCE 校验和(0xFF - SUM(长度后的所有字节))
描述
该API帧向远程设备发送ZDO LQI请求(邻居表请求)以从其邻居表获得数据。您必须在API设备上正确设置AO命令,以使显式API接收帧能够接收ZDO响应。
示例2
:发送ZDO网络地址请求以发现远程的16位地址
查看Zigbee规范,网络地址请求的集群ID为0x0000,有效负载仅需要以下内容:
[64位地址] + [请求类型] + [开始索引]
此示例将网络地址请求作为广播传输发送,以发现具有64位地址0x0013A200 40401234的设备的16位地址。请求类型和起始索引设置为0,并且事务序列号设置为0×44。
API帧
7E 001F 11 01 00000000 0000FFFF FFFE 00 00 0000 0000 00 00 44 34124040 00A21300 00 00 33
场组成
0x001F 长度
0x11 显式传输请求
0×01 帧ID(设置为非零值以启用传输状态消息,或设置为0以禁用)
0x00000000 0000FFFF 用于广播传输的64位地址
0xFFFE 设置为此值以进行广播传输
0x00 源端点
0x00 目标端点
0x0000 群集ID(网络地址请求)
0x0000 配置文件ID(Zigbee设备配置文件)
0x00 广播半径
0x00 Tx选项
0×44 交易顺序号
0x34124040 00A21300 00 00 网络地址请求命令所需的有效负载
0x33 校验和(0xFF - SUM(长度后的所有字节))
描述
此API帧发送广播ZDO网络地址请求以获取具有64位地址0x0013A200 40401234的设备的16位地址。我们以小端字节顺序插入64位地址的字节。必须以小端字节顺序为ZDO命令的API有效负载中的所有多字节字段插入数据。您必须在API设备上正确设置AO命令,以使显式API接收帧能够接收ZDO响应。
##12 传输超时(Transmission timeouts)
Zigbee堆栈包括两种传输超时,具体取决于目标设备的性质。目标设备(如带接收器的路由器)始终使用单播超时。单播超时根据数据包应该遍历以获取数据要到达的目标设备的单播跳数来估计超时。对于发往终端设备的传输,Zigbee堆栈使用包括单播超时(将数据路由到终端设备的父节点)的延长超时,并且它包括终端设备完成睡眠,唤醒和轮询父节点的超时数据。
Zigbee堆栈包括一些规定,用于检测目的地是否为终端设备。Zigbee堆栈使用单播超时,除非它知道目标是终端设备。
XBee API包含一个发送选项位,您可以设置该位以指定用于给定传输的延长超时。如果设置此位,则在将RF数据发送到指定目标时将使用延长超时。为了提高路由可靠性,应用程序在向终端设备发送数据时设置扩展超时位,如果:
- 应用程序将数据发送到10个或更多远程设备,其中一些是终端设备。
- 终端设备可能休眠时间比单播超时更长。
这些超时的等式在以下部分中计算。
注意
本节中的超时是最坏情况超时,应填充几百毫秒。当现有路由发生故障时(例如,中间跳点或目标设备移动),这些最坏情况超时适用。
###单播超时(Unicast timeout)
使用NH命令设置单播超时。实际的单播超时计算为((50 * NH)+ 100)。默认NH值为30,相当于1.6秒超时。
单播超时包括3次传输尝试(1次尝试和2次重试)。
最大总超时大约是:
3*(50 * NH)+ 100)
例如,如果NH = 30(0x1E),则单播超时大约为:
3*(50 * NH)+ 100)= 3 *(1600)= 4800毫秒 = 4.8秒
###延长超时(Extended timeout)
将数据发送到终端设备时的最坏情况传输超时比发送到路由器或协调器时要大。如父操作中所述,RF数据包被发送到终端设备的父节点,终端设备缓冲该数据包直到终端设备唤醒接收它。父缓冲RF数据包最多(1.2 * SP)时间。
为确保终端设备有足够的时间唤醒和接收数据,到终端设备的延长传输超时为:
(50 * NH)+(1.2 * SP)
此超时包括数据包缓冲超时(1.2 * SP)和通过网状网络(50 * NH)路由的时间。
如果在此时间内未收到确认,则发送方最多重新发送两次传输。包含重试时,将数据发送到终端设备时的最长传输超时为:
3*((50 * NH)+(1.2 * SP))
两个方程中的SP值必须以毫秒为单位输入。的SP命令设置使用10个毫秒为单位,并且必须被转换成在这个等式中使用毫秒。
例如,假设路由器配置了NH = 30(0x1E)和SP = 0x3E8(10,000 ms),并且它正在尝试将数据发送到其终端设备子设备之一或远程终端设备。到终端设备的总延长超时大约是:
3*((50 * NH)+(1.2 * SP))=3 *(1500 + 12000)=3 *(13500)=40500毫秒=40.5秒
###传输示例(Transmission examples)
示例1
:使用64位地址0向协调器发送单播API数据传输,其中有效负载为“TxData”。
API帧
7E 0014 10 01 00000000 00000000 FFFE 00 00 54 78 44 61 74 61 AB
场组成
0x0014 长度
0x10 API ID(TX数据)
0×01 帧ID(设置大于0以启用TX状态响应)
0x00000000 00000000 协调器的64位地址(ZB定义)
0xFFFE 如果将数据发送到64位地址0,则需要16位地址
0x00 广播半径(0 =最大跳数)
0x00 Tx选项
0x54 78 44 61 74 61 “TxData”字符串的ASCII表示
0xAB 校验和(0xFF - SUM(长度后的所有字节))
描述
该传输将字符串“TxData”发送到协调器,而不知道协调器设备的64位地址。ZB固件将64位地址0定义为协调器。如果协调器的64位地址已知,则64位地址0可以用协调器的64位地址替换,16位地址可以设置为0。
示例2
:使用有效载荷“TxData”发送所有设备都可以接收的广播API数据传输(包括睡眠终端设备)。
API帧
7E 0014 10 01 00000000 0000FFFF FFFE 00 00 54 78 44 61 74 61 AD
场组成
0x0014 长度
0x10 API ID(TX数据)
0×01 帧ID(设置为非零值以启用TX状态响应)
0x00000000 0000FFFF 广播定义(包括睡眠终端设备)
0xFFFE 发送广播传输所需的16位地址
0x00 广播半径(0 =最大跳数)
0x00 Tx选项
0x54 78 44 61 74 61 “TxData”字符串的ASCII表示
0xAD,将 校验和(0xFF - SUM(长度后的所有字节))
描述
该传输将字符串“TxData”作为广播传输发送。由于目标地址设置为0xFFFF,因此所有设备(包括睡眠终端设备)都可以接收此广播。
如果启用了接收器应用程序寻址,XBee / XBee-PRO Zigbee RF模块将以显式格式(0x91)报告所有接收到的数据帧,以指示收到每个数据包的源和目标端点,群集ID和配置文件ID。调制解调器状态和路由记录指示符等状态消息不受影响。
要启用接收器应用程序寻址,请使用AT命令帧 - 0x08将AO命令设置为1 ,如下所示:
API帧
7E 0005 08 01 414F 01 65
场组成
0×0005 长度
0x08的 API ID(AT命令)
0×01 帧ID(设置为非零值以启用AT命令响应帧)
0x414F “A”,“O”(发出的命令)的ASCII表示
0×01 参数值
0x65 校验和(0xFF - SUM(长度后的所有字节))
描述
XBee / XBee-PRO Zigbee RF模块需要设置AO = 1才能使用显式Rx指示器帧 -接收RF数据包时为0x91。如果应用程序需要指示在接收的Zigbee数据包中使用的源或目标端点,群集ID或配置文件ID值,则需要这样做。只有在AO = 1时才能接收ZDO消息。
最后
以上就是仁爱唇彩为你收集整理的【XBEE手册】传输、寻址和路由(Transmission, addressing, and routing)【XBEE手册】传输、寻址和路由(Transmission, addressing, and routing)的全部内容,希望文章能够帮你解决【XBEE手册】传输、寻址和路由(Transmission, addressing, and routing)【XBEE手册】传输、寻址和路由(Transmission, addressing, and routing)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复