淺談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)。