用户
 找回密码
 立即注册

扫一扫,访问微社区

查看: 6279|回复: 8

ZigBee通信问题

[复制链接]

1

主题

4

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2018-7-25 17:55:11 | 显示全部楼层 |阅读模式
我在通信中用了这条语句,While(!basicRfPacketIsReady());来等待接收,但接收100次左右,有时候测试接收了400次左右就不接收了,请问这是怎么回事?该如何解决?

欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复

使用道具 举报

78

主题

198

帖子

1028

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1028
发表于 2018-7-25 20:37:52 | 显示全部楼层
发送方是否持续发送?
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

1

主题

4

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2018-7-26 09:00:36 | 显示全部楼层
a41359020 发表于 2018-7-25 20:37
发送方是否持续发送?

发送方一直在发送,我把接收方复位后又会继续接收,应该就是接收方的问题。
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

1

主题

4

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2018-7-26 09:49:33 | 显示全部楼层
a41359020 发表于 2018-7-25 20:37
发送方是否持续发送?

这是接收部分的代码
QQ图片20180726093829.jpg
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

169

主题

375

帖子

2383

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2383
发表于 2018-7-26 11:08:38 | 显示全部楼层
接收不能是发了SRX()之后就一直接收,接收机如果收到干扰或者错误的数据侦影响,它就不在接收状态了, 要设一个接收机的超时时间,到了时间就算没有收到数据也要重新开始,并且检查出错的状态位。
只用while()等接收完成是不可靠的。
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

1

主题

4

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2018-7-26 11:45:03 | 显示全部楼层
zigbeeclass 发表于 2018-7-26 11:08
接收不能是发了SRX()之后就一直接收,接收机如果收到干扰或者错误的数据侦影响,它就不在接收状态了, 要设 ...

你好,请问如何检查出错的状态位呢?刚学,没有太深入地理解
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

169

主题

375

帖子

2383

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2383
发表于 2018-7-28 10:26:09 | 显示全部楼层
我这里有点以前的代码,给你参考一下

/******************************************************************************
RF接收超时后,重启RF,在此重启后会进入RX状态
******************************************************************************/
void lbasicRfReset(void)
{
  if (basicRfRxFaildTimeOutCnt ++ > RFRX_MONITOR_OVERFLOW_MAX)
  {
    basicRfRxFaildTimeOutCnt = 0;
    basicRfIdle();
    basicRfReceive();
  }
}

当时我设一个定时器,超时了就执行上面的代码。
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

169

主题

375

帖子

2383

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2383
发表于 2018-7-28 10:30:36 | 显示全部楼层
当然,如果自己想了解到足够深入的话,应该把RFIRQM0,1,RFERRM,这些寄存器都好好看一下。
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

0

主题

14

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2021-3-16 16:44:18 | 显示全部楼层
本帖最后由 Kiwi2021 于 2021-3-19 12:03 编辑

感谢分享
楼主辛苦了~~~
欢迎光临新一社区【newbitstudio.com】, 这里专注低功耗无线物联网技术的推广和分享,打造中文物联网开发社区,主要面对ZigBee, BLE, Thread, DOTDOT等协议,目前涉及到的芯片平台有CC2530,CC2540,nRF51822,nRF52832,ERF32MG,NXP5169。感谢大家在这里提问或者回答,助力成长,共同进步,写职业新篇章!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则