当前位置:首页 > 芯闻号 > 充电吧
[导读]Zigbee的术语重点弄懂它们的从属关系,主要包括:节点,设备,端点,簇(群集),属性。属性Attribute是一个反映物理数量或状态的数据值,比如开关值(On/Off),温度值、百分比等。群集Clu

Zigbee的术语


重点弄懂它们的从属关系,主要包括:节点,设备,端点,簇(群集),属性。

属性Attribute是一个反映物理数量或状态的数据值,比如开关值(On/Off),温度值、百分比等。

群集Cluster是包含一个或多个属性(attribute)的群组。简单的说,群集就是属性的集合。每个群集都被分配一个唯一的群集ID且每个群集最多有65536个属性。设备描述DeviceDescription是指一个大型目标应用的一部分,包括一个或多个群集,并且指定群集是输入还是输出。描述符有:节点描述符、电源描述符、简单描述符、端点描述符。

端点EndPoint是协议栈应用层的入口,也可以理解应用对象(ApplicationObject)存在的地方,它是为实现一个设备描述而定义的一组群集。(程序中的20吧)每个ZigBee设备可以最多支持240这样的端点,这也意味着在每个设备上可以定义240个应用对象。端点0被保留用于与ZDO接口,这是每个ZigBee设备必须使用的端点,而端点255被保留用于广播,端点241-254则被保留用于将来做扩展使用。

设备设备描述 Device Description 是指一个大型目标应用的一部分,包括一个或多个群集,并且指定群集是输入还是输出。描述符有:节点描述符、电源描述符、简单描述符、端点描述符。

节点 Node 也可以理解为一个容器,包含一组 ZigBee 设备,分享一个无线信道。每个节点有且只有一个无线信道使用。

 

绑定问题

在zigaee协议中定义了一种特殊的操作,叫做绑定(binding)操作。它能够通过使用ClusterID为不同节点上的独立端点建立一个逻辑上的连接。

要实现绑定操作,端点必须向协调器发送绑定请求,协调器在有限的时间间隔内接收到两个端点的绑定请求后,便通过建立端点之间的绑定表在这两个不同的端点之间形成了一个逻辑链路。因此,在绑定后的两个端点之间进行消息传送的过程属于消息的间接传送。其中一个端点首先会将信息发送到ZigBee协调器中,ZigBee协调器在接收到消息后会通过查找绑定表,将消息发送到与这个端点相绑定的所有端点中,从而实现了绑定端点之间的通信。

 

路由协议(RoutingProtocol)

        当路由器从他自身的应用程序或者别的设备那里收到一个单点发送的数据包,则网络层(NWKLayer)根据一下程序将它继续传递下去。如果目标节点是它相邻路由器中的一个,则数据包直接被传送给目标设备。否则,路由器将要检索它的路由表中与所要传送的数据包的目标地址相符合的记录。如果存在与目标地址相符合的活动路由记录,则数据包将被发送到存储在记录中的下一级地址中去。如果没有发现任何相关的路由记录,则路由器发起路径寻找,数据包存储在缓冲区中知道路径寻找结束。

ZigBee终端节点不执行任何路由功能。终端节点要向任何一个设备传送数据包,它只需简单的将数据向上发送给它的父亲设备,由它的父亲设备以它自己的名义执行路由。同样的,任何一个设备要给终端节点发送数据,发起路由寻找,终端节的的父亲节点都已它的名义来回应

注意ZigBee地址分配方案使得对于任何一个目标设备,根据它的地址都可以得到一条路径。在Z-Stack中,如果万一正常的路径寻找过程不能启动的话(通常由于缺少路由表空间),那么Z-Stack拥有自动回退机制

在Z-Stack中,执行的路由已经优化了路由表记录。通常,每一个目标设备都需要一条路由表记录。但是,通过把一定父亲节点记录与其子所有子结点的记录合并,这样既可以优化路径也可以不丧失任何功能

 

路径发现与选择

路径发现是网络设备凭借网络相互协作发现和建立路径的一个过程。路由发现可以由任意一个路由设备发起,并且对于某个特定的目标设备一直执行。路径发现机制寻找源地址和目标地址之间的所有路径,并且试图选择可能的最好的路径

