5854|5

664

帖子

104

TA的资源

纯净的硅(中级)

楼主
 

BlueNRG-1 的低功耗模式 SLEEPMODE_NOTIMER参数 [复制链接]

  本帖最后由 gs001588 于 2018-3-5 09:25 编辑

BlueNRG-1 的低功耗模式 SLEEPMODE_NOTIMER参数

  在测试“BLE_Beacon”工程时,有个参数一直有疑问,那就是关于SLEEPMODE_NOTIMER。
  出现在“BLE_Beacon_main.c”函数的第218行。

  BlueNRG_Sleep(SLEEPMODE_NOTIMER, 0, 0);
  SLEEPMODE_NOTIMER之后的两个参数都是0,也就是说没有任何唤醒源。对注释内容不太理解,只说了广播的间隔期间允许节能,但没有说如何唤醒。

  这里先借坛友“cruelfox”的帖子,这说明一下几种低功耗模式。见以下链接:
BlueNRG-1 的低功耗模式浅析
https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=611873&fromuid=449420
(出处: 电子工程世界-论坛)

BlueNRG-1 的低功耗模式
API级别硬件状态开启的时钟唤醒事件
SLEEPMODE_RUNNINGRunning16MHz & 32kHz--
SLEEPMODE_CPU_HALTCPU Idle16MHz & 32kHzIRQ *
SLEEPMODE_WAKETIMERSleep32kHzGPIO, BLE Timer (RESET)
SLEEPMODE_NOTIMERStandbyN/AGPIO  (RESET)

  的确对照各方面资料,SLEEPMODE_NOTIMER 时就是Standy状态。








  在AN4820的第10页找到如下说明。

  还是不明白为什么能够从Standby状态唤醒。猜想,会不会就没有进入Standby,而是进入了Sleep。

  在PM0275手册()的第47页找到了详细的注释。广播和连接间隔可以为SLEEPMODE_WAKETIMER的唤醒源。但是可不可以同时也为SLEEPMODE_NOTIMER的唤醒源,却不得而知


  在我提交的挑战赛程序中,其实也是用了SLEEPMODE_NOTIMER的,但是同时虚拟定时器也是使用了的,并且计时准确,说明32K的时钟是一直在工作的。那么应该是SLEEPMODE_WAKETIMER模式,而不是SLEEPMODE_NOTIMER模式,或者是由于某种原因自动由SLEEPMODE_NOTIMER转变到了SLEEPMODE_WAKETIMER模式


  也就说在这里执行的“BlueNRG_Sleep(SLEEPMODE_NOTIMER, 0, 0);”,实际等效于“BlueNRG_Sleep(SLEEPMODE_WAKETIMER, 0, 0);”。
  不知道,有没有对
SLEEPMODE_NOTIMER有个权威的解释。




最新回复

应该像你说的那样,执行BlueNRG_Sleep(SLEEPMODE_NOTIMER, 0, 0);实际执行的是BlueNRG_Sleep(SLEEPMODE_WAKETIMER, 0, 0); AN4820的3.4提到“如果无线模块处于连接状态,在与无线栈协商后,低功耗软件将低功耗模式更改为WAKETIMER” [attach]345748[/attach] 因为没找到官方说明,这是凭空猜测一下这句话的意思 这里说“连接”而没有说“连接和广播”应该是指在可连接模式下,如果已经连接则修改NOTIMER为WAKETIMER,如果处于广播模式则进入低功耗模式; 而在非连接模式下(Beacon)如果已经开启广播,则和连接模式下的已连接状态一样修改NOTIMER为WAKETIMER;   详情 回复 发表于 2018-3-5 10:22
点赞 关注
 
 

回复
举报

1903

帖子

0

TA的资源

版主

沙发
 
 
 

回复

1372

帖子

2

TA的资源

五彩晶圆(初级)

板凳
 
BlueNRG_Sleep() 会先检查允许休眠的级别,比如无线部分需要工作,就会修改请求的休眠模式。

点评

嗯,这么理解的话,就可以解释现象了。 谢谢  详情 回复 发表于 2018-3-5 20:21
 
 
 

回复

9720

帖子

24

TA的资源

版主

4
 
应该像你说的那样,执行BlueNRG_Sleep(SLEEPMODE_NOTIMER, 0, 0);实际执行的是BlueNRG_Sleep(SLEEPMODE_WAKETIMER, 0, 0);
AN4820的3.4提到“如果无线模块处于连接状态,在与无线栈协商后,低功耗软件将低功耗模式更改为WAKETIMER


因为没找到官方说明,这是凭空猜测一下这句话的意思
这里说“连接”而没有说“连接和广播”应该是指在可连接模式下,如果已经连接则修改NOTIMER为WAKETIMER,如果处于广播模式则进入低功耗模式;
而在非连接模式下(Beacon)如果已经开启广播,则和连接模式下的已连接状态一样修改NOTIMER为WAKETIMER;

点评

没找到官方说明,只好先这么理解。 cruelfox说的也有道理,就是无线的优级级超级高。要进入休眠模式,先检查无线是否需要工作,如果需要工作,那么就进入能够保证无线能够正常唤醒工作的模式。 在BlueNRG-1的手册  详情 回复 发表于 2018-3-5 20:40
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

664

帖子

104

TA的资源

纯净的硅(中级)

5
 
cruelfox 发表于 2018-3-5 09:38
BlueNRG_Sleep() 会先检查允许休眠的级别,比如无线部分需要工作,就会修改请求的休眠模式。

嗯,这么理解的话,就可以解释现象了。
谢谢
 
 
 

回复

664

帖子

104

TA的资源

纯净的硅(中级)

6
 
littleshrimp 发表于 2018-3-5 10:22
应该像你说的那样,执行BlueNRG_Sleep(SLEEPMODE_NOTIMER, 0, 0);实际执行的是BlueNRG_Sleep(SLEEPMODE_WAK ...

没找到官方说明,只好先这么理解。
cruelfox说的也有道理,就是无线的优级级超级高。要进入休眠模式,先检查无线是否需要工作,如果需要工作,那么就进入能够保证无线能够正常唤醒工作的模式。
在BlueNRG-1的手册中也没有说,广播和连接间隙可以作为唤醒源,而在“PM0275”蓝牙栈应用指导中即有可以是唤醒源相关描述。BlueNRG-1还有什么隐藏功能不好说。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表