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

终端CC2650广播后 协调器CC2530接收没反应

用SmartRF06EB加载CC2650EM板,用Sampleswithc例程,CC2650发送函数设置如下:

void SerialApp_DeviceConnect(){
#if ZDO_COORDINATOR
SerialApp_TxLen = 0;
SerialApp_RxSeq = 0;
#else
byte SendData[3]="D1";

SerialApp_TxAddr.addrMode = (afAddrMode_t)AddrBroadcast;
SerialApp_TxAddr.endPoint = SWITCH_EP; //20
SerialApp_TxAddr.addr.shortAddr = 0xFFFF;
AF_DataRequest( &SerialApp_TxAddr, &zswEpDesc,
SERIALAPP_CLUSTERID1,
2,
SendData,
&SerialApp_MsgID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS);
#endif //ZDO_COORDINATOR
}

发送后,协调器直接把广播的数据重新广播一边,但不进入自己的如下的接收函数。

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint16 flashTime;
byte buf[3];

switch ( pkt->clusterId ) //判断簇ID
{
case SAMPLEAPP_PERIODIC_CLUSTERID: //收到广播数据
osal_memset(buf, 0 , 3);
osal_memcpy(buf, pkt->cmd.Data, 2); //复制数据到缓冲区中
if(buf[0]=='D' && buf[1]=='1') //判断收到的数据是否为"D1" {
HalLedBlink(HAL_LED_1, 0, 50, 500);//如果是则Led1间隔500ms闪烁
#if defined(ZDO_COORDINATOR) //协调器收到"D1"后,返回"D1"给终端,让终端Led1也闪烁
SampleApp_SendPeriodicMessage();
#endif
}
else
{
HalLedSet(HAL_LED_1, HAL_LED_MODE_ON); }
break;

case SAMPLEAPP_FLASH_CLUSTERID: //收到组播数据
flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
break;
}
}

数据抓包如下

1856.CC2650-01.psd

endpoint设置为20,CLUSTER 设置为1,都对,为什么解调器程序不进入void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )?

YiKai Chen:

抓包有看到你广播数据封包送出來了,你先設個斷點在cc2530的afIncomingData看看有沒有收到你cc2630的广播数据

zhu weihua:

回复 YiKai Chen:

CC2650上发数据后,断点可以停在cc2530的afIncomingData函数内,也就是afIncomingData接收到数据了,但是不进入不进入void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

Alvin Chen:

回复 zhu weihua:

你CC2530用的应该是老版本的协议栈吧

老版本那个函数用的cluster是SAMPLEAPP_PERIODIC_CLUSTERID,你发送端应该与之对应。

zhu weihua:

回复 Alvin Chen:

嗯,了解了,cluster对应上了,是profile ID的问题。感谢!

赞(0)
未经允许不得转载:TI中文支持网 » 终端CC2650广播后 协调器CC2530接收没反应
分享到: 更多 (0)