路径选择就是选择出可能的最小成本的路径。每一个结点通常持有跟它所有邻接点的“连接成本(linkcosts)”。通常,连接成本的典型函数是接收到的信号的强度。沿着路径,求出所有连接的连接成本总和,便可以得到整个路径的“路径成本”。路由算法试图寻找到拥有最小路径成本的路径

路径通过一系列的请求和回复数据包被发现。源设备通过向它的所有邻接节点广播一个路由请求数据包,来请求一个目标地址的路径。当一个节点接收到RREQ数据包,它依次转发RREQ数据包。但是在转发之前,它要加上最新的连接成本,然后更新RREQ数据包中的成本值。这样,沿着所有它通过的连接,RREQ数据包携带着连接成本的总和。这个过程一直持续到RREQ数据包到达目标设备。通过不同的路由器,许多RREQ副本都将到达目标设备。目标设备选择最好的RREQ数据包,然后发回一个路径答复数据包(aRouteReply)RREP给源设备。RREP数据包是一个单点发送数据包,它沿着中间节点的相反路径传送直到它到达原来发送请求的节点为止

 

一旦一条路径被创建,数据包就可以发送了。当一个结点与它的下一级相邻节点失去了连接(当它发送数据时,没有收到MACACK),该节点向所有等待接收它的RREQ数据包的节点发送一个RERR数据包,将它的路径设为无效。各个结点根据收到的数据包RREQ、RREP或者RERR来更新它的路由表

 

路径维护

中间节点沿着连接跟踪传送失败,如果一个连接被认定是坏链,那么上游节点将针对所有使用这条连接的路径启动路径修复。节点发起重新发现直到下一次数据包到达该节点,标志路径修复完成。如果不能够启动路径发现或者由于某种原因失败了,节点则向数据包的源节点发送一个路径错误包(RERR),它将负责启动新路径的发现。这两种方法,路径都自动重建。

 

路径期满

路由表为已经建立连接路径的节点维护路径记录。如果在一定的时间周期内,没有数据通过沿着这条路径发送,这条路径将被表示为期满。期满的路径一直保留到它所占用的空间要被使用为止。设臵ROUTE_EXPIRY_TIME为期满时间,单位为秒。如果设臵为0,则表示关闭自动期满功能。

 

Z-Stack协议栈总体设计

Z-Stack由main()函数开始执行,main()函数共做了2件事:一是系统初始化,另外一件是开始执行轮转查询式操作系统,

任务初始化osalInitTasks(void)中的任务需要与声明的任务列表pTaskEventHandlerFn  tasksArr[]中的顺序一致。


设置事件发生标志。我知道的有两种方式。

1、osal_set_event(uint8task_id,uint16event_flag)

2、osal_start_timerEx(uint8taskID,uint16event_id,uint16timeout_value)

第一种方法直接设置标志flag置位,第二种方式则等待timeout_value时间然后再设置置位。

 

 ZigBee2007协议栈中使用的各个层次:

设备对象层,即ZDO(ZigBeeDeviceObject)层,提供了管理一个ZigBee节点所要使用的功能函数。ZDOAPI为协调器、路由器和终端设备提供了应用端点的管理函数,其中包括:建立、发现和加入一个ZigBee网络,绑定应用端点和安全管理。

应用框架层,即AF(ApplicationFramework),提供了针对协议栈的应用端点(EndPoint1~240)和设备对象端点(EndPoint0)接口,其中主要包含:设备描述数据结构和数据收、发函数。在ZigBee应用中,提供2种标准服务类型:键值对(KVP)或报文(MSG)

应用支持子层,即APS(ApplicationSupportSublayer),为设备对象和应用实体提供了一系列的支持服务

网络层,即NWK(ZigBeenetwork),为上层提供了管理服务和数据服务。

介质访问层,即ZMAC,在802.15.4MAC与网络层之间提供接口

运行 在 ZigBee 协 议 栈上 的 应用 程 序实 际上 就 是厂 商 自定 义的 应 用对 象 ,并 且 遵循 规 范(profile)运 行 在端 点 1~ 240 上 。在 ZigBee 应 用中 , 提供 2 种 标 准服 务类 型 :键 值 对(KVP) 或 报文 ( MSG)

 

应用函数接口

ZDO

设备网络启动
设备和服务发现
终端设备绑定、绑定和取消绑定服务
网络管理服务

 

设备网络启动

ZDApp_Init()—>ZDOInitDevice()

但是如果定义了HOLD_AUTO_START,则不进行设备网络启动,等待按键控制启动


