TI中文支持网
TI专业的中文技术问题搜集分享网站

cc1310 sensor/collector 回复问题

在sensor和collector通讯中,

sensor没发送一次数据,collector会及时回复。

流程:sensor发送数据,确认ACK回复正常,sensor发送poll,间隔是500,三次失败变成孤节点。

我现在是发送poll后,正常即刻来数据,但是有时候2分钟之后才过来数据。这个1-2分钟之内,sensor没有做其他事情。请问poll的回调没有超时机制吗?

为何二分钟之后才会有数据回调过来?下面是我的打印详细介绍

打印的发送数据内容

[15:21:06.006]收←◆ configInRam.AdcConfig.SN : 1301    

[15:21:06.080]收←◆ :AllConfigTimeCurrentTime  17184

进入dataCnfCb回调

[15:21:06.579]收←◆dataCnfCb1

dataCnfCb 回调成功
[15:21:06.613]收←◆poll ApiMac_status_success3

启动poll事件
poll start event

发送poll请求

[15:21:06.665]收←◆sendPollReq

//接收poll回调  事件差是30S,才接收到

[15:21:36.198]收←◆pollCnfCb

//接收的协议解析
xieID: 1
dataId: 1

按照正常情况。poll发送后,会立即返回回调啊

Alvin Chen:

有的MAC_ACK_WAIT_DURATION

user5322468:

回复 Alvin Chen:

#define MAC_ACK_WAIT_DURATION0x40/* The maximum number of symbols to wait for an acknowledgment frame */
等待确认帧的最大符号数。

都是默认的,这个定义的具体意思是什么?我现在最大的延迟,有2分钟。

Alvin Chen:

回复 user5322468:

”我现在是发送poll后,正常即刻来数据,但是有时候2分钟之后才过来数据“
你这个两分钟指的是ACK?

Alvin Chen:

回复 Alvin Chen:

MAC_ACK_WAIT_DURATION 超时是怎么算的,{offsetof(macPib_t, ackWaitDuration), sizeof(uint8), 54, 54},/* MAC_ACK_WAIT_DURATION */
举例,假如你是250kbps,4个bit 一个符号周期,也就是 16ms.54 * 16 = 864ms。

user5322468:

回复 Alvin Chen:

我这里二分钟是指的:发送poll到接收到poll的回调之间的时间差。

一次数据的交互流程是如下我说嘛?

因为我应用层需要改动,例子是长期poll,我这里是发送数据就poll。

sensor发送数据—–jdll中dataCnfCb回调Ack—-发送poll——等待jdll中poll回调——–然后在sensor中的dataindcb做数据处理。

MAC_ACK_WAIT_DURATION超时怎么计算也不可存在2分钟的超时。
我的是50kbps 433

Alvin Chen:

回复 user5322468:

50kbps 5x16ms=80ms

54x80s=4320ms

你去debug看看,感觉你的timestmap不准。

user5322468:

回复 Alvin Chen:

你是说我的定时器的时钟不准?这个我测试过,time完全正常。

除了你说的超时机制,还有什么会导致这种情况发生。上述的这种情况,10次通讯会出现2-4次。

我刚刚开了一个贴,没有人回复我的问题。
我能否跟你描述下?

watchdog一移植到sensor上面,

在main方法里面直接初始化了看门狗。

void User_Watchdog_init(void){
Watchdog_Params params;
Watchdog_init();
params.resetMode=Watchdog_RESET_ON;
params.callbackFxn=(Watchdog_Callback)watchdogCallback;
Watchdog_Params_init(&params);
watchdog_handle=Watchdog_open(Board_WATCHDOG0,&params);
//Watchdog_convertMsToTicks(watchdog_handle,watchdogx)
Watchdog_setReload(watchdog_handle,watchdogx3S);

#if defined(_DEBUGX)
LCD_WRITE_STRING("Watchdog_setReload", 1);
#endif
}

void watchdogCallback(uintptr_t unusedint)
{
LCD_WRITE_STRING("watchdogCallback: ", 2);
}

1、然后在sensor的where里面喂狗,我现在把喂狗给关了,应该是每三秒重启一次,我加入了打印信息。无法重启,
watchdogx3S=4500000
2、我把喂狗放在sensor的where,进入低功耗的时候(低功耗判断,没有事件触发),watchdog的计时继续执行。

Alvin Chen:

回复 user5322468:

首先你原始问题我不确定有其他原因。你两分钟之后才收到ack会触发devInfoBlock.dataFailures++吗?
此外你的这个看门狗并不合理吧,为什么要去重启设备呢? 通常是去开启一个定时器,定时去喂狗,你这个三秒也有点短了。

举例如果你发送失败一次devInfoBlock.dataFailures++; 此时你的设备重启了类似这些值都会重置。

user5322468:

回复 Alvin Chen:

1、devInfoBlock.dataFailures++肯定是没有进入的。

因为我在devInfoBlock.dataFailures++的地方都有打印,而且dataFailures等于3,会成为孤节点,这些我都有打印信息。

sensor和collector能够正常通讯,300把数据交互中,除了在发送poll——收到poll回调,有延迟以外,其他的都是正常。
2、看门狗,没有喂狗,不是应该重启吗?我是仿真进去的,所以我第一次就断电重启了,让他自己输出打印,看,看门狗是否正常运行。我的喂狗,没有使用定时器,看doc,看门狗在低功耗下,是不做计时的。我sensor只要进入,低功耗,就不会喂狗,所以我把喂狗放在了where里面。看门狗是如何区分低功耗的。sensor_process==0吗?

user5322468:

回复 Alvin Chen:

我现在sensor/collector通讯,所有sensor突然都变成孤节点,(sensor发送数据collector ,无ACK回复)。collector 有串口心跳包正常运行。
sensor孤节点一直无响应。

赞(0)
未经允许不得转载:TI中文支持网 » cc1310 sensor/collector 回复问题
分享到: 更多 (0)