本文使用CH592进行测试,
主机低功耗分为两个部分,一个是扫描状态,另一个是连接状态。
已EVT例程BLE目录下的Central例程为例,
1.将HAL_SLEEP(动态休眠降低功耗)和DCDC_ENANBLE(电源开启dcdc降低唤醒后运行功耗)设置为TRUE来达到最低功耗。
一.扫描状态
将上述的两个宏设置后会发现扫描状态的功耗仍有5-6mA左右,
那是为什么呢,因为默认的扫描间隔和扫描窗口是一样的,导致芯片一直在工作,没有空窗期所以没有时间去休眠,所以功耗还是会比较高,
可以在初始化时通过此接口配置扫描间隔和扫描窗口,将扫描窗口设置小于扫描间隔这样就有空闲的时间进行休眠。
uint8_t scan_int=32;uint8_t scan_wind=16;GAP_SetParamValue(TGAP_DISC_SCAN_INT, scan_int); //默认值为16为10ms,单位0.625ms 设置为32为20msGAP_SetParamValue(TGAP_DISC_SCAN_WIND, scan_wind); //默认值为16为10ms,单位0.625ms 设置为16为10ms
二.连接状态
将上述的两个宏设置后会发现连接状态的功耗在1mA左右,
那是为什么呢,因为默认的连接间隔可能交互的比较小,工作频率高导致功耗高,
可以进行连接间隔的交互,使用大一点的连接间隔来降低功耗。
1.主机初始化分配值:
// Connection min interval in 1.25ms #define DEFAULT_MIN_CONNECTION_INTERVAL 20 // Connection max interval in 1.25ms #define DEFAULT_MAX_CONNECTION_INTERVAL 100 // Connection supervision timeout in 10ms #define DEFAULT_CONNECTION_TIMEOUT 100 GAP_SetParamValue(TGAP_DISC_SCAN, DEFAULT_SCAN_DURATION); GAP_SetParamValue(TGAP_CONN_EST_INT_MIN, DEFAULT_MIN_CONNECTION_INTERVAL); GAP_SetParamValue(TGAP_CONN_EST_INT_MAX, DEFAULT_MAX_CONNECTION_INTERVAL); GAP_SetParamValue(TGAP_CONN_EST_SUPERV_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT);
2.连接后进行交互:
// Minimum connection interval (units of 1.25ms) #define DEFAULT_UPDATE_MIN_CONN_INTERVAL 20 // Maximum connection interval (units of 1.25ms) #define DEFAULT_UPDATE_MAX_CONN_INTERVAL 100 // Slave latency to use parameter update #define DEFAULT_UPDATE_SLAVE_LATENCY 0 // Supervision timeout value (units of 10ms) #define DEFAULT_UPDATE_CONN_TIMEOUT 600// start connect parameter update GAPRole_UpdateLink(centralConnHandle,DEFAULT_UPDATE_MIN_CONN_INTERVAL,DEFAULT_UPDATE_MAX_CONN_INTERVAL,DEFAULT_UPDATE_SLAVE_LATENCY,DEFAULT_UPDATE_CONN_TIMEOUT);