启动过程的要点

 无论是协调器还是路由器或是终端设备,其启动过程至网络初始步骤均是一样的,只是不同设备的配置文件在编译时有所区别:
协调器:F8wCoord.cfg
-DZDO_COORDINATOR      // Coordinator Functions
-DRTR_NWK                          // Router Functions

路由器:F8wRouter.cfg
/*RouterSettings*/
-DRTR_NWK//RouterFunctions

终端设备:F8wEndev.cfg

 

对于协调器,在 Workspace 区域的下拉菜单中选择 CoordinatorEB-Pro,鼠标点击上方的“ make 按钮”后,所有文件对应的红色“ *”将消失,此时配置文件 f8wCoord.cfg 将被使用, 而 f8wEndev.cfg 和 f8wRouter.cfg 不会使用。对于路由和终端也是同样的配置,唯一不同是,路由情况下f8wRouter.cfg,其它两个不使用;终端情况下f8wEndev.cfg,其它两个不使用。 

IAR中编译选项,

要为协调器工程选项添加一条编译选项则操作方法是,打开 SampleApp 工 程 后 ,选 中 工 程 名SampleApp-CoordinatorEB,然后根据工程选项设置的路径:Project->Options->C/C++ Compiler->Preprocessor->Defined 。如下图所示。只需在 Defined symbols 框内添加一条新选项即可;要取 消编译选项,只需在该编译选项的左侧添加“ x”即可。



对于路由和终端位置相同,只不过以开始分别要workspace下面选RouterEB和EnddeviceEB以切换不同的工程(里面没有定义ZIGBEEPRO,说明我们的程序使用的是ZIGBEEPRO 2007)



所以说关于程序编译的宏定义是两个地方综合的结果,一个是IAR选项设置,另外一个是.cfg配置文件中的介绍。

 

针对不同配置文件有

在F8wCoord.cfg中定义了ZDO_COORDINATOR和RTR_NWK

在F8wRouter.cfg中定义了RTR_NWK

在F8wEndev.cfg中没有做定义。

 

根据以上配置的定义,在ZGlobals.h中确定了设备的类型

#if!defined ( ZSTACK_DEVICE_BUILD )

  #if defined ( ZDO_COORDINATOR )

    #define ZSTACK_DEVICE_BUILD  (DEVICE_BUILD_COORDINATOR)

  #elif defined ( RTR_NWK )

    #define ZSTACK_DEVICE_BUILD  (DEVICE_BUILD_ROUTER)

  #else

    #define ZSTACK_DEVICE_BUILD  (DEVICE_BUILD_ENDDEVICE)

  #endif

#endif

 

ZDO 任务事件处理函数

这一张表介绍的比较全,建立网络过程中用到的各种各样的函数


 

 

 

ZigBee 网络支持单播、组播和广播数据包。在实现组播通信时,需要将通信的端点加入到 工作组中。:
grp = aps_FindGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP); 如果同在一个工作组内,将该端点从工作组中删除:
aps_RemoveGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP ); 如果不在该工作组内,则将该端点加入到工作组中:
aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );

 

Zigbee终端是不是使用路由,要根据路径的优化来确定,它会选择最优的路径进行数据的传输。

 

MicroWait (n);微秒级延时

 

关于Zigbee的安全与加密

Zigbee规范定义了信任中心的用途,信任中心是在网络分配安全钥匙的一种令人信任的设备。Zigbee提供了一套基于128为AES算法的安全类和软件,并集成802.15.4的安全元素。Zigbee协议栈类为MAC、网络和应用层定义了安全性。它的安全服务包括针对关键进程建立和传输、设备管理和框架保护的方法。

安全方案有一组在MAC层的帧上所执行的操作完成,以提供安全服务,安全方案的名称表明对称加密算法、模式和完整性码的长度。

 

CC2530硬件支持128bit的AES加密算法

如何开启Z-stack中的加密算法。

1、 将f8wConfig.cfg文件中的-DSECURE=1,设置为1,这个变量在协议栈中作为if语句的条件使用,条件为真语句就是开启加密算法的函数。

2、 将ZGlobals.c中的uint8 zgPreConfigKeys= FLASE修改为uint8 zgPreConfigKeys = TRUE

3、 准备一个key,这个可以在函数nwk_global.c中修改,具体是以下数组

