用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的问题。感谢!