TI中文支持网
TI专业的中文技术问题咨询交流网站

CC2530: cc2530属性上报状态反馈成功,但芯片并没有发出数据

Part Number:CC2530Other Parts Discussed in Thread:Z-STACK,

你好,我这边遇到一个问题,使用cc2530芯片,SDK使用Z-Stack Home 1.2.2a.44539版本,程序调用zcl_SendReportCmd()属性上报函数,反馈状态是成功的,但是抓包没有抓到任何属性上报数据,但是其他的Default Response等ack或读属性反馈啥的都有数据,单单属性上报没有数据发出来。而且这种现象只是偶尔上电才出现,如果上电入网后没有出现则一直都是正常的,一旦上电入网出现就一直都是这种现象,断电重启就恢复正常。请问下这种情况可能是什么东西导致的?

Kevin Qiu1:

卑鄙的信鸽 说:而且这种现象只是偶尔上电才出现,如果上电入网后没有出现则一直都是正常的,一旦上电入网出现就一直都是这种现象,断电重启就恢复正常。

这似乎有点奇怪,只是在某个设备上还是其他设备上也有这样的情况?

将使用zcl_SendReportCmd部分的代码传上来看一下

,

卑鄙的信鸽:

uint8 GeneralAttrReport(uint16 ClusterId,uint16 AttributeID,uint16 SourceEndpoint){ uint8 i = 0; uint8 state = ZFailure;

zclReportCmd_t* reportCmd = osal_mem_alloc( sizeof( zclReportCmd_t ) + sizeof( zclReport_t ));

zclAttrRec_t attrRec; if(reportCmd != NULL) { if(ZDApp_GetState() == DEV_ROUTER) { zclFindAttrRec( SourceEndpoint, ClusterId, AttributeID, &attrRec ); for(i = 0; i < SwitchLight_NumAttributes; i++) { if(attrRec.clusterID == ClusterId) { if(attrRec.attr.attrId == AttributeID) { reportCmd->numAttr = 1; reportCmd->attrList[0].attrID = AttributeID; reportCmd->attrList[0].dataType = attrRec.attr.dataType; reportCmd->attrList[0].attrData = attrRec.attr.dataPtr;

state = zcl_SendReportCmd(SourceEndpoint, &SwitchLight_DstAddr, ClusterId, reportCmd, ZCL_FRAME_SERVER_CLIENT_DIR,0,FALSE, SwitchLightSeqNum++); break; } } } }

osal_mem_free( reportCmd ); } return state;}

属性上报的代码就是这个。所有的设备都会出现这个现象。出现概率最多的情况是在还没入网的情况下断电,然后再上电入网。

,

YiKai Chen:

看你的源碼,不應該在迴圈裡一直調用zcl_SendReportCmd,如果有多個attribute,應該合併回報,另外,你的 SwitchLight_DstAddr內容是什麼?

,

卑鄙的信鸽:

你好,这个不会出现迴圈一直调用的,zcl_SendReportCmd()函数下面有个break,会跳出这个循环

,

YiKai Chen:

你的 SwitchLight_DstAddr內容是什麼?

,

卑鄙的信鸽:

宏定义为0x14

,

YiKai Chen:

宏定义为0x14是什麼意思?我問的是你的 SwitchLight_DstAddr內容填了什麼?

,

Kevin Qiu1:

DstAddr指的是上报的目标地址,你能把这种情况的抓包文件传上来吗

,

卑鄙的信鸽:

不好意思,我看错了,

afAddrType_t  SwitchLight_DstAddr;

SwitchLight_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent;SwitchLight_DstAddr.endPoint = 0;SwitchLight_DstAddr.addr.shortAddr = 0;

,

卑鄙的信鸽:

抓包??如果出现问题是抓不了属性上报的信息的

,

YiKai Chen:

AddrNotPresent是用binding table的資料去送report,你設備入網后有做binding嗎?

,

卑鄙的信鸽:

这边入网后有绑定操作的

,

YiKai Chen:

建議抓包確定一下在出問題的時候绑定操作是否有成功

,

卑鄙的信鸽:

这是出现问题时的入网流程

,

卑鄙的信鸽:

调试看绑定操作是没问题的

,

YiKai Chen:

抓包截圖沒看到绑定操作,你確定有問題的時候抓包檔裡面有看到綁定操作?

,

卑鄙的信鸽:

绑定操作的数据能抓包吗?绑定操作在抓包显示是怎样的?有没有类似我这个截图看下?绑定操作我只是在代码调试反馈的。

,

Kevin Qiu1:

binding也包含在抓包数据中,查看下面的46-60行:

,

卑鄙的信鸽:

有没有怎么绑定的相关资料可以看下?

,

YiKai Chen:

可以參考一下 sunmaysky.blogspot.com/…/how-to-do-device-binding-from-ti-ztool.html

,

卑鄙的信鸽:

链接打不开

,

Kevin Qiu1:

