This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

诚心求教关于绑定的方向问题

Other Parts Discussed in Thread: CC2530

开发板是基于cc2530的,基本功能正常,应该不会有硬件问题。

使用的是ZDP_EndDeviceBindReq()方式进行绑定,我用ED A发起绑定,然后ED B响应绑定,就是先按A的绑定键(会在按键处理程序里面调用ZDP_EndDeviceBindReq()函数),再按B的绑定键,绑定成功(靠指示灯判定),现在的问题是:

我的理解是A发起的绑定,那么绑定表会存在A里面,那么应该A可以控制B,但是B不能控制A。然而实际却是绑定成功后A和B能互相控制。请问这样正常么?

我的两个ED的程序是完全一样的,也就是说输出输出cluster都一样会不会就是因为这个问题导致了“双向绑定”。

更奇怪的是:
比如我绑定的时候先按A(的绑定键),后按B,我现在准备解绑定,那么按照教程来说应该也是先按A后按B。实际却是如果我先按B再按A也发现绑定取消了,请问各位大神这样的情况合理么?还是我原先的理解有误?

新人诚心求教,请各位大神不吝赐教,先谢过了!!!

  • 大神们帮帮忙吧!!!

  • 绑定是基于功能的绑定,一个输出和一个输入匹配以后的绑定。

    你用A绑定B的时候,肯定是A的输出和B输入匹配,然后A的输入和B的输出匹配,这样造成了两个能互相控制。

    一般举个最简单的情况,一个开关 on/off的输出,一个灯 on/off的输入,绑定以后只可能开关控制灯,不可能是灯控制开关的。

  • 多谢VV的解释,经过一晚上折腾实验,终于总结出了绑定的特点。之前的资料上写的不是特别详细,也有可能是我自己理解有问题,总之把我的心得分享一下,欢迎大家交流讨论。

    使用ZDP_EndDeviceBindReq()进行bind的时候有4个参数关于输入和输出簇的。两个设备执行ZDP_EndDeviceBindReq()后,协调器会比较双方传进来的输入输出簇列表,如果A方的输出簇能匹配另B方的输入簇(AB不分调用绑定函数的先后顺序,就是按键的先后顺序无所谓),那么绑定成功,绑定表建立在A方(拥有输出簇的一方)。同时,如果A的输入簇能匹配上B的输出簇,那么这个匹配也成功,姑且叫做双向成功吧。按照绑定表保存在拥有输出簇的一方的规则,B中也会新建一个绑定表。因此绑定成功后AB能互相控制。但是如果A只有输出簇,且B有输入簇(这时有没有输出簇已经无所谓了),那么绑定可以理解为只能是单向成功的:A-》B,也就是A能控制B,而B不能反过来控制A。要证明在双向绑定成功的前提下双方都有一个绑定表很简单,不要开启NV_RESTORE,reset B设备,重启后发现A依然能控制B,但是B不能控制A了。

  • 希望能够多分享你的总结,非常感谢!

  • 不知道总结的对不对请多指教啊!!!