關鍵詞:S2LP, Sniff 模式,低功耗
目錄預覽
1、引言
2、預設應用場景
3、LDC/Sniff 模式簡介
4、解決方案
5、小結
01
引言
某些客戶在其 S2LP 的設計方案中,發送端設備常供電,可以不考慮低功耗;而接收端設備一般用電池功能,對低功耗的要求比較高。發送和接收端的通訊是異步的,也就是說發送端在滿足某些檢測條件的情況下,可以在任意時刻發送數據包;而要求接收端設備在滿足其低功耗要求的情況下,及時接收到數據包,保證響應的實時性。針對以上的應用場景,一般推薦客戶使用 S2LP 的 sniff 模式。
02
預設應用場景
發送端設備(如煙感設備等)可能隨時收到警報信息,在任意時刻收到警報信息后將連續發送數據包,連續發包時長 10 秒鐘。
圖1.數據包格式
根據圖 1 數據包格式,可知前導碼占 576 個 bit,同步字 4 字節,用戶數據占 25 個字節,采用 1 字節 CRC 校驗字段。
? 數據包中每個 bit 發送的時間= 1/38.4Ksps≈26us。
? 前導碼時長=576/38.4Ksps=15ms。
? 前導碼+同步字時長= (576+32)/38.4Ksps=15.83ms。
? 完整數據包發送時長=(576+32+200+8)/38.4Ksps = 21.25ms。
接收端設備要求每 8 秒鐘喚醒一次,連續檢測 100ms,并確保不會漏掉這 100ms 時間窗口中內的有效數據包。并在 100ms 以后進入低功耗模式。
03
LDC/Sniff 模式簡介
S2LP 支持 LDC (Low Duty Cycle) 和 Sniff 這兩種模式,這兩種模式都可以實現低功耗。區別在于 LDC 模式實現發送、接收端的同步通信;而 Sniff 模式是基于 LDC 模式,在兼顧低功耗的要求的同時支持異步通信。
如圖 2,LDC 模式示意圖。發送端和接收端設備按照約定的喚醒周期同步進入發送、接收狀態和進入低功耗模式。接收端為了保證不丟包,會在約定的喚醒時間點之前喚醒并提前進入接收狀態。
圖2.LDC 模式
如圖 3 所示,Sniff 模式示意圖。Sniff 模式下的 S2LP,按照喚醒定時器 (Wakeup Timer) 設定的喚醒時間有規律地從睡眠狀態喚醒,并開啟一個非常短的稱為 FastRX 的接收窗口。在這個 FastRX 接收窗口中檢測信號強度 (RSSI 值) 。如信號強度低于設定的閾值,則認為外部沒有發送數據包,接收端在 FastRX 窗口結束后快速進入睡眠狀態;如檢測的信號強度值高于閾值,說明檢測到有效數據包在發送,則啟動接收超時定時器(RX Timeout),接收端繼續保持接收狀態,如在超時時間內檢測到有效的同步字字段,則停止接收超時定時器,并繼續保持接收狀態直到接收到完整的數據包后進入低功耗模式;如在超時時間內沒有檢測到有效的同步字則在接收超時后立刻進入低功耗模式。
圖3.Sniff 模式
04
解決方案
基于 ST 官方提供的 S2LP 的 SDK 軟件包中的 SDK_Sniff_B 項目實現上述預設應用場景中接收端的功能。代碼更改量不多,但基本可以實現預設應用場景中的要求。
基于原始代碼,更改函數 SysTickUserAction(圖 4),借助于 lSystickCounter 計數變量,實現 8 秒鐘和 8 秒窗口開始邊界后 100ms 的計時。具體更改內容請參考附件“SDK_Sniff_B.c”
圖4.函數 SysTickUserAction 更改內容
在 8 秒窗口開始時間點通過調用函數“S2LPTimerLdcrMode(S_ENABLE);”使能 Sniff模式;在 100ms 時間窗口結束時通過調用函數“S2LPTimerLdcrMode(S_DISABLE);”關閉 Sniff 模式。并調用函數 “S2LPCmdStrobeSleep();”進入低功耗。
需要注意的關鍵點:
? 為了不錯過發送端的前導碼,需要將接收端的喚醒定時器設定的時長設定為小于數據包格式中前導碼的發送時長。
? 接收端的接收超時時間(RX Timeout)的時長≥前導碼時間+同步字時間,但在滿足條件的情況下盡量使用小的設定值,有助于降低功耗。
? 初始化結束后通過函數“S2LPTimerLdcrMode”可以直接打開、關閉 sniff 模式。并結合函數“S2LPCmdStrobeSleep();”控制 S2LP 的低功耗模式。
4.1.驗證方法和結果
4.1.1. 接收端功能測試平臺
使用一套“NUCLEO-L053R8+X-NUCLEO-S2868A1”測試平臺運行更改后的SDK_Sniff_B 項目程序。使用 ST 官方提供的 X-NUCLEO-LPM01A 功耗測試板,通過 XNUCLEO-S2868A1 板上的 JP1 測試 S2LP 的工作狀態, 通過抓取 S2LP 的實時功耗確認預設場景中 8 秒時間窗口和 100ms 接收窗口的定時是否正確?以及 S2LP 是否能正確進入低功耗模式?測試平臺如圖 5 所示
圖5.測試平臺
測試結果如圖 6 所示,上電初始化后,由于已經使能了 sniff 模式,但第一個 8 秒窗口計時還沒有溢出,所以一直保持sniff工作模式(客戶也可以更改代碼使其在初始化后立刻進入低功耗模式)。第二個 8 秒窗口開始后的 100ms 還處于 sniff 工作狀態。當第二個 8 秒窗口中的 100ms 接收窗口結束后,S2LP 進入低功耗模式。后續的 8 秒窗口以此類推。從圖6 中還可以看到每個 100ms 中有 7 個 FastRX 窗口,這是因為原始代碼中把喚醒時間設定為差不多 12.9ms(必須小于前導碼時間 15ms),那么在 100ms 的接收窗口里正好可以容納7 個 FastRX 快速接收窗口。
圖6.S2LP 功能測試結果
根據圖 6 測試結果,證明更改后的 SDK_Sniff_B 代碼運行結果符合預設應用場景的要求。
4.1.2. 驗證數據包發送接收
發送接收測試平臺如圖 7, 使用兩套 NUCLEO-L053R8+X-NUCLEO-S2868A1 測試平臺:
? DevB 作為接收端,運行前面的 SDK_Sniff_B 程序。
圖7.發送接收測試平臺說明
? DevA 模擬應用場景中的發送端設備,燒錄 SDK 中默認的 S2LP_CLI_Project 程序,通過 USB 線連接 PC 段的 GUI 工具(如圖 8) 。按照預設場景分別設定調制方式為 2-FSK,前導碼,用戶數據(Payload)。保證連續發送的數據包數量和發送間隔的設置值使發送端的連續發送時間維持 10 秒鐘。
圖8.S2LP GUI 工具界面及參數設定
驗證結果,S2LP GUI 工具每次點擊“START”按鍵,在其連續過程中接收端設備必然可以收到一個數據包,則實驗結果成功。
圖9.數據包接收狀態
05
小結
S2LP 支持的 LDC 模式和 sniff 模式都是低功耗模式,LDC 模式支持同步通訊的場景,Sniff 模式支持異步通訊模式??蛻艋谧约旱膽脠鼍?,可以選擇合適的模式。另外通過附加的定時控制 S2LP 在 sniff 模式下的工作時長可以進一步降低 S2LP 的功耗。
-
單片機
+關注
關注
6039文章
44583瀏覽量
636526 -
STM32
+關注
關注
2270文章
10910瀏覽量
356616
原文標題:實戰經驗 | 如何使用 S2LP 的 sniff 模式同時滿足通訊和低功耗要求
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論