Z-Stack Mesh 1.0.0 配置译如下:
-DPOWER_SAVING
-DRFD_RCVC_ALWAYS_ON=FALSE
//pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON;
pwrmgr_attribute.pwrmgr_device = PWRMGR_BATTERY;
按键为中断模式, EndDeviceEB(以下指设备A)能正常进入PM3模式,功耗为 0.8UA, 能通过按钮唤醒。
发现以下2个问题
1:当设备A从PM3模式下唤醒后,接收不到其它设备发给他的数据。
测试过程如下:
在设备A进入PM3后,其它设备发了一条数据给设备A后,当通过按钮唤醒设备A时,设备马上向父设备请求数据(通过Packet Sniffer看到有请求数据,但回复的是0),但父设备回复是没有数据。 设备A在唤醒时开了定时任务5秒,时间到后,设置以下参数,继续进入PM3模式
ZDApp_StopJoiningCycle();
NLME_SetPollRate( 0 );
NLME_SetQueuedPollRate( 0 );
NLME_SetResponseRate( 0 );
按键唤醒后马上设置以下参数:
ZDApp_StartJoiningCycle();
NwkPollReq(0);
NLME_SetPollRate(1000);
NLME_SetQueuedPollRate( 100 );
NLME_SetResponseRate( 100 );
如果在唤醒后,其它设备才发数据给设备A,设备A可以正常收到。
2: 当协议预编译了-DPOWER_SAVING, 通过HalLedSet( HAL_LED_5, HAL_LED_MODE_ON ); 来设置LED指示的开时,不管是在进入睡眠模式前,还是通过中断按键唤醒后,这个LED灯,并不是常亮,而是一闪一闪的, 只要注释掉 //-DPOWER_SAVING这句,也就不是不启用电源管理,指示灯正常。
如果#define HAL_LED true时,不使用HalLedSet(…)方式来控制LED,而是直接使用如P1_0 = 0(低电平驱动)时,LED灯还是一样,一闪一闪的,如果我将 HAL_BOARD._CFG.H中将LED使能关掉(#define HAL_LED false),直接使用 IO来控制,LED灯又可以正常工作,不出现所说的闪烁现象。
望得到TI技术或各位高手的解答,谢谢!
Susan Yang:
按照您的参数进行设置后,在PM2模式是没有问题的
请问您现在的父设备是什么呢?能否给出您的抓包?
zhu zhu3:
回复 Susan Yang:
感觉你的回复 ,谢谢
我父设备是协调器 我是通过串口连接协调器,然后通过串口指令让协调器下发信息给指定设备,当设备A不在睡眠时,可以正常收到所发的信息, 只要进入睡眠时,通过串口让协调器发送数据给设备A, 设备A在唤醒后,请求时没有数据的。
抓包文件内第二条数据时,我已经通过串口让协调器发下一条数据给 设备A(shortAdd=0X281B),发送完成后,我唤醒设备A,设备A请求,返回的是没有数据,
在第21条数据时,设备A又进入睡眠模式, 第25条数据时,我又唤醒设备A, 这时再发送一条数据给设备A,设备A可以收到数据处理后,返一条数据给协调器。之后又进入睡眠模式
zhu zhu3:
回复 Susan Yang:
Susan Yang
按照您的参数进行设置后,在PM2模式是没有问题的
请问您现在的父设备是什么呢?能否给出您的抓包?
Susan Yang:
回复 zhu zhu3:
根据您的抓包,确实是您描述的现象。
请问您能否能将协调器的广播改为单播试试?