原创 CC2530网络层协议设计思路(3)

2013-8-27 15:01 2355 16 17 分类: MCU/ 嵌入式 文集: CC2530网络层协议设计思路

本贴讨论树状路由机制。

在前贴zigbee协议栈路由协议学习(3):Neighbor表中提到了Microchip的Zigbee Stack中判断一个网络地址是否本节点的下属节点的地址的方法有局限性。(TI和MSLWPAN的协议栈也是采用这种方法)

在该机制中,一个节点的网络地址以及其下属的节点所属的地址空间由PROFILE_nwkMaxChildren、PROFILE_nwkMaxDepth、PROFILE_nwkMaxRouters这些配置参数的决定。PROFILE_nwkMaxRouters指一个节点允许带多少个下属的路由节点,PROFILE_nwkMaxDepth指整个网络最多有多少层,PROFILE_nwkMaxChildren指一个节点允许带多少个子节点。

该机制中,当这三个配置参数确定后,地址空间的划分方式就确定了(一个路由节点的子节点的地址在哪个范围,它的第几个路由子节点的地址是多少,它的第几个终端子节点的地址是多少),并且每个路由节点的下属节点地址结构都是一样的。

路由器节点地址组成一个对称的m层n叉树, m=PROFILE_nwkMaxDepth(根节点是第0层), n=PROFILE_nwkMaxRouters。  把这棵树打平放,每个节点垂下k=PROFILE_nwkMaxChildren-PROFILE_nwkMaxRouters条须,连接终端子节点。

Cskip(d) 值表示第d层路由节点的路由子节点的地址空间大小,由上述三个参数决定。例如:

#define PROFILE_nwkMaxChildren              20
#define PROFILE_nwkMaxDepth                 5
#define PROFILE_nwkMaxRouters               6

则:
#define CSKIP_DEPTH_0                       0x143D   /*5181 */
#define CSKIP_DEPTH_1                       0x035D   /*861 */
#define CSKIP_DEPTH_2                       0x008D  /*141 */
#define CSKIP_DEPTH_3                       0x0015  /*21 */
#define CSKIP_DEPTH_4                       0x0001 
#define CSKIP_DEPTH_5                       0x0000 

则:

根节点地址为0000;

第1层(根节点下属)6个路由子节点的地址分别为{0x143D(5181),              0x287A(10362),        ...  0x796E(31086)},根节点下属的14个终端子节点地址为31087-31100。

根节点下的第1个路由子节点的地址为5181,它的下属6个路由子节点的地址为{861, 1722, 2583, 3444, 4305, 5166},它的下属14个终端子节点地址为5167-5180。

地址为861的路由节点的下属6个路由子节点的地址为{141, 282, 423, 564,705, 846},它的下属14个终端子节点地址为847-860。

地址为141的路由节点的下属6个路由子节点的地址为{21, 42, 63, 84, 105, 126},它的下属14个终端子节点地址为127-140。

地址为21的路由节点的下属6个路由子节点的地址为1-6,它的下属14个终端子节点地址为7-20。

 

该机制的优点是节点地址与路由树的位置对应关系是固定的。给出目的节点地址,根据3个参数即可判断目的节点地址是哪一层哪个路由节点或者是哪一层哪个路由节点下属的第几个终端子节点。

或者说,给出目的节点地址,就可以判断其是否在本节点管理范围,如果是,则判断是直属子节点还是归哪个路由子节点管理,然后将消息转发给它;如果不是,则将消息转发给父节点。

这个判断过程不需要用到路由表或者邻居表,实现简单,不占用内存空间。这个优点对于资源有限的WSN节点十分重要,尤其是数据量较大,转发时间要短的情形下。

 

其缺点,一是允许每个路由节点管理的路由子节点数目和终端子节点数目是固定的,与其所在的层数无关,与应用实际建立的拓扑无关。对地址空间造成浪费。

二是加入一个网络的所有节点的三个Profile参数值必须是一样的,否则会出问题。在Microchip、TI等公开的参考实现代码中,这几个值是定义在头文件中,运行时改变不了的。也就是说,入同一个网的路由节点的程序,在编译时使用的这几个参数的值必须是一样的。这对于Zigbee这种目的是兼容多家厂家的产品进行互操作的协议栈来说是不合适的。在实际使用中须让这几个参数成为变量,可以通过网络进行更改。

 

修改思路

1、要保留该机制的优点,就是简单、快。不查表,仅根据目的地址(网络层)能够判断是:a) 子节点或父节点;b) 转发给下属路由子节点;c) 转发给父节点。

这样的话,要求一个路由节点的所有下属节点(直接或间接)的地址在一个连续的地址空间之中。

或者退一步,允许下属节点的地址在少量几个连续的地址空间之内,这就存在一个地址空间表{{开始1,结束1};{开始2,结束2};...}。这个思路的目的是,当一个路由节点更换父节点时,可以不更换自己及子节点的地址。

2、一个路由节点的地址空间由根节点(或根节点背后的管理系统)分配。

这样的话,允许相同层次的不同路由节点的地址空间大小不一样;允许中间层次的路由节点和最低层次的路由节点的地址空间大小不一样。

但是这样的话,增加了控制消息的种类,增加了根节点的管理功能,增加了地址分配算法和地址调整算法的复杂度(包括影响了节点加入、退出、更换父节点的机制)。也会延长了节点加入的时延。

退一步,在一定范围内允许路由节点决定子节点的地址或地址空间。


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户434590 2013-12-7 00:56

zigbee2007和pro不是引入了随机地址分配机制吗?这种树状地址分配是有很大问题,不能选择路由,网络拓扑不可变。
相关推荐阅读
用户138786 2015-03-16 18:38
WIFI模块(HED10W07SN)应用设计入门
WIFI模块(HED10W07SN)应用设计入门 以下系列帖子记录我学习WIFI模块(HED10W07SN)的过程和心得,以及为学生设计的入门指引。 ...
用户138786 2015-03-16 18:37
HED10W07SN串口应用设计
串口通信应用设计 HED10W07SN模块有两个串口。厂家提供的参考实现中,串口0用于管理:AT指令、EM_WIFI程序下载、Boot Loader程序下载(...
用户138786 2015-03-16 16:42
HED10W07SN基本I/O设计
基本I/O设计 芯片中没有与其它外设功能复用的GPIO引脚只有3个:GPIO11、GPIO12、GPIO13。 底层提供...
用户138786 2015-03-16 16:40
WIFI模块HED10W07SN开发环境
开发环境 选择联盛德微电子的HED10W07SN模块入手进行学习是带点偶然的。 拿WIFI模块和CC2530结合做网关是很早就想做的事,但WIFI模...
用户138786 2014-11-27 19:29
无线单片机入门导学(基于CC2530)
无线单片机(WSN/Zigbee)应用设计入门导学(基于CC2530) 我们学习无线单片机编程/应用设计是为了什么呢? 1、设计有用的应用...
用户138786 2014-11-27 19:24
web方式远程控制
web方式远程控制应用设计 这一类应用的特点是客户端通过浏览器(http协议)方式对无线单片机进行远程控制及数据采集。 ...
EE直播间
更多
我要评论
1
16
关闭 站长推荐上一条 /3 下一条