SYD8821低功耗

news/2024/11/20 10:33:51/

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口的电流,通过测量这两个位置的电流就可以大概知道电流消耗的方向!

 

 

 


http://www.ppmy.cn/news/513572.html

相关文章

『手撕 Mybatis 源码』08 - 动态代理 invoke 方法

动态代理 invoke 方法 问题 mapperProxy.findByCondition(1); 是怎么完成的增删改查操作? 当通过 JDK 代理方式生成代理对象后,可以通过代理对象执行代理方法 public class MybatisTest {/*** 问题3:mapperProxy.findByCondition(1); 是怎…

联想平板功耗模块经验分享

联想平板功耗模块流程 首先联想平板的开发过程大致分为EVT,DVT1,DVT2,PVT, MP阶段,PVT阶段之后意味着需要code frezzing,然后工厂集中生产,最后发货出售,EVT,DVT,PVT阶段每个阶段工…

看看EPSON怎么造墨水

EPSON墨水工厂位于日本长野县广丘陵,距离名古屋机场大约4小时路程。接待我们的是日本爱普生事业部的平原精一与喷墨打印机事业部部长三村孝雄。整个访问分记者问答与工厂实地参观两个部分。 EPSON墨水工厂位于日本长野县广丘陵,距离名古屋机场大约4小时路…

强化学习:AI领域的下一步里程碑

第一章:引言 近年来,人工智能(AI)的快速发展引起了全球范围内的广泛关注。在AI的众多技术领域中,强化学习(Reinforcement Learning)作为一种类似于人类学习的方式,在解决复杂问题方…

闪亮登场!在树莓派上点亮LED灯的简单详细方法

文章目录 树莓派开发与STM32开发的比较原理图以及树莓派引脚展示点灯步骤读取树莓派布局 树莓派开发与STM32开发的比较 树莓派和STM32都是常用的嵌入式设备,都可以使用GPIO来控制LED灯。它们的点灯方式和使用的编程语言以及开发环境略有不同: 相同点: 控…

<C++项目>高并发内存池

项目介绍: 原型是goole的开源项目tcmalloc(全称:Thread-Caching Malloc),用于替代系统的内存分配相关的函数(malloc, free).知名度非常高。 项目要求知识储备和难度: 会用到C/C、数据结构(链表、哈希桶)、操作系统内存管理、单例模式、多线程、互斥锁等等…

RabbitMQ学习总结

目录 一、第一章 1、pom依赖 二、第二章 1、消息属性对象(Delivery delivery) 2、信道对象 (发送消息根据路由发送,接收消息根据队列接收) 3、工作队列模式 4、消息应答 (消费者) 5、消息自动重新入队 (消费者) 6、RabbitMQ持久化 (生产者) 7、不公平分发(…

借用jQuery发送Http请求的实现(内附源码)

文章目录 一、前言二、jQuery 介绍三、jQuery 下载四、jQuery 使用五、Http客户端DEMO实现 一、前言 最近在解决项目上前同事开发的视频播放器问题,视频播放器是用Qt开发,作为播放插件供Web调用。 播放器与Web的通信方式采用的是Http,数据格…