CC2530 低功耗模式断电重启后后 功耗发生变化
TI 大神您好。
软硬件环境:1:Z-Stack HA1.2
2:CC2530
目的:休眠模式下使用串口。实现方案:无串口数据时,将UART 的RX管脚设置成IO中断唤醒,IO中断服务程序里将UART RX重新设置成 RX功能。使用完串口后将UART RX管脚重新设置成IO管脚并使能中断。且为了保持Hal_TaskID任务唤醒状态,使用了osal_pwrmgr_task_state系列函数。
问题描述:因外界干扰,进入IO中断后,将Hal_TaskID保持唤醒状态,此时直接断电,重新上电后CC2530会进入低功耗模式,但功耗比正常情况下高(正常是0.4uA)。现象为电流每隔3S会跳变至12uA,然后再变回0.8uA。不知何原因?
望大神解惑,谢谢。
有没有其他的事件在运行的,除了串口以外的
应用层没有其他事件在运行,不知道z-stack在这种情况下会不会有事件周期性产生。我串口使用dma方式,测试发现第一次唤醒cc2530时接收到的数据有时存在错误,唤醒后,接收串口数据正常。我想没有串口数据时cc2530处于pm3模式,有数据来接收数据处理,处理完重新回到pm3模式。这种想法可以实现吗?
第一次收到数据错误的原因是,UART第一个数据过去的时候,芯片刚唤醒,32MHz还不稳定,所以前面几个数据是错误的。
如果你想用UART唤醒的话,建议你在第一次的数据前加上dummy data。
可以的实现的。
VV您好,第一次串口接收数据错误的原因我清楚了,谢谢。
在使用osal_pwrmgr_task_state让一个task保持唤醒的情况下直接断电后重启,CC2530会进入低功耗模式,但功耗比正常情况下高(正常是0.4uA)。现象为电流每隔3S会跳变至12uA,然后再变回0.8uA。
另外,还有一种情况下同样会发生上面的现象:EndDevice PM3模式下失去parent节点后,利用串口RX管脚下降沿功能唤醒IC,后会出现功耗变化。具体现象为每隔2--3S就会出现一次功耗跳变至12uA,然后再变回0.8uA。正常情况下是0.3---0.4uA。
应用层无任何周期性事件。
详细描述:
1,我开启了POWER_SAVING 编译选项,定义了RFD_RCVC_ALWAYS_ON=FALSE 初始化pwrmgr_device为PWRMGR_BATTERY( osal_pwrmgr_init中pwrmgr_attribute.pwrmgr_device = PWRMGR_BATTERY;)未使用键盘等其他事件。
2,为使用串口,打开了HAL_UART=TRUE HAL_UART_DMA=2 编译选项
3,由于我的Device不需要接收zigbee数据,因此将POLL_RATE、QUEUED_POLL_RATE、RESPONSE_POLL_RATE都设置为了0.
4,在UART RX管脚设置成IO口下降沿触发,中断服务程序:
HAL_ENTER_ISR(); if(P0IFG & (BV(5))) { P0SEL |= HAL_UART_Px_RX_TX; // Enable Tx and Rx on P0 IEN1 &= ~(BV(5)); //disenable Port 0 interrupt P0IEN &= ~(BV(5)); //(Port 0 Interrupt Mask)disenable P0_5 interrupt osal_set_event(Hal_TaskID,HAL_PWRMGR_HOLD_EVENT);//hold Hal_TaskID awake } /* Clear the CPU interrupt flag for Port_0 PxIFG has to be cleared before PxIF */ P0IFG &= ~(BV(5)); P0IF = 0; CLEAR_SLEEP_MODE(); HAL_EXIT_ISR();
5:在串口回调函数里,osal_set_event(Hal_TaskID,HAL_PWRMGR_CONSERVE_EVENT);//set Hal_TaskID sleeped mode
然后再将UART RX管脚重新设置成IO口下降沿触发。