微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > Zstack 终端设备 低功耗测试的一些问题及整理的测试结果

Zstack 终端设备 低功耗测试的一些问题及整理的测试结果

时间:10-02 整理:3721RD 点击:

之前的疑问在 http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/p/64844/149224.aspx#149224 这个帖子里面回复了几条。

下面是我整理出来的一些调试结果。 

测试 二种情况终端设备脱离网络之后的 低功耗设置。

1、 终端在加入网络之后掉线,设备网络会变成DISC,之后会一直查找网络。

2、终端在加入网络之后,协调器离线(掉电或者其他),终端设备重启,终端也会一直查找网络。

VV给了二个函数:

《《

利用下面的函数来终止联网和启动连网

uint8 ZDApp_StopJoiningCycle( void )

uint8 ZDApp_StartJoiningCycle( void )

》》

第一种情况,我的解决是,设备加入网络之后,设备标记网络标示。 当设备再次离开网络的时候,启动定时器1。 定时器1回调执行 启动联网的操作,并且在启动一个定时器2,定时器2回调执行,检测设备网络,当设备网络不是END_DEVICE时候,终止设备联网,并且写寄存器强制进入PM3模式。同时启动定时器1定时。循环进行。

测试结果是:  当设备加入网络的之后, 睡眠电流1UA, 掉网后26MA, 终止联网的时候恢复1UA。 启动联网恢复到26MA, 并且当协调器上电之后,终端在启动联网的时候能再次加入网络。 

但是第二种情况,终端在终止联网之后的工作电流为7.74ma。 并不能进入休眠。   不知道是什么因数引起的。

一下是一些操作代码:

初始化之后最后一条启动定时器检查 是否已经加入网络。

osal_start_timerEx( MkTaskID, APP_START_JOIN_MSG_EVT,0x3a98);

led关闭,进入PM3休眠

	if(events &APP_START_JOIN_MSG_EVT)
	{
		if(SmartHomeApp_NwkState != DEV_END_DEVICE)
		{
		  	//ZDApp_StopJoiningCycle();
		  	g_mSendFlag =true;
		  	HalLedSet(HAL_LED_3,HAL_LED_MODE_OFF);SLEEPCMD &= ~PMODE; /* clear mode bits */    \
            SLEEPCMD |= 0x03;   /* set mode bits   */    \
            while (!(STLOAD & LDRDY));  							
		}

		return (events ^ APP_START_JOIN_MSG_EVT);
	}	

检查设备是或否加入网路,否的话 ,终止加入网络,启动定时器 进入PM3模式

	if(events &APP_START_CHECK_MSG_EVT)
	{
		if(SmartHomeApp_NwkState != DEV_END_DEVICE)
		{
		  	ZDApp_StopJoiningCycle();SLEEPCMD &= ~PMODE; /* clear mode bits */    \
            SLEEPCMD |= 0x03;   /* set mode bits   */    \
            while (!(STLOAD & LDRDY)); osal_start_timerEx( MkTaskID, APP_START_NET_MSG_EVT,0x3a98);
		}

		return (events ^ APP_START_CHECK_MSG_EVT);
	}  

开启加入网络,并且定时检测

    if(events&APP_SEND_HEARTBEAT_MSG_EVT)
    {   
        //Send heart data, and check vdd is low that send vdd msg.
      	app_Heartbeat();
        osal_start_timerEx( MkTaskID, APP_SEND_HEARTBEAT_MSG_EVT,0x7530+(osal_rand()&0x7530));
		
	    return (events ^ APP_SEND_HEARTBEAT_MSG_EVT);
    } 
   case ZDO_STATE_CHANGE:
        SmartHomeApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
        
        if ((SmartHomeApp_NwkState == DEV_ROUTER)|| (SmartHomeApp_NwkState == DEV_END_DEVICE) )
        {
g_mSendFlag = true;
           
        }
        else
        {   
if(g_mSendFlag == true) 
{
    ZDOInitDevice(0xffff);
    //ZDApp_StopJoiningCycle();
    osal_start_timerEx( MkTaskID, APP_START_NET_MSG_EVT,0x3a98);
}
        }
        break;

你确定进入的是PM3模式?在PM3模式下只能有复位或者外部I/0中断才能唤醒,应该是PM2吧。

另外你的板子上是否还有其他的其他,像LED这类的。

如果测试准确的话7.7mA的数据应该已经进入休眠了,可能是其他外设在消耗。

板子没有其他外设或者LED, 是一个最小核心板。

我是用寄存器设置进入PM3模式的,正常的话待机电流是1.1UA,PM2应该是18UA左右。

一样低功耗的设置,  重启之后的joining和 发送失败之后的joining  有什么不一样的地方吗?

我没有强制PM3模式,电流也比较小,难道我万用表有问题了?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top