本文更新中,希望大家补充,目前仅对S2C探讨,未来会加入XBee3的相关更新。
XBee S2C模块,如果仅连接电源线可以测得,在待机情况下,大约是10.5mA左右的电流,在休眠时的功耗可以低到0.5uA。可以知道,休眠几乎不耗电。在Spec上标的待机功耗会比实测只接电源线耗电更高,这时因为实际应用中我们还常接上uart等IO引脚。实际上,终级的低功耗控制往往也和通信引脚和控制引脚(比如休眠使能线)密切相关,不同的CPU串口功耗也不尽相同。一般说来,CMOS的UART省电些,TTL的耗电些。此外Digi模块内部有上拉(29K),除非为了电平转换,否则没必要在通信线上再加上拉电阻,以免并联后消耗更多静态电流。对于一些CPU本身串口比较耗电,则应在通信线上加电压型的隔离器,以尽可能减少功耗,GPIO控制线如果不需要请不要接上拉或是用管子隔离,以减少引脚休眠线的电流。

XBee ZB支持三种休眠模式:

  • 引脚休眠 (SM = 1)
  • 周期休眠 (SM = 4)
  • 周期休眠加引脚唤醒 (SM = 5)

一个ZigBee的休眠节点在醒来后马上和醒来时每隔100ms去向父节点索取缓存的数据包(这个过程我们称为polling)。当休眠节点进入睡眠模式时:

  • On/Sleep拉低(de-asserted)以宣示模块进入睡眠模式;
  • 如果CTS硬件流控被启用,CTS拉高(de-asserted)来提示串口数据不该再送往模块;
  • 如果入网指示Associate引脚被配置使用,它将被拉低以防止电源用于点亮联网提示灯;
  • 如果用到引脚唤醒,睡眠请求引脚Sleep_RQ(D8)被配置为下拉输入口以便外部设备可以拉高来使模块休眠(仅用于 SM = 1 或 SM = 5);
  • 其它引脚则不会有任何变化,以便按用户配置方式应用。

当XBee模块从睡眠中醒来:

  • On/Sleep引脚被拉高以宣示模块醒来;
  • 如果CTS流控被启用,CTS引脚拉低表示模块准备好接收串口数据;
  • 如果入网指示Associate引脚被配置使用,它拉高继续之前的预配置行为;
  • 其它引脚则不会有任何变化,以便按用户配置方式应用。

周期休眠的参数

参数 名称 默认值 描述
SP 休眠周期 0x20,即320ms 模块的休眠周期
SN 休眠周期数量 配置SP的倍数以扩展休眠时间
ST 醒来时间 定义醒着时,在结束数据收发后保持醒着的时间
SO 休眠选项 定义休眠模式行为的选项: 0x02 不管有无数据总是醒ST;0x04 启用扩展休眠 SN*SP

* commissioning按键会唤醒设备30s
* SP最大可设置28s,加上扩展休眠的设置,最长一次休眠可达21天左右
* 模块醒来后先poll数据,除非用SO强制它总是醒一定时间,否则无活动会立即休眠,ST实际上是数据活动结束后的计时器,在计时期间有数据会重置这个计时器

用XCTU来测试休眠行为

XCTU上的终端窗口有部分9针串口引脚电平指示和引脚电平控制,只是许多人不知道这个特性。 指示电平用深色背景时表示低电平,控制电平当选中时表示启用。当然模块也不是并不是默认有对应的引脚或是有把GPIO往串口对应信号去接。毕竟这些信号是有些类型的调制解调器和计算机通信时用的。下面更出我们有用的。

电平 说明
/CTS D7,由模块控制的指示电平,低电平有效,默认为低电平,表示通知电脑要送数据,休眠变高平,流控时变高电平
CD 模块无对应引脚,表示有载波,无用
DSR 模块无对应引脚,通知计算机,可以发信息过来,无用
/DTR或Sleep_RQ D8,计算机或主控对模块的控制电平,低电平有效(默认),通知模块可进行传输,或是唤醒模块
/RTS D6,计算机控制,表示请求发送,低电平有效(默认),高电平表示流控,不要再收了,模块默认不启用以防止缓冲溢出

*休眠时,在XCTU上对DTR/Sleep_RQ去掉勾选状态,即拉高该引脚,表示让模块进入休眠状态,此时CTS也会变高电平,说明在休眠中。
*RTS是主控的流控,不可长时间启用以防止接收数据没法发给主机,所以默认不对主控进行流控,而最多是对模块进行流控(CTS)。