OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3248|回复: 0

SYD8821:具有全球领先低功耗蓝牙低功耗SOC芯片!

[复制链接]

12

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2020-2-17
在线时间
8 小时
发表于 2020-2-20 13:51:41 来自手机 | 显示全部楼层 |阅读模式
SYD8821是具有全球领先低功耗(RX 2.4mA @-94.5dBm灵敏度,TX 4.3mA @0dBm输出功率)的蓝牙低功耗SOC芯片,在极低电流下实现了优异的射频性能,搭配176kB SRAM,512kB flash,非常适合中高阶可穿戴、智能家居、物联网等低功耗应用。 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 *输入参数OWER_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这四个参数,具体需要什么等级的功耗请斟酌!
forum.jpg
forum(1).jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 15:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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