板子是完全兼容TI的,在单播试验中,协调器(接受方)接收到数据即原样显示,终端代码。终端代码改动如下:添加头文件#include<string.h>, 自定义一个事件 #define MAC_EVENT 0x0010
uint8 DestMac[8]={0xEA,0X02,0X2B,0X10,0X00,0X4B,0X12,0X00};//0X00124B00 10 2B 02 EA 通讯目标的MAC地址
按下按键2时:
if ( keys & HAL_KEY_SW_2 )
{
ZDP_NwkAddrReq(DestMac, ZDP_ADDR_REQTYPE_SINGLE, 0, 0 );//让我们的MAC地址对应的模块把自己当额网络短地址回复给我
osal_start_timerEx( TestRoutine_TaskID,
MAC_EVENT,
30 );
}
按下按键触发事件时:
if ( events & MAC_EVENT )
{
char theMessageData[] ="jacky";
TestRoutine_DstAddr.addrMode = (afAddrMode_t)Addr64Bit;
// // TestRoutine_DstAddr.addr.shortAddr = 0x0000;//接收模块的网络地址
memcpy(TestRoutine_DstAddr.addr.extAddr,DestMac,8);
// Take the first endpoint, Can be changed to search through endpoints
TestRoutine_DstAddr.endPoint =TestRoutine_ENDPOINT ;//接收模块的端点房间号
//TestRoutine_epDesc结构体 端点描述符有源端点的信息,也是10
if(AF_DataRequest( &TestRoutine_DstAddr, &TestRoutine_epDesc,
TestRoutine_CLUSTERID,//目标端点镞0x0001
(byte)osal_strlen( theMessageData ) + 1,//发送字符串的长度
(byte *)&theMessageData,//字符串内容数组的首地址
&TestRoutine_TransID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ))
{
HalLcdWriteString("mac send fail",HAL_LCD_LINE_7);
}
else
{
HalLcdWriteString("mac send ok",HAL_LCD_LINE_8);
}
return (events ^ MAC_EVENT);
}
实验结果,按下按键2通讯不了(仿真时按键出发事件有效),抓包无数据。MAC通讯不就这样就可以了吗,是我代码问题还是板子的问题?调了几天了,难受,希望能得到帮助,谢谢。
VV:
zigbee本质上所有的通信都是基于16bit短地址的,就像IP地址通信一样。
虽然在应用层可以可以使用长地址发送数据,但是也是在底层通过长地址查询短地址,如果查不到就无法发送出去。
你有把短地址一直保存吗?