本文使用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为20ms
    GAP_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);
posted on 2025-10-29 11:25  WCH蓝牙应用分享  阅读(12)  评论(0)    收藏  举报