Frequency Hopping 特征:
网络设备在不同频率间切换。基于DFE模式(direct frame exchange WI-SUN FAN spec v1.0),TI 15.4支持无缝隙频道切换。FH模式只有在SUB 1G频带才支持。
FH支持两类设备
Sleepy End Dev:不自己切换频道,但是跟随collector。所有与此类设备的通信应使用短地址。
/*! Rx on when idle, false for sleepy device, true for non sleepy device */
#define CONFIG_RX_ON_IDLE false
这个宏决定设备是否sleepy。
Non-Sleepy End Dev:既可以切换不同频道,又可以使用固定频道。与此类设备通信应使用扩展地址。
广播的实现:
简单说,在FH下的广播类似于时分复用,每FH_BROADCAST_INTERVAL ms内留下FH_BROADCAST_DWELL_TIME ms的时间用于广播的收发。在此时隙内, End Dev(coordinator也会吧?)都切换到广播频道进行通信,过了这个时隙,又切回单播频率,对于sleepy End dev可能又回去躺尸了(因为人家sleepy嘛)。
广播相关宏:
/*!
FH Application Broadcast Msg generation interval in ms.
Value should be set at least greater than 200 ms,
*/
#define FH_BROADCAST_INTERVAL 10000//这里应是值每10000ms有一个广播时隙
/*! FH Broadcast dwell time. If set to 0, it shall disable broadcast hopping and
* broadcast message transmissions in FH Mode */
#define FH_BROADCAST_DWELL_TIME 0 //一个广播时隙占用的时间,为0则表示禁止广播。
参考 sendBroadcastMsg()写广播发送程序。
再后来发现广播次数很少,如果用广播的话,在sleepy设备上要求每隔一段时间就醒过来等待广播接收,而且要广播快速传出去则间隔时间要越短越好,也就意味着sleepy设备需要频繁地被唤醒以准备接收广播。在广播命令不太多的情况下,这样做是不合理的,因为醒来很多次只不过为了一两次的广播数据,导致系统耗能加重,sleepy end device是电池供电的,划不来。于是换了思路,对每个node 设备发送一次消息好了,反正设备不多,数据不多,不算麻烦,至少节能。