芯片工作模式有哪些?
主要分为4种工作模式,按照功耗由小到大排列如下。其中shutdown和poweroff在唤醒后会重启
- shutdown模式
- poweroff模式
- sleep模式
- disable sleep模式
shutdown模式:
- 芯片功耗最低的一种待机模式,待机电流可以到约80nA级别,芯片完全不工作。
- 此工作模式必须要使用芯片onkey的专用脚唤醒,唤醒后芯片复位
- 800X系列有部分封装没有此引脚,无法使用此功能。且onkey脚无法在唤醒后做普通按键进行使用
- 此模式的应用场景有限,一般情况下用作产品的关机功能
- 代码上调用pmu_shutdown即可进入此模式
poweroff模式:
- poweroff模式,待机电流可以到3-4ua级别,芯片可以io中断唤醒。
- 进入此模式后,芯片可以被pmu中断(pmu io中断,看门狗中断等)唤醒,唤醒后芯片复位
- 任意一个io口都可以配置为唤醒脚,唤醒芯片提出此模式
- 此模式一般用于关机或者长时间才需要按键触发工作一次的场景
- 代码上调用system_power_off即可进入此模式,如需唤醒参考代码如下
//先配置唤醒脚,再进入power off状态
pmu_port_wakeup_func_set(GPIO_PORT_A, (1<<GPIO_BIT_2));
NVIC_EnableIRQ(PMU_IRQn);
system_power_off();
sleep模式:
- sleep模式,待机电流可以到约10ua级别,芯片随时可以起来工作,唤醒不会复位
- 一把情况下此模式是考虑功耗的情况下使用最多的一种模式。开启sleep模式不会影响广播,连接等BLE的工作。
- 用户可以在应用层决定是否打开此模式,但是打开sleep后芯片并不会立刻进入休眠状态,而是在任务处理完后才会自动进入休眠状态。也就是说进入或者不进入休眠实际上是协议栈底层自动决定的,当有任务(比如广播,软件定时器,rtc)需要执行就起来工作,没有任务执行及进入睡眠状态。
- 如果想要芯片较长时间在休眠状态,只需要把自己的应用层的任务都关闭,比如关闭广播,软件定时器等。
- 代码上调用system_sleep_enable打开此模式。
芯片在睡眠前会先进入user_entry_before_sleep_imp函数,然后睡眠
芯片在唤醒后会先进入user_entry_after_sleep_imp函数。如果我们唤醒后需要操作cpu控制的外设(比如iic),需要在使用前初始化
- 代码上调用system_sleep_disable关闭此模式
/**********
比如我们在proj_init里面打开休眠。这里我们只开了广播,芯片就会定时起来按照广播参数去广播
*********/
void proj_init(void)
{
LOG_INFO(app_tag, "BLE Peripheral %d \r\n",os_get_free_heap_size());
system_sleep_enable();
// Application layer initialization, can included bond manager init,
// advertising parameters init, scanning parameter init, GATT service adding, etc.
simple_peripheral_init();
}
disable sleep模式:
相对应sleep模式而言,其实就是芯片不休眠的工作模式,cpu一直运行。功耗为ma级别。不在乎功耗的用户可以采用此模式。