Zigbee MAC地址通信中发送模块指定了接收模块MAC地址却发送不了数据包的解决办法

news/2025/3/31 9:18:23/

Zigbee MAC地址通信中发送模块指定了接收模块MAC地址却发送不了数据包的解决办法

事情缘由

在做MAC地址通信的实验中,我将程序分别下载进模块,组网成功后,发送模块终端按下按键,接收模块协调器什么反应也没有,上位机也没接收到消息。

通过抓包发现,按下按键的时候确实没有数据包发出。只有协调器模块和终端模块之间进行父子点询问的帧和协调器模块的网络状态帧。并没有我们按下按键通过指定协调器MAC发送的数据帧。

经过半天的百度查阅,但网上关于Zigbee模块MAC地址通信的资料少之又少,困扰了我一晚上,找到了一个可能可行的方法。

我参考了这篇博客https://www.cnblogs.com/gary-guo/p/5737076.html

错误原因

首先我们要搞清楚MAC地址通信的本质是什么:

在网络里面的每一个zigbee模块,它都有一个地址管理器,它会记录与它经常通信的模块的MAC地址以及网络短地址,然后存放到地址管理器里面;

以MAC地址发送数据:在数据发送的时候,它会去检查地址管理器看是否有对应的MAC地址,如果有,那么它会把对应的网络短地址放到无线数据包里面去发送;如果没有对应的MAC地址,为了确保通信成功,那么我们应该怎么做呢?

其中ZDP_NwkAddrReq(DestMac,ZDP_ADDR_REQTYPE_SINGLE,0,0);的作用是让MAC对应的目标模块将当前的网络短地址回复给我

然后收到对应MAC地址的网络短地址后,就可以在地址管理器当中建立这样的映射关系,然后延时30毫秒,发送事件,GENERICAPP_SEND_MSG_EVT,然后进入到该事件里面去发送实际的数据

将程序下载到模块进行抓包

我们发现,按下按键后,请求网络地址的通信过程是正常的,而终端依然无法将数据通过MAC地址发送给协调器。不过至少验证了模块硬件没有问题。

最后我重新安装了一个TI 协议栈:ZStack-CC2530-2.3.0-1.4.0,我原来使用的版本是ZStack-CC2530-2.5.1a。

将我们的原终端程序重新移植到新的新协议栈,通信成功!

     char theMessageData[] = "Zigbee MAC实验";uint8 DestMac[8]={0xFD,0xE7,0x59,0x2A,0x00,0x4B,0x12,0x00};//0x00124B002A59E7FD   GenericApp_DstAddr.addrMode = (afAddrMode_t)Addr64Bit;//发送模式是MAC//StarryApp_DstAddr.addr.shortAddr = 0x0000;memcpy(GenericApp_DstAddr.addr.extAddr,DestMac,8);// Take the first endpoint, Can be changed to search through endpointsGenericApp_DstAddr.endPoint = GENERICAPP_ENDPOINT;AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,GENERICAPP_CLUSTERID,(byte)osal_strlen( theMessageData ) + 1,(byte *)&theMessageData,&GenericApp_TransID,AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );

最终现象

抓包发现,按下S1后,终端成功通过协调器的MAC地址发送了数据包给协调器

串口也成功接收到数据

结果分析

我们可以发现,发送数据包的目标地址不是MAC,而是目标的网络短地址。

这是因为当以MAC地址进行发送的时候,发送模块首先会查看自己的地址管理器有没有节点的MAC与我们所指定通信的MAC地址是一致的。如果发现有,它会将目标节点的网络短地址作为无线数据包的发送地址。如果两个模块之间距离很远,且不怎么互相通信,地址管理器查不到对方的MAC。那我们在发送数据包前就必须使用网络短地址请求函数

ZDP_NwkAddrReq(DestMac,ZDP_ADDR_REQTYPE_SINGLE,0,0);

通过发送一个信号,来让我们的MAC地址对应的模块把网络短地址回复给我们,之后等待30ms再发送(确保发送模块成功获取目标模块网络地址),就一定会成功。这也是我刚刚提到的一个解决数据包发送失败的处理办法。


http://www.ppmy.cn/news/692883.html

相关文章

Windows 打开cmd/dos窗口的12种方式(全网最全)

文章目录 1. 从开始菜单的应用列表打开2. 从搜索打开3. 从运行打开4. 从文件资源管理器打开5. 从C:\Windows\System32\cmd.exe打开6. 从桌面>快捷方式打开(需自己创建)7. 从任务栏>快捷方式打开(需自己创建)8. 从开始菜单&g…

E博士 答你所问

.一拨号就死机 家中采用拨号方式上网。2年多来总是有一个怪问题:一拨号就死机,而且只能重启计算机。只有先删除猫的驱动程序,再重装猫的驱动,才能上网。而且重装时必需按照下列顺序:控制面板→电话和调制解调器选项→调…

我在上海IT运维的日子

一年一叹——我在上海IT运维的日子 曾经年少爱追梦,一心只想往前飞。爱上了,宁愿笑着流泪,也不哭着说后悔! ——题记 前言 毕业一年了,在上海也呆了近一年,从事IT运维工作。 读书时代,那些受影视…

全面落地,2014大数据应用案例TOP100

在当前的互联网领域,大数据的应用已十分广泛,尤其以企业为主,企业成为大数据应用的主体。大数据真能改变企业的运作方式吗?答案毋庸置疑是肯定的。随着企业开始利用大数据,我们每天都会看到大数据新的奇妙的应用&#…

电脑不能上网的原因

不能上网可能是多方面的原因引起的,涉及到操作系统问题、网络问题、应用软件问题或硬件问题,解决起来需要有一个特定过程。  1.三步Ping法   第一步:首先进入命令行模式,通过“ping 127.0.0.1”来判断TCP/IP协议是否安装成功,…

野猫的网上生涯

本文写于1999年。 野猫,不愿意透露姓名,甚至是网上ID。在其个人说明档案里,它说自己的性别是“男”,但它抱怨只有男/女的选择,所以只好用“它”来称呼它。 它最喜欢的人物是猫王;最理想的工作是当标准的电灯…

美的物联平台的云上实践与应用

在2018云栖大会深圳峰会阿里云支持与服务专场上,由美的集团物联云负责人周红昌带来了“美的物联平台的云上实践与应用”。 主要介绍在阿里云上怎么去构建美的的服务、快速的把物联平台构建起来生成海量的数据和用户。分别从美的IOT介绍、云上架构设计及应用、人机新…

物联网 PaaS 平台大盘点

传统IT企业、通信运营商、通信设备商、互联网企业、工业方案提供商、新型创业公司等多股势力如雨后春笋般纷纷涌入,在经过井喷期的热闹,平台沉淀进入下半场盘整,物联网平台基于IaaS、PaaS、SaaS三种云计算服务模型,逐步完善了其功…