SYD8821低功耗

2019-04-13 12:20发布

SYD8821是具有全球领先低功耗(RX 2.4mA @-94.5dBm灵敏度,TX 4.3mA @0dBm输出功率)的蓝牙低功耗SOC芯片,在极低电流下实现了优异的射频性能,搭配176kB SRAM,512kB flash,非常适合中高阶可穿戴、智能家居、物联网等低功耗应用。具体可咨询:http://www.sydtek.com/
 

SYD8801低功耗

北京盛源达系列的产品的低功耗睡眠模式配置起来都是大同小异,主要关注如下几点: 1.在开机的ble_init函数中进行如下类似的配置: 在这里配置唤醒源,其中pw_cfg.timer_wakeup_en设置为1代表开启定时器唤醒的功能,pw_cfg.gpi_wakeup_en代表开始gpio唤醒的功能,pw_cfg.gpi_wakeup_cfg代表哪些GPIO能够唤醒,pw_cfg.gpi_wakeup_pol代表哪些GPIO的反相器要设置! 注意:SYD系列的芯片对于GPIO的睡眠有一个要求,在进入睡眠的时候MCU看到的唤醒源的状态必须是低电平,而这个状态是可以通过反相器来设置的,在SYD8801和SYD8811中,唤醒源的反相器和GPIO的反相器是同一个寄存器,所以这里要设置GPIO的状态,而在SYD8821中,唤醒源的反相器和GPIO的反相器是两个不一样的寄存器,所以SYD8821的唤醒源的反相器的设置只需要设置pw_cfg.gpi_wakeup_pol即可! 2.在ble_init函数中设置好wakeup_config后,只要调用SystemSleep函数,在满足上述的条件后芯片就会进入睡眠,该函数注释如下 /*************************************************************************************************
*函数名:SystemSleep
*输入参数:POWER_SAVING_TYPE mode    电源省电类型,为POWER_SAVING_TYPE枚举成员
                    MODULE_CONTROL_TYPE c 模块控制类型,为MODULE_CONTROL_TYPE枚举类型
                    uint32_t ldo_delay    MCU唤醒后“nop"执行执行的次数
                    PMU_WAKEUP_CONFIG_TYPE    唤醒源使能控制
*输出参数:无
*说明:该函数使SYD8821进入浅度睡眠模式,低功耗的程度由mode和c两个变量控制
            建议调用方式:SystemSleep(POWER_SAVING_RC_OFF, FLASH_LDO_MODULE, 11000 ,
                                                (PMU_WAKEUP_CONFIG_TYPE)(FSM_SLEEP_EN|PIN_WAKE_EN|TIMER_WAKE_EN|RTC_WAKE_EN));
**************************************************************************************************/
extern uint8_t SystemSleep(POWER_SAVING_TYPE mode, MODULE_CONTROL_TYPE c,uint32_t ldo_delay,PMU_WAKEUP_CONFIG_TYPE w); 其中该函数的第一个变量和第二个变量对睡眠的功耗都有作用,他们的解释如下: /*************************************************************************************************
*枚举名:POWER_SAVING_TYPE
*成员: POWER_SAVING_RC_ON    睡眠后高频RC时钟依旧打开
                POWER_SAVING_RC_OFF    睡眠后高频RC时钟将被关闭
                POWER_SAVING_DSLEEP_LPO_ON_RETAIN    睡眠后低频RC(LPO)依旧打开,并且唤醒后接着睡眠前的位置执行
                POWER_SAVING_DSLEEP_LPO_OFF_RETAIN    睡眠后低频RC(LPO)被关闭,并且唤醒后接着睡眠前的位置执行
                POWER_SAVING_DSLEEP_LPO_ON_RESET    睡眠后低频RC(LPO)依旧打开,并且唤醒后将会复位
                POWER_SAVING_DSLEEP_LPO_OFF_RESET    睡眠后低频RC(LPO)被关闭,并且唤醒后将会复位
                POWER_SAVING_TYPE_NUM    省电模式的数量
*说明: 省电模式类型决定高频RC振荡器和低频RC振荡器在睡眠后是否打开,数字越大越省电,并且设置LPO的
模式下RC振荡器是被关闭的,比如设置POWER_SAVING_DSLEEP_LPO_ON_RETAIN那么随带着也设置了
POWER_SAVING_RC_OFF
                带有“DSLEEP”字样的意味着将会进入深度睡眠模式
                带有“RESET”字样的意味着唤醒后将会复位,内存等将不复存在
**************************************************************************************************/
typedef enum {
    POWER_SAVING_RC_ON                    = 0,
    POWER_SAVING_RC_OFF                   = 1,
    POWER_SAVING_DSLEEP_LPO_ON_RETAIN  = 2,
    POWER_SAVING_DSLEEP_LPO_OFF_RETAIN = 3,
  POWER_SAVING_DSLEEP_LPO_ON_RESET   = 4,
    POWER_SAVING_DSLEEP_LPO_OFF_RESET  = 5,
  POWER_SAVING_TYPE_NUM,    
} POWER_SAVING_TYPE;
/*************************************************************************************************
*枚举名:MODULE_CONTROL_TYPE
*成员: NO_MODULE    睡眠后不关闭任何模块
                PER_MODULE    睡眠后关闭外设模块,包括GPIO SPI iic等,设置该模块唤醒后必须要重设这些模块
                BLE_MODULE    睡眠后关闭BLE模块,连接上后不能够设置,当时在不广播的时候必须设置
                FLASH_LDO_MODULE    睡眠后关闭FLASH_LDO,也就是FLASH的电源
                PB_MODULE    为PER_MODULE和BLE_MODULE的集合
                PF_MODULE    为PER_MODULE和FLASH_LDO_MODULE的集合
                PBF_MODULE    为PER_MODULE和FLASH_LDO_MODULE以及FLASH_LDO_MODULE的集合
*说明: 模块控制类型用于控制在睡眠后某些模块的开关
                FLASH_LDO_MODULE模式下唤醒的时候必须要给flash足够的事件,也就是SystemSleep传入的第三个参数
**************************************************************************************************/
typedef enum {
    NO_MODULE            = 0,
    PER_MODULE           = BIT0,
    BLE_MODULE           = BIT1,
    FLASH_LDO_MODULE     = BIT2,
    PB_MODULE            = PER_MODULE | BLE_MODULE,
    PF_MODULE            = PER_MODULE | FLASH_LDO_MODULE,
    BF_MODULE            = BLE_MODULE | FLASH_LDO_MODULE,
    PBF_MODULE           = PER_MODULE | BLE_MODULE | FLASH_LDO_MODULE,
} MODULE_CONTROL_TYPE;

    注意:因为在BLE芯片中,蓝牙这个外设十分特殊,所以这里如果想在睡眠的时候关闭蓝牙,或者进入深度睡眠,那么调用SystemSleep函数传的第二个函数必须传入带有BLE_MODULE的参数,也就是说这里只能够传入:BLE_MODULE 、PB_MODULE、BF_MODULE和PBF_MODULE这四个参数,具体需要什么等级的功耗请斟酌!

对于SYD8801和SYD8811的芯片,他们的睡眠就简单很多,只是单单调用systemsleep函数即可! 关于SYD8801的睡眠可看博客:https://blog.csdn.net/chengdong1314/article/details/70233652   芯片功耗的测试: 在SYD8821的开发板上有这样一个接口: 这里可以认为VBAT是芯片内部电路消耗的功耗,他的电流就是芯片内部电路的电流,VDDIO是IO口上的漏电,他的电流就是IO口的电流,通过测量这两个位置的电流就可以大概知道电流消耗的方向!