浅谈Digi XBee模块的休眠模式
2020-3-25
Digi 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引脚被配置使用,它拉高继续之前的预配置行为;
其它引脚则不会有任何变化,以便按用户配置方式应用。
休眠指令:
命令 | 描述 | 参数范围 | 默认值 |
SM | Sleep mode: 0-不休眠; 1-管教休眠;通过SLEEP_SQ管脚来控制模块的休眠/唤醒状态SLEEP_SQ Line。 4-异步周期休眠; 5-异步周期休眠; 6-7-休眠支持模式; 7-8-同步周期休眠模式 | ||
SO | Sleep option休眠选型 对于同步休眠模式: Bit0=首选休眠协调器; Bit1=非休眠协调器; Bit2=使能API休眠状态消息; Bit3=关闭提早唤醒; Bit4=开启节点类型平等; Bit5=关闭单独协调器同步重发; 对于异步休眠节点: Bit8=总是在ST时间内唤醒。 | ||
SN | Number of sleep periods休眠周期数 | 1~0xFFFF | 1 |
SP | Sleep period休眠周期 此命令定义了每个轮换周期内模块休眠的时间。 | 1~1440000 | 2s |
ST | Wake time唤醒时间 | 0x45~0x36EE80 | 0xD0(2s) |
WH | Wake host唤醒主机 | 0~0xFFFF | 0 |
休眠诊断命令:
SS | Sleep status休眠状态: bit0: Bit1: Bit2: Bit3: Bit4: Bit5: Bit6: | 只读 | 0x40 |
OS | Operational sleep period运行的休眠周期 | 只读 | 0x12C |
OW | Operational wake period运行的唤醒周期 | 只读 | 0 |
MS | Number of missed syncs丢失同步数 | 只读 | 0 |
和休眠相关的IO设置命令:
D8 | DIO8/SLEEP_RQ配置: 0=输入,不监测; 1=休眠请求; 3=数字输入,监测; 4=数字输出低; 5=数字输出高。 | ||
D9 | DIO9配置: 0=输入,不监测; 1=ON/SLEEP; 3=数字输入,监测; 4=数字输出低; 5=数字输出高。 |
周期休眠的参数
参数 | 名称 | 默认值 | 描述 |
SP | 休眠周期 | 0x20,即320ms | 模块的休眠周期 |
SN | 休眠周期数量 | 配置SP的倍数以扩展休眠时间 | |
ST | 醒来时间 | 定义醒着时,在结束数据收发后保持醒着的时间 | |
SO | 休眠选项 | 定义休眠模式行为的选项: 0x02 不管有无数据总是醒ST;0x04 启用扩展休眠 SN*SP |
* commissioning按键会唤醒设备30s * 模块醒来后先poll数据,除非用SO强制它总是醒一定时间,否则无活动会立即休眠,ST实际上是数据活动结束后的计时器,在计时期间有数据会重置这个计时器。
关于睡眠的几个常见问题:
1、xbee 短睡眠周期(SP)是多少?
SP的范围值是320毫秒到28秒。
2、xbee 最长睡眠周期是多少?
SP最大可设置28s,加上扩展休眠的设置,最长一次休眠可达21天左右,计算如下:T=SN*SP=FFFF*AF0*10MS=65535*2800*10=1,834,980,000毫秒=1834980秒=509.7小时=21.2天。
3、xbee 引脚休眠相关的管脚是什么状态?
Sleep_RQ(pin9 置高),CTS(pin12 置高),On/Sleep(pin13置低)指示模块处于休眠状态。
4、xbee唤醒期间多长时间轮询一次父节点?
digi 的xbee从休眠到唤醒后,每100毫秒轮询一次父节点,轮询一次要用10毫秒。
5、如何让Xbee模块快速进入休眠模式?
Xbee 模块在接收完数据后,发送SI这个指令,进入休眠,节约功耗。
6、Digi ZB引脚休眠切换到唤醒发数据要多长时间?
ZB引脚休眠的时候,从休眠到唤醒发送数据,要有一个时间的过程。就是有的客户反映的是:发送数据慢。
测试结果一:5秒
测试条件:
协调器:VERSION =2164;SC=4;PANID=1234;AR=0
节点:VERSION=2864;SC=4;PANID=1234;SM=1
软件:X-CTU; 秒表
测试结果二:10秒
协调器:VERSION =2164 缺省值
节点:VERSION=2864;SM=1
软件:X-CTU; 秒表
测试方法一:
1. 按上述条件,配置好两个模块的参数,并且能正常通讯。
2. 节点这端,从Modem Configuration 切换到Terminal,并敲字符”a” ,同时秒表开始计时。
3. 协调器这端,始终在Terminal这栏内,等待接收字符
4. 等协调器这端收到字符,立即停止秒表,就是这次测试从休眠到唤醒后能发数据的时间。
测试方法二:
利用JN=1,节点切换到唤醒,协调器收到节点上电通知。
用XCTU来测试休眠行为:
XCTU上的终端窗口有部分9针串口引脚电平指示和引脚电平控制,只是许多人不知道这个特性。
指示电平用深色背景时表示低电平,控制电平当选中时表示启用。当然模块也不是并不是默认有对应的引脚或是有把GPIO往串口对应信号去接。毕竟这些信号是有些类型的调制解调器和计算机通信时用的。
电平 | 说明 |
/CTS | D7,由模块控制的指示电平,低电平有效,默认为低电平,表示通知电脑要送数据,休眠变高平,流控时变高电平 |
CD | 模块无对应引脚,表示有载波,无用 |
DSR | 模块无对应引脚,通知计算机,可以发信息过来,无用 |
/DTR或 Sleep_RQ | D8,计算机或主控对模块的控制电平,低电平有效(默认),通知模块可进行传输,或是唤醒模块 |
/RTS | D6,计算机控制,表示请求发送,低电平有效(默认),高电平表示流控,不要再收了,模块默认不启用以防止缓冲溢出 |
*休眠时,在XCTU上对DTR/Sleep_RQ去掉勾选状态,即拉高该引脚,表示让模块进入休眠状态,此时CTS也会变高电平,说明在休眠中。
*RTS是主控的流控,不可长时间启用以防止接收数据没法发给主机,所以默认不对主控进行流控,而最多是对模块进行流控(CTS)。