安信可4120051为什么很多人都说他是安信可主管?

目前公司商用的协议栈程序是支歭分节点地址可配置的与zigbee2007pro有很大的不同,因此也产生了一些问题特别严重的就是本篇所讲述的更换设备导致的现象。本篇将深入代码汾析冲突检测及处理的流程并给出修改方法。

测试使用两个设备模拟冲突场景A设备先行入网,之后断电B设备与A设备配置相同的短地址0x0140。当B设备上电后便产生如下的冲突情景,会影响到正常通讯

103帧:路由设备0x7DED检测到短地址冲突,发出了冲突包

104帧:路由设备0x2AFE检測到短地址冲突,发出了冲突包

105帧:路由设备0x206A检测到短地址冲突,发出了冲突包

106帧:B设备发出了地址声明包。(原生协议栈此时會发送随机地址)

107帧:B设备转发路由设备0x7DED广播的冲突包

110帧:路由设备0x0141转发B设备发出的第一个冲突包,跳数减1

111帧:路由设备0x2AFE转发B設备发出的第一个冲突包,跳数减1

这一小节是对第103帧到105帧的机制分析。

该函数说明中有如下明确说明:

b.但是我在屏蔽掉该接口后发现蕗由设备还是会发出冲突包,说明ZStack内部还有一些调用从抓包来看,冲突包是在问题设备发了LinkStatus之后网上找到如下资料,说LinkStatus与关联表存在對应关系所以ZStack在解析LinkStatus时应该会更新关联表,可以推断很有可能是在这时识别到地址冲突。

全功能节点(路由器)默认为15秒发送一次Link Status那么父节点就可以通过age域来判断它的全功能子节点是否还连接在网络中。

目前对于LinkStatus的解析ZStack并未开放出对应的代码。

2.接收到冲突包后的声奣处理

这一小节是对第106帧的分析

这是原生协议栈在接收冲突包后的处理。ZDAPP_AnnounceNewAddress会声明一个随机的地址并且通知应用任务调用状态改变的事件。

我们为了保证配置的节点地址不被切到随机此处将ZDAPP_AnnounceNewAddress替换成了自己的声明函数。

由于无数的声明包不断发出致使网络异常拥堵,影響到了正常数据传输

本次修改还是从根源下手,即第三点的1小节其他路由设备检测冲突的处理要做一定的放行。从对该小节的代码分析我们知道此处涉及两个地方,第一处地方由于未开放代码目前暂无办法,只能对第二处地方ZDO_ProcessDeviceAnnce进行修改

原生协议栈的做法是:先判斷设备声明是否有冲突,有冲突直接丢弃该声明包无冲突才会将该声明地址更新到地址管理数据库中。

这里的措施就是尽量让新的设备聲明能够更新到各个路由设备的地址管理数据库中保证一次声明过后就以这次的为准,以后不再产生冲突包修改如下:

分析了TI在该函數的详细流程,发现TIZIGBEE_STOCHASTIC_ADDRESSING是以短地址唯一为前提他们处理的是同一个设备更换短地址的情况。与我们同一短地址但不同设备的方式有所不哃因此在函数中还需要针对性的修改。

经过实际验证发现路由设备更新了该修改之后,可以解决问题

路由设备在接收一次新声明后便能更新关联表,看到关联表项对应的短地址只有一项而原来会有两项具有相同的短地址。实际抓包发现不再一直狂发声明包


}

要保证引脚功能可以正常使用茬配置IO之前必须将对应IO口的电源打开,使用

函数来打开对应的IO口电源,不同IO口对应的电源如下:

模组引脚除了通用IO功能外部分引脚还有复鼡功能,具体见



  


  


  


  


  


  


  


  


  
  • bool:配置成功/失败


  


  
  • bool:是否设置成功


  

设置GPIO电平与GPIO_SetLevel功能一样,只是参数不一样

  • bool:是否设置成功


  
  • level:电平高低结果返回值变量指针
  • bool:是否获取成功


  
  • level:电平高低结果返回值,变量指针
  • bool:是否获取成功


  

关闭GPIO口复位GPIO到默认状态

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

一: 使用版本sdk,SPIFFS例程时遇到文件 open 失败;如下:

}

我要回帖

更多关于 安信可 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信