一、簡介
本文是將自己在學習 NXP BLE KW38 開發板 ( FRDM-KW38 ) 過程中, 如何透過軟硬體設置將 KW38 更進一步優化其核心的功耗表現.在調校的過程中,可以透過已有的開發板硬體與原廠低功耗範例程式碼, 一步步學習並調整 BLE各項參數對功耗所造成的影響.未來可以做為連接 NXP UWB 或是 NXP NFC的應用,如果是在車用應用領域, 則供電是來自汽車電瓶, 除了產品性能之外, 整體功耗的調校尤其重要, 避免因為吃電過大而造成汽車電瓶沒電而造成故障.
二、事前準備
1. 使用的開發軟體版本
IDE & SDK Download
Software Name
|
Software Version
|
MCUXpresso IDE
|
v11.3.1 [Build 5262] [2021-04-02]
|
MCUXpresso SDK
|
v2.6.15 (575 2022-04-22)
|
2. 使用到的範例程式碼 :
3. 使用的硬體開發板與線材 :
開發板:FRDM-KW38 x2
線材 : Micro USB Cable x2
三、硬體調校 ( Hardware tuning )
硬體調校的目的是將開發板去除不必要的功耗, 讓電流表能夠量測到 KW38 核心功耗.
1. 將開發板 J24 與 J28 背後金屬連接線割斷 ( 以 Buck mode 量測 ) , 如下圖Buck mode 可查閱 NXP 原廠技術文件 AN5025.pdf 有更詳細的說明.
2. 電流表串聯量測 :
正極連接J32Pin1, 負極連接 J35Pin2, 如下圖紅框為 J35 位置
3. 開發板 Jumper 設置如下 :
|
Jumper Name
|
Jumper Shorted
|
J38 Pin2 - Pin3,
J29 Pin1 - Pin2,
J31 Pin1 - Pin2.
( PCBA背後已有金屬線連接)
|
Jumper Removed
|
J24, J27, J28, J30
(PCBA 已割線或原本未連接)
|
4. 電源輸入 ( Power supply )
USB connector ( J11 ) +5V
5. PCBA Rework 如下 :
R21 增加 10K 歐姆電阻 ( default : DNP ) , 將 /CS 腳位保持在 High 準位, 避免吃電.
6. 更新韌體時的配置 :
若是透過 OpenSDA ( J11 ) 來更新 KW38 韌體, 需要做以下確認
|
硬體配置
|
更新韌體
|
1. USB +5V供電,
2. J28 Pin1-Pin2 shorted
3. J35 Pin1-Pin2 shorted
(更新完成後需將 J28 Jumper 移除)
|
四、韌體調校 ( Firmware tuning )
韌體調校是可以透過參數的調整, 讓 KW38 本身在不同的 BLE 狀態 ( Scan / Asverse / Connected /Disconnected )達到相同的執行效能之外, 獲得更好的整體功耗表現.
1. 腳位設定, 可參照 pin_mux.c
若入進 idle amode, 則 BLE 不工作時, 需對照 datasheet 將使用到的腳位還原至預設值 ( default setting ) , 避免該腳位產生功耗, 如下範例 :
2. 確認 wakeup pin 設定, 如下是將 Button SW3 設置為 wakeup pin
PWR_SetWakeupPins(BOARD_WAKEUP_PIN_KEYBOARD_BITMAP)
|
3. 開機後是否立即進行 BLE 動作,
預設是 BleApp_Config() 後直接執行 BleApp_Start()
若需有條件的運作 BLE , 可對 BleApp_Start() 設置執行條件.
如下為預設值部分程式碼 :
void BleApp_GenericCallback (gapGenericEvent_t* pGenericEvent) {
switch (pGenericEvent->eventType)
{
case gInitializationComplete_c:
{
/*!< Initial setup started by Ble_HostInitialize is complete. */
/* Configure application and start services */
BleApp_Config(); //after BleApp_config() , then BleApp_Start()
}
|
4. 電壓輸出DCDC converter pin13 ( VDD_1P8 ) 設定, 可參照 board.c 的 mDcdcDefaultConfig,當設置超過1V8 則KW38核心功耗也會隨著該設置數值增加而上升.
static const dcdcConfig_t mDcdcDefaultConfig ={
#if APP_DCDC_MODE == gDCDC_Buck_c
.vbatMin = 1800U,
.vbatMax = 4200U,
#endif
.dcdcMode = (uint8_t)APP_DCDC_MODE,
.vBatMonitorIntervalMs = APP_DCDC_VBAT_MONITOR_INTERVAL,
.pfDCDCAppCallback = NULL, /* .pfDCDCAppCallback = DCDCCallback, */
.dcdcMcuVOutputTargetVal = gDCDC_McuV_OutputTargetVal_1_500_c,
#if defined(gDCDC_3p3V_Output_d) && (gDCDC_3p3V_Output_d == 1U)
.dcdc1P8OutputTargetVal = gDCDC_1P8OutputTargetVal_3_300_c
#else
.dcdc1P8OutputTargetVal = gDCDC_1P8OutputTargetVal_1_800_c
#endif
};
|
DCDC 部分需要確認以下兩點 :
4-1 控制 VDD_1P8 輸出電壓參數 ( dcdc1P8OutputTargetVal ) 可設置為1.65v ~ 3.5v
typedef enum {
gDCDC_1P8OutputTargetVal_1_650_c = 0U,
( 中間設定值省略 )
gDCDC_1P8OutputTargetVal_2_800_c = 0x20U,
( 中間設定值省略 )
gDCDC_1P8OutputTargetVal_3_500_c
}dcdc1P8OutputTargetVal_t;
|
4-2 VDD_1P8 輸出電壓必須大於 KW38 pin15 VDD_1P5OUT,
否則會導致 KW38 系統崩潰, 實際韌體中設定為以下 :
// VDD_1P5OUT 輸出1.5v
.dcdcMcuVOutputTargetVal = gDCDC_McuV_OutputTargetVal_1_500_c,
// VDD_1P8 輸出1.8v
.dcdc1P8OutputTargetVal = gDCDC_1P8OutputTargetVal_1_800_c
|
5. 低功耗模式開關設置
#define cPWR_UsePowerDownMode 1 //開啟低功耗模式
#define cPWR_UsePowerDownMode 0 //關閉低功耗模式
|
6. 低功耗模式選擇
在 NXP SDK v2.6.15 當中 低功耗模式有以下可以選擇 :
依 BLE 狀態選擇不同的低功耗模式, 如下 :
使用的低功耗模式
|
DSM (Deep Sleep Mode )
|
MCU state
|
PWR_APP_STATE_ADV
PWR_APP_STATE_SCAN
|
DSM1
設計給 BLE 在活動狀態使用
BLE status :
Scan / Advertise / Connected
|
LLS2 (Low Leakage Stop 2)
- NVIC 關閉, SRAM 仍可使用.
MCU 可被以下介面喚醒 :
- LLWU ( Low Leakage Wake-Up )
- LPTMR ( Low-power Timer )
- BLE LL (BLE Link Layer )
|
PWR_APP_STATE_CONN
|
PWR_APP_STATE_NO_ACTIVITY
|
DSM4
設計給 BLE 在空閒狀態使用
BLE status :
Idle / Disconnected
|
VLLS0/1 (Very Low Leakage Stop0/1)
- 大多數週邊被關閉, SRAM斷電.
MCU 可被以下介面喚醒 :
- LLWU ( Low Leakage Wake-Up )
- DCDC PSwitch hardware pin
|
7. 相關BLE 參數調整
修改 BLE 參數會非常明顯地影響功耗的表現, 但因為同時也會影響 BLE 的運作行為,所以一般在功耗優化或功耗比較, 會讓 BLE 參數保持前後一致.若有規格需求或專案必要性再來相對應的修改.
BLE 參數如下 :
7-1 BLE 掃描 ( BLE Scanning )
掃描間隔參數越大, 單位時間內 BLE 掃描次數就會減少, 從而降低功耗.
掃描窗口參數越大, 越容易捕捉 BLE 廣播的訊號, 但也容易增加功耗.
#define gAppScanWindow_d 0x0010U //掃描窗口設置
#define gAppScanInterval_d 0x0010U //掃描間隔設置
|
7-2 BLE 廣播 ( BLE Advertising )
廣播間隔參數越大, 單位時間內 BLE 廣播次數就會減少, 從而降低功耗.
#define gAppAdvertisingInterval 0x320 //廣播間隔設置
|
7-3 BLE 已連接 ( BLE Connection )
連接間隔參數越大, BLE 主從裝置之間交互頻率就會減少, 從而降低功耗.
#define gcConnectionIntervalMinDefault_c 40U //連接間隔設置
|
五、功耗優化後數據與結果
1. 硬體使用 FRDM-KW38 開發板, SDK version 為 v2.6.15 , 功耗測量記錄如下
( 表格內皆為電流平均值)
BLE status
|
frdmkw38_lp_master_freertos
|
frdmkw38_lp_freertos
|
Scanning
|
原廠結果 : 10.6mA
優化結果 : 5.1mA
|
x
|
Advertising
|
x
|
原廠結果 : 0.5mA
優化結果 : 0.3mA
|
Connected
|
原廠結果 : 0.4mA
優化結果 : 0.3mA
|
原廠結果 : 0.4mA
優化結果 : 0.3mA
|
IDLE ( Disconnected )
|
原廠結果 : 8uA
優化結果 : 5uA
|
原廠結果 : 8uA
優化結果 : 5uA
|
六、結語
產品的整體功耗優化其實就是在各個軟硬體的細節中了解其功耗產生的原因, 並分類這是否為必要的功耗, 如果不是必要的,那麼該如何去根據實際情況修改, 本文只是拋磚引玉, 分享一些自己學習上的心得, 提供給大家, 希望對各位有幫助.
七、參考來源
1. NXP 技術文件 AN12459 《Kinetis KW38 Power Consumption Analysis》
2. NXP KW38 線路圖 SPF-43110_B1.pdf
3. NXP 技術文件 AN5025 《MKW4xZ/3xZ/3xA/2xZ DC-DC Power Management》
4. NXP 技術文件 KW38 Datasheet 《MKW39/38/37 Data Sheet》
★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。
★博文作者未開放評論功能