KW441Z 支持thread和ble同时的特性,让我很兴奋。thread属首次接触,看了挺长一段时间了,有的地方可能还是一知半解,先记下来,又不对的地方,欢迎拍砖。在这里赞一下nxp提供的文档,看起来很丝滑有木有~~kw41z的sdk提供了详细的文档,不用上网站一个个下,省心很多。关于thread的文档位于docs/wireless/thread目录下。thread相关的demo也很丰富,这里暂时了解的有router eligible device和end device两种设备类型的demo,这两个demo能完整的表现thread组网的内容,其中reed设备可以转换为leader router、active router和end device的角色。除了border router与非thread网络通信的内容,其它都可以从这两个demo中学习到。
Thread节点类型
说说thread,百科曰:
Thread is an IPv6-based, closed-documentation, royalty-free[1] networking protocol for Internet of Things (IoT) "smart" home automation devices to communicate on a local wireless mesh network.
thread是一个针对IoT应用的IPv6 mesh网络协议,底层mac和phy层基于802.15.4无线协议标准(Zigbee也是基于802.15.4). 这里的IPv6为6LowPAN,
IPv6 over Low power Wireless Personal Area Networks. 看全程应该很明白了。下面看一下Thread的结构:
6LowPAN在mac层和phy层之上,由Thread实现,Thread同时实现的还有路由和udp协议,这些都可以对比传统的网络模型加以理解。再之上就是应用层了,比较常用的是CoAP协议,可以类比为常见的HTTP协议,CoAP协议全称为Constrained Application Protocol ,由于HTTP这种协议用在嵌入式设备上显得过于庞大,所有就有了这货。
大概理清了Thread协议的结构之后,另外还需要理解一下IPv6协议才好进行下一步了。因为Thread中跟其它节点沟通需要知道对方节点的IPv6地址, 不同于以往的IPv4地址表示方法,IPv6使用128位二进制数据表示一个IP地址. IPv6地址的记法分为标准和简写,这里以我的KW41Z的ifconfig信息为例说明一下。
标准写法为用:分割的8组4个4位16进制数表示,我的kw41z的ML64地址 fd18:ac32:9b0f:b537:145d:c752:46ba:e917,而简写分为单组前0省略和多组全0省略。单组前0省略如ML16地址 fd18:ac32:9b0f:b537::ff:fe00:400的最后一组地址400,本来应该为0400,前面的0省略了。多组全0省略指当相邻的几组全为0是,用两个冒号::省略这些0,如LL64地址 fe80::8008:bcc4:9a4e:2d25,这里需要注意的是,这种::省略只能使用一次,因为多次的时候,就不能确定这中间到底省略了几组数据了。 另外IPv6还可以兼容IPv4,具体写法参考这个链接
另外大家应该有注意到这里有好几个IP信息:
前3个为单播IP:
Link Local 指单个子网的ip,即一个active router下有效,类似于我们常见的192.68.1.x局域网ip
Mesh Local 指整个Thread Mesh网络的IP地址,用于在整个Mesh网络中通信
其实应该还有另外一种IP地址,由border router分配的广域网IP,可全球定位的。
此外这里的地址还有 16和64之分,这里的16、64指的是子网掩码,类似于我们平时常见的192.168.1.0/255.255.255.0,这种子网还有另外一种记法就是192.168.1.0/24,也就是我们这里的 LL64、ML16这样的地址了,可不要以为是16/64位地址哦。
后二个为多播/组播IP,用于数据广播,不做进一步解释。
好了,先写这么多
此内容由EEWORLD论坛网友shinykongcn原创,如需转载或用于商业用途需征得作者同意并注明出处