蓝牙唤醒方案

BT 进deep sleep 由软件触发,退出deep sleep mode 有三种方式:

  1. Sleep Deepsltime auto wakeup
  2. 软件写soft_wake_req 寄存器提前唤醒BT(该寄存器在BT DM reg中,需确保有BT AHB clock)
  3. External wake up :外部唤醒源唤醒,目前有以下几个唤醒源:PMM GPIO,rtc tmr0/1,charger 充电唤醒,电池恢复电量唤醒

  1. Enter BT deep sleep mode
  1. BT 进deep sleep前,软件配置寄存器radio_sleep_en, osc_sleep_en, twext,twosc,twrm, deepsltime (寄存器功能描述请见寄存器文档)
  2. 软件触发进入Deep sleep 流程: 配置寄存器deep_sleep_en
  3. HW 经过最多不超过4个RTC cycle进入DEEP_SLEEP 状态,且拉高deep_sleep_stat

Deepsldur开始计数。在该clock cycle BT 16M clock 被clock gating,

  1. 再经过1个RTC cycle BT clock(clkncnt和finecnt)被low power clock domain register锁存,且拉低osc_en和 radio_en, bt ahb clock 被gating (影响soft wake up)

    

  1. BT deep sleep auto wakeup
  1. 在 BT sleep time到之前TWOSC个 RTC cycle osc_en 拉高, 使能BT ahb clock
  2. 在 BT sleep time到之前TWRM 个RTC cycle radio_en 拉高, 使能BT phy 16M工作时钟
  3. BT deepsldur达到设定的sleep time时,HW 产生wakeup 信号,同时打开BT 16M工作时钟
  4. 随后HW wakeup信号经过16M clock double sync 触发BT FSM工作,产生wake up interrupt,finecnt 恢复到sleep之前值,开始递减
  5. 软件在wakeup int中读寄存器DEEPSLDUR,得到当次SLEEP RTC cycle数,再根据RTC monitor的结果,计算本次需要补偿的BT clk值,配置寄存器FINECNTCORR ,CLKNCNTCORR和DEEP_SLEEP_CORR_EN
  6. 等待finecnt 减到0,将FINECNTCORR ,CLKNCNTCORR补偿到FINECNT 和CLKNCNT

注:DEEP_SLEEP_CORR_EN在第一个 finecnt 减到0之后使能也没关系,CLKN 会正常跳转

  1. 产生wakeup 后第一个 CLKN 中断,对齐312.5us边界

  1. BT deep sleep soft wake up

       Soft wake up 和 auto wake up基本流程一致,的主要区别如下:

  1. Soft_wake 前需force enable BT AHB clock(apb_glb1_reg中的peri1_bt_soc_en)
  2. Soft_wake_up 生效后osc_en 拉高, 等到TWEXT 时间后产生HW wake up信号


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部