找回密码
 立即注册

微信扫码登录

查看: 64|回复: 10

[BLE SDK] 心率测量时,mcu不进入deep-retention sleep 模式的问题

[复制链接]

2

主题

6

回帖

34

积分

英勇黄铜

积分
34
发表于 3 天前 | 显示全部楼层 |阅读模式 来自 广东深圳
Information
说明:   建议参照本版块置顶帖内容输入必要信息
芯片型号: TL7218
SDK及版本: V4.0.4.5
3d61a9ae-c499-4b2a-b67d-bf830fc7d429.png bc28e0b5-d485-4235-aa5f-ab336cca2051.png
在7218平台上,移植天易合芯HX3697心率模块的驱动、算法包,功能ok, 但是功耗有问题,没有按照代码设定 进入 deep-sleep。

如上图所示:  hx3697 驱动 代码需要用两个timer, 一个40ms的用作 AGC 调光; 另一个280ms的用作 读取 PPG -FIFO 数据 并且跑 算法;
从图上看,40ms的timer没有问题, 320ms的timer,执行完成后 mcu 有200ms的时间内 一直处于 suspend 状态(板子电流2ma左右); 按照代码里面的设定,idle 时间超过20ms,就应该进入 deep sleep 的。

3d61a9ae-c499-4b2a-b67d-bf830fc7d429.png
bc28e0b5-d485-4235-aa5f-ab336cca2051.png

2

主题

6

回帖

34

积分

英勇黄铜

积分
34
 楼主| 发表于 3 天前 | 显示全部楼层 来自 广东深圳
上面文字描叙有一个错误:  ppg timer  是 280ms; hx3697 原本代码是320, 我在调试的时候改为了280;
另外:代码中所用的为 free rtos 的 timer

0

主题

7

回帖

44

积分

英勇黄铜

积分
44
发表于 前天 14:18 | 显示全部楼层 来自 上海
1. 贴一下 app_process_power_management 这个函数
2. 有没有配置GPIO PAD唤醒
3. 把PM关掉看一下整板底电流是2mA左右吗?

2

主题

6

回帖

34

积分

英勇黄铜

积分
34
 楼主| 发表于 前天 19:55 | 显示全部楼层 来自 广东深圳
pm.png

IO 中断有两个:  
     1、IO_PA6   g-Sensor 中断
     2、IO_PA5   充电中断。
pm.png

2

主题

6

回帖

34

积分

英勇黄铜

积分
34
 楼主| 发表于 昨天 09:29 | 显示全部楼层 来自 广东深圳
    #if defined(__CW_COMMON__)
    else if (1 || cw_heap_is_being_used() || bsp_service_is_busy()) {        // Taylor.Le, __CW_COMMON__ cw-heap没有释放、或者 bsp-busy 时,禁止 deep-sleep
        blc_pm_setSleepMask(PM_SLEEP_DISABLE);
    }
    #endif
刚刚试了一下, 把上面代码改为 if (1 || ...) 后,测量得的待机电流就是2毫安左右

2

主题

6

回帖

34

积分

英勇黄铜

积分
34
 楼主| 发表于 昨天 09:56 | 显示全部楼层 来自 广东深圳
5d2ecec0-f34c-45a8-b5a7-addebafffa06.png

这张测量电流的图片:   当 OS timer 响应完成后,系统有131毫秒的 suspend 状态,直到一次蓝牙广播的时间到达后,才进入 deep sleep 模式; 按照代码设置,超过20ms就应该进入deep sleep;
5d2ecec0-f34c-45a8-b5a7-addebafffa06.png

0

主题

7

回帖

44

积分

英勇黄铜

积分
44
发表于 昨天 11:25 | 显示全部楼层 来自 上海
Taylor.Le 发表于 2026-8-19 09:56
这张测量电流的图片:   当 OS timer 响应完成后,系统有131毫秒的 suspend 状态,直到一次蓝牙广播的时 ...

中间那段没有进休眠的时间,确认下 PA6  和 PA5  是不是一直处于唤醒的状态,假设你设置的高电平唤醒,是不是这俩IO一直处于高电平状态,这也会导致一直进不了休眠。

另外,也可以在 app_process_power_management 这个函数中所有 blc_pm_setSleepMask(PM_SLEEP_DISABLE); 的地方加log或者IO翻转,来进一步确认是哪个条件触发了不进休眠。

0

主题

7

回帖

44

积分

英勇黄铜

积分
44
发表于 昨天 11:37 | 显示全部楼层 来自 上海
Taylor.Le 发表于 2026-8-19 09:56
这张测量电流的图片:   当 OS timer 响应完成后,系统有131毫秒的 suspend 状态,直到一次蓝牙广播的时 ...

这里的131ms应该是没进休眠,不是进了suspend状态, 可以在 user_set_flag_suspend_exit 这个函数中加log或者IO翻转来确认是不是进suspend状态了,进入suspend唤醒后会调用这个回调函数

2

主题

6

回帖

34

积分

英勇黄铜

积分
34
 楼主| 发表于 昨天 15:21 | 显示全部楼层 来自 广东深圳
ac21cee1-cc6d-4ed8-80bc-3457ac99d209.png 9ee8c103-fd58-4057-86cb-a7c20b548ea2.png 4dc0a6c9-fd92-4f02-902b-24ab247706f7.png

在开发板上执行 acl_peripheral_demo 这个工程,  修改:
1、 蓝牙广播间隔为 500ms;
2、 DeepsleepRetentionThreshold 为 20ms;  
3、 在 ble_task  函数中启动一个 320ms 的 os timer。
从测量的板子电流图上看, 每次ble广播之后, 系统可以进入 低功耗模式;  但是 os timer 响应完成后,系统进不了低功耗。
ac21cee1-cc6d-4ed8-80bc-3457ac99d209.png
9ee8c103-fd58-4057-86cb-a7c20b548ea2.png
4dc0a6c9-fd92-4f02-902b-24ab247706f7.png

2

主题

6

回帖

34

积分

英勇黄铜

积分
34
 楼主| 发表于 昨天 15:24 | 显示全部楼层 来自 广东深圳
开发板型号: bb67fd55-c409-4f34-b772-4b873f65ccbe.png
bb67fd55-c409-4f34-b772-4b873f65ccbe.png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Telink forum ( 沪ICP备17008231号-1 )

GMT+8, 2026-8-20 12:56 , Processed in 0.098897 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表