CONST byte defaultKey[SEC_KEY_LEN] =

{

#if defined ( APP_TP ) || defined ( APP_TP2 )

  // Key for ZigBeeConformance Testing

  0xbb, 0xbb, 0xbb, 0xbb,0xbb, 0xbb, 0xbb, 0xbb,

  0xaa, 0xaa, 0xaa, 0xaa,0xaa, 0xaa, 0xaa, 0xaa

#else

  // Key for In-HouseTesting

  0x08, 0x01, 0x02, 0x03,0x04, 0x05, 0x06, 0x07,

  0x08, 0x09, 0x0A, 0x0B,0x0C, 0x0D, 0x0E, 0x0F

#endif

};

 

如果使用了加密算法后,网络中所有设备都需要开启这个算法,且各个设备中的key必须相同。

加密算法开启以后,如果你需要修改代码,就必须改变你的key,或者是擦除一次你的flash。

 

OSAL维护了一个消息队列,每个消息都会被放到这个消息队列中去,当任何接收到事件后,可以从消息队列中获取属于自己的消息,然后调用消息处理函数进行相应处理即可。



每个消息都包含一个消息头osal_msg_hdr_t和用户自定义的消息,osal_msg_hdr_t结构体的定义为:

typedef struct

    void     *next;

    uint16   len;

   uint8    dest_id;

}osal_msg_hdr_t;


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

业内消息,台积电在近日举行的 2024 年欧洲技术论坛上再次确认,其德国晶圆厂项目定于今年四季度开始建设,预估 2027 年投产。

关键字: 台积电 晶圆厂

业内消息,日前美国移动、视频和人工智能技术公司InterDigital宣布,由于联想(包括摩托罗拉移动)侵犯其4G和5G设备专利,已获得德国慕尼黑地区法院对于联想的禁令。这也意味着联想支持4G/5G网络的设备(包含手机、...

关键字: 联想 4G 5G

业内消息,特斯拉近日又损失了一位自动驾驶领域的顶尖 AI 工程师 ——Paril Jain,Jain 此前担任特斯拉人工智能团队的“规划、模仿学习和强化学习”部门的技术负责人。他的离职正值特斯拉大规模裁员以及员工士气低迷...

关键字: 自动驾驶 特斯拉 AI工程师

业内消息,近日求职平台脉脉高聘人才智库发布的《2024春招高薪职业和人才洞察》报告显示,抖音、亚⻢逊、大疆霸榜高薪公司,岗位平均薪资超5万元(月薪)。

关键字: 抖音 华为 亚马逊 大疆 商汤科技

业内消息,日前微软官方宣布与量子计算公司Quantinuum的深度合作取得了显著成果。在实验中成功完成了多达14000次无错误的量子计算操作,这一成就不仅刷新了量子计算错误率的纪录,而且将错误率降低了800倍,为量子计算...

关键字: 微软 量子计算 突破

国际货币基金组织(IMF)总裁克里斯塔利娜・格奥尔基耶娃(Kristalina Georgieva)日前表示,AI正在像“海啸”一样冲击着全球劳动力市场。

关键字: IMF AI 劳动力市场 GPT-4o

助力科研与检测新突破 上海2024年5月15日 /美通社/ -- 全球知名的科学仪器和服务提供商珀金埃尔默公司今日在上海举办了主题为"创新不止,探索无界"的新品发布会,集中展示了其在分析仪器领域的最...

关键字: 质谱仪 BSP DSC 气相色谱

深圳2024年5月15日 /美通社/ -- 近日,国际公认的测试、检验和认证机构SGS(以下简称为"SGS")为雅特力科技颁发AEC-Q100认证证书以及IEC 60730认证证书。获得AEC-Q10...

关键字: AEC-Q100 力科 AT32 测试

广州2024年5月16日 /美通社/ -- 为全面推动昆明市公共领域车辆电动化,在昆明市发展和改革委员会的牵头组织下,昆明配售电有限公司、昆明低碳投资集团有限公司、昆明空投城...

关键字: 电动化 电站 新能源汽车 电网

借助面板,用户在思考和创作时只需轻捏Apple Pencil Pro,即可调用基本工具和命令,避免因繁琐的操作分散注意力 适用于钢笔的动态墨水可根据Apple Pencil Pro的旋转调节墨水流量,让数字化...

关键字: APPLE PENCIL NOTES GO
关闭
关闭