binding信息可以在下面文档第四章查看:

Z-Stack Developer's Guide.pdf

YiKai提供的链接需要使用VPN才能打开

,

卑鄙的信鸽:

看了资料,我这边是使用文档 4.1.2 中的bindAddEntry()函数添加绑定表的。所以抓包并没有出现你截图中的binding数据。所以我这边的绑定是否有问题?怎么改?

,

YiKai Chen:

你是如何用bindAddEntry添加绑定表?

,

卑鄙的信鸽:

BindingEntry_t *Entery = NULL; uint16 clusters[4]; zAddrType_t addr; addr.addrMode = Addr64Bit; sAddrExtCpy(addr.addr.extAddr, IEEEAddr); clusters[0] = ZCL_CLUSTER_ID_GEN_ON_OFF; clusters[1] = ZCL_CLUSTER_ID_PERSONAL; clusters[2] = ZCL_CLUSTER_ID_GEN_BASIC; clusters[3] = ZCL_CLUSTER_ID_HA_ELECTRICAL_MEASUREMENT;

Entery = bindAddEntry(SWITCHLIGH_ENDPOINT, &addr, 1,4, clusters);

入网后调用这些。

,

YiKai Chen:

sAddrExtCpy內的IEEEAddr是誰的IEEE address?

,

卑鄙的信鸽:

调用这个AddrMgrExtAddrLookup(coorAddr.addr.shortAddr, IEEEAddr)函数获取的

,

YiKai Chen:

AddrMgrExtAddrLookup這個是在入網後調用嗎?

,

卑鄙的信鸽:

是的。而且我在线调试过这个IEEE地址是没错的

,

YiKai Chen:

你調用bindAddEntry後要不要先檢查一下return回來的BindingEntry_t內容是不是正確的

,

卑鄙的信鸽:

这个函数返回的状态是正确的,在线调试也是正常的。BindingTable[]的数值也是正常的

,

YiKai Chen:

目前只能建議你調試zcl_SendReportCmd調用AF_DataRequest時有沒有error

,

卑鄙的信鸽:

你好,我换了个网关,试了几十次不会出现这种情况。之前的网关一试就出现了。但是我想设备的属性上报应该只是设备自己的功能而已,跟网关应该搭不上边,但这现象又这么奇怪。所以这问题可能出现在哪??

,

YiKai Chen:

卑鄙的信鸽 说:换了个网关

跟之前的网关是同樣的硬件跟軟件?只是換一台?

,

卑鄙的信鸽:

不一样,网关的硬件跟软件都不一样

,

YiKai Chen:

那你還是換回來不行的那台去調試看看zcl_SendReportCmd調用AF_DataRequest時有沒有error

,

卑鄙的信鸽:

不管有没有出现这个问题zcl_SendReportCmd調用AF_DataRequest的反馈都是success,从来没出现反馈是error

,

YiKai Chen:

如果你report的目的地就是coordinator,然後endpoint也是固定的,你要不要在SwitchLight_DstAddr內使用short address mode然後destination short address就是0x0000再測試看看

,

卑鄙的信鸽:

这边要用绑定操作,所以还是得弄清楚这个问题。你们这边的有没有绑定操作的参考代码??还有属性上报AF_DataRequest()–>APSDE_DataReq( &req )后,在哪里能看到数据真的发送完成?还有这个属性上报的数据缓存大小在哪里可以看??

,

YiKai Chen:

绑定操作一般會由coordinator透過ZDP_BindReq來發送給要绑定的設備,而不是直接在設備上去添加绑定表

,

卑鄙的信鸽:

使用手册文档 4.1.2 中绑定操作类型,有没有参考代码?还有属性上报AF_DataRequest()–>APSDE_DataReq( &req )后,在哪里能看到数据真的发送完成?还有这个属性上报的数据缓存大小在哪里可以看??

,

YiKai Chen:

1. 绑定操作参考代码 https://www.twblogs.net/a/5b884cfc2b71775d1cdb80cf

2. APSDE_DataReq( &req )后就是Z-Stack lib的事情,應用程序這邊是沒辦法看到進一查看Z-Stack发送的狀況,除非你有源碼

,

卑鄙的信鸽:

你好,这个链接打不开。还有这个属性上报的数据缓存大小在哪里可以看??

,

YiKai Chen:

卑鄙的信鸽 说:这个链接打不开

應該是被防火牆擋住了。

卑鄙的信鸽 说:数据缓存大小在哪里可以看

應用程序是沒辦法調適Z-Stack libary的部份的

,

卑鄙的信鸽:

关闭防火墙都打不开,有没有能打开的链接?

,

YiKai Chen:

,

卑鄙的信鸽:

好的,谢谢

赞(0)
未经允许不得转载:TI中文支持网 » CC2530: cc2530属性上报状态反馈成功,但芯片并没有发出数据
分享到: 更多 (0)

© 2022 TI中文支持网   网站地图 鲁ICP备2022002796号-1