蓝牙唤醒方案

本文详细介绍了BT设备进入深睡模式的流程,包括软件触发的条件和寄存器配置,以及两种唤醒方式:自动唤醒和软件唤醒。自动唤醒涉及RTC周期和特定时钟门控,而软件唤醒需要强制开启BTAHBclock。在唤醒过程中,硬件会生成信号并触发中断,进行时钟补偿以确保精确的时间管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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信号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值