XBee Zigbee是一种优秀的全功能Zigbee无线模块,理论上它能支持达6万多个设备接入同一个zigbee网络。对于Zigbee模块来说,通常任意两点间之所以能实现实时通讯,主要得益于一种 AODV的寻址方式,虽然这种方式在首次通讯时比较费时,但XBee模块的固件会自动保存前往目标地址的下一跳路由。这种路由表不可能无线增大,因此在一个非加密的ZigBee网络,XBee通常能支持组成80个节点的网络中任意两点的实时通讯。
如果网络大于80个节点怎么办呢?别担心,因为大部分的网络是中心网关和节点之间的通讯,对于大多数终端设备来说,它们只需要和一个目标地址通讯,那就是网关,因此无需特别的设置,成百上千的设备仍能和网关实时通讯。但在一个超过80个节点的网络,网关要和所有设备进行实时通讯就会遇到困难。这是因为对网关来说,它的目标地址超过了模块中的路由表数量,当目标地址不在路由表上时,通讯时就需要执行AODV来寻址,这大约需要好几秒的时间,对于不赶时间的通讯这也算不上事,可是,如果想在大型的Zigbee网络,让网关也能实时和下面所有节点进行通讯,该怎么处理呢?
这其实就要用到XBee的Source Routing通信方式。
Source routing是指使用指定的路径进行数据传输的一种方式,在XBee中实现Source routing发送数据需满足:
- 发送方的AR不等于0xFF;
- 发送数据时,有0x21路径指示就位。
事实上XBee中有一个AR参数,它定义了主动更新路由信息的广播包的发送时间间隔。当XBee模块(通常是网关)的AR<FF时,就会在每隔AR定义的时间发一次收集路由的广播包,这种广播包会把经过的路由(包括始发和途经跳点)记录下来,每个收到该包的路由器节点就会把路径存下来,在下次发送数据之前先把该路由信息(0xA1路由指示帧)发给始发点(通常是网关)。所以采用Source Routing的网关,需要有张记录路由信息的表,并且应用程序需要及时处理和更新这张表。以便在发送数据时使用。
XBee中有一个参数DO,它可以配置模块工作中HighRAM还是LowRAM模式。这里的HighRAM其实就是用模块的RAM来存储路由表,模块通讯时,只要有个目标地址就能通讯,固件底层在通信过程中自动提供路由,无需应用程序干预。而工作在LowRAM时,相当于外部CPU来存储路由表。在HighRAM模式下,只有收到AR广播后,发送数据前才会将0xA1路由指示帧发给对方,而在LowRAM模式下,每次发送数据前会先发送A1路由指示帧给对方。对于使用Source Routing的模块,发送数据前需要根据之前收到过的0xA1路径指示,先装载一下目标地址和完整路由(0x21帧),以便数据能精准送到目标。