非开源协议栈:
1、freescale 解决方案
协议栈种类:
1.1 802.15.4标准mac
1.2 SMAC
1.3 SynkroRF
1.4 ZigBee RF4CE
1.5 ZigBee 2007
最简单的就是SMAC,是面向最简单的点对点应用的,不涉及网络的概念;
其次是IEEE802.15.4,一般用来组建简单的星型网络,而且提供了源代码,可以清楚地看到网络连接的每个步骤,分别调用了哪些函数;
BeeStack(符合zigbee 2007)是提供的最复杂的协议栈,但是看不到代码,它提供给你一些封装好的函数,比如创建网络函数,你直接调用它,协调器就把网络创建好了,终端节点调用它则寻找可以加入的ZigBee网络并尝试加入。
其中硬件平台可以为下面中的任一种:
MC13202 ( 2.4 GHz射频收发器)
MC13213 ( 2.4 GHz射频收发器和带60K闪存的8位MCU)
MC13224V ( 2.4 GHz平台级封装(PIP) –带有128KB闪存、96KB RAM、80KB ROM的 32位TDMI ARM7处理器 )
MC13233
(带有HCS08 MCU的2.4 GHz片上系统 )
MC13202没有自带mcu,在做应用时,需要用户在自己的扩展板上加上mcu,既需要实现对外围设备的底层控制,也需要实现协议栈。下面的几种均有自带mcu,协议栈的实现在自带的mcu上实现,功能较简单的可直接使用片上的mcu资源进行控制;功能复杂的应用,最好协议栈实现与外围控制分开,大多数应用都选择arm芯片作为控制芯片;
详细信息可以查看http://www.freescale.com.cn/products/rf/ZigBee.asp
2、microchip 解决方案
协议栈种类:
ZigBee® Smart Energy Profile (SEP) Suite
PRO ZigBee®
RF4CE ZigBee®
均是一整套的协议集,价格不菲;
硬件平台:
Pic18(mcu)+MRF24J40(2.4GHZ 射频收发器)+天线
与freescale 的mc13202相似,MRF24J40也只是射频收发器,不包含mcu,协议栈的实现需要借助于外围的mcu,当然微芯公司选择的是pic18及以上的芯片作为其主控mcu,通过spi接口与MRF24J40通信,查询其寄存器的状态,实现协议栈功能。
详见:http://www.microchip.com/
3、ST 意法半导体 解决方案
协议栈:
EMZNET ZigBee® protocol stack
硬件平台:
Sn250 集成了 2.4GHZ的无线收发模块和emberznet16位微处理器;
详见:http://www.stmicroelectronics.com.cn/cn/analog/product/219474.jsp
半开源协议栈:
1、TI的解决方案:
协议栈(免费):
z-stack系列(不同的平台)
ZStack-CC2530-2.5.0
ZStack-EXP5438-2.5.0
ZStack-MSP2618-2.5.0
ZStack-LM9B96-2.5.0
ZStack-ZAP-MSP430-1.0.4
详见:http://www.ti.com/tool/z-stack
硬件平台:
cc2530(带有增强型8051mcu)
cc2530+cc2591(增加发射功率)
cc2520(2.4GHz ZigBee/IEEE 802.15.4 射频收发器)
CC2538(Cortex M3)
常用的是前两种;对要求不高的应用,不用另加mcu直接使用,非常方便。
详见:http://www.ti.com.cn/lsds/ti_zh/analog/zigbee.page
开源协议栈:
1. msstatePAN
Cortex M3
来自 https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&ch=6&tn=98012088_dg&wd=CC2538&rsv_pq=8c7683ac0000e031&rsv_t=f2fa44LwaQha384oMXVahU7f56qPh%2FMCRBV6k9bcViU84pe7UDItkG%2BlKtRr9u9Ldw8&rqlang=cn&rsv_enter=1&rsv_sug3=6&rsv_sug1=6&rsv_sug7=100&rsv_sug2=0&inputT=4735&rsv_sug4=4736
msstatePAN协议栈是由密西西比大学的R.Reese教授为广大无线技术爱好者开发的精简版ZigBee协议栈,基于标准C语言编写,基本具备了 ZigBee协议标准所规定的功能,最新版本为V0.2.6,该版本支持多种开发平台,包括PICDEM Z、CC2430评估板、MSP430+CC2420(Tmote)以及WIN32虚拟平台。源代码是开放的,整个协议栈是基于状态机(FSM)实现的。如果你的程序构架不是基于操作系统的,有限状态机应该是一个很好的选择。而且OS(operating system)中进程的状态也是个各个状态间的切换。
该协议栈的网站地址如下 http://www.ece.msstate.edu/~reese/msstatePAN/
在网站上我们可以看到起最近的更新是在2007年,到目前为止已经有三年多的时间没有更新升级了。
freakz协议栈和contiki操作系统。
freakz是一个彻底的开源zigbee协议,配合contikj操作系统,相当于Z-Stack+OSAL。相对于另外一个开源的WSN(Wireless Sensor Networking,无线传感网)操作系统TinyOS来讲,contiki的代码全部为C语言写成,用GCC进行编译,对广大应用C语言多年的开发者 来说,减少了学习另外一种语言与编译平台所带来的时间花费。
其下载地址如下:
http://www.sics.se/contiki/
http://sourceforge.net/projects/freakz/
这里介绍一个专门研究开源ZigBee协议的网站,主要是frankz协议栈,已经写了很多好的文章。下面是他们的网站:
http://www.feibit.com/
TinyOS
TinyOS是UC Berkeley(加州大学伯克利分校)开发的开放源代码操作系统,专为嵌入式无线传感网络设计,操作系统基于构件(component-based)的架构使得快速的更新成为可能,而这又减小了受传感网络存储器限制的代码长度。TinyOS的构件包括网络协议、分布式服务器、传感器驱动及数据识别工具。它只是一个操作系统,不过现在已经成立了 TinyOS ZigBee Working Group 已经开始设计开源的zigbee。非常值得我们的期待。
TI_ZStack协议栈部分层功能介绍:
APP:应用层,用户可以根据需求添加自己的任务。这个目录中包含了应用层和项目的主要内容,在协议栈里面一般是以操作任务实现的。
HAL:硬件驱动层,包括与硬件相关的配置、驱动以及操作函数。
OSAL:协议栈的操作系统。
Profile:AF层,包含AF层处理函数。
Security&Services:安全服务层,包含安全层和服务层处理函数,比如加密。
Tools:工程配置目录,包括空间划分和Zstack相关配置信息。
ZDO:ZDO设备对象层。包括网络建立、发现网络、加入网络、应用端点的绑定和安全管理服务。
ZMac:MAC层,包括MAC层参数及MAC层的LLB库函数、回调处理函数。
ZMain:主函数目录,包括入口函数及硬件配置文件。
Output:输出文件目录,由IAR自动生成。
NWK:网络层,节点地址类型的分配、协议栈模板、网络拓扑结构、网络地址分配的选择、包含用户自定义参数
MAC:介质访问控制协议是传感器网络底层的基础结构,它决定了无线信道的使用方式。
ZDApp.c //包含网络启动与节点加入流程函数
基于IEEE802.15.4无线传输标准
Ad-hoc:基于自组网的对等网络
Zstack协议栈是一个半开源的协议栈,其中MAC层和ZMAC层的源代码没有全部
ZigBee_ZStack_OSAL简介:
OSAL运行起来后不停地询检有无事件发生,如果询检到某个任务有事件发生,便将此事件传递给事件处理函数进行事件的处理。
OSAL主要作用是:实现任务的注册、初始化以及任务的开始;任务间的消息交换;任务同步和中断处理;存储器分配和管理。
OSAL术语:
任务:也称作一个线程,是一个简单的程序。被赋予一定的优先级,有自己的一套CPU寄存器和堆栈空间,一般将任务设计为一个无线循环。有就绪态、运行态、挂起态(封锁态)、被中断态四种状态。
多任务运行:“多任务运行”其实是一种假象,实际上只有一个任务在运行,CPU可以使用任务调度策略将多个任务进行调度,每个任务执行的时间很短,任务之间的切换很频繁。
资源:任何一个任务所占用的实体都可以称为资源,如一个变量、数组和结构体。
共享资源
内核:在多任务系统中,内核负责管理各个任务,主要包括为每个任务分配CPU时间、任务调度和负责任务间的通信。
互斥:在多个任务系统中,多个任务在访问数据时具有排他性,即称为互斥。保证每个任务数据访问的唯一性。
消息队列:消息队列用于任务间传递消息,通常包含任务间同步的信息。
osal_init_system()
此函数是任务系统中的主循环函数。它将仔细检查所有的任务事件,并且为含有该事件的任务调用任务事件处理函数。如果有特定任务的事件,这个函数将为该任务调用事件处理例程来处理事件。相应任务的事件处理例程一次处理一个事件。一个事件被处理后,剩余的事件将等待下一次循环。如果没有事件,这个函数使处理器程序处于睡眠模式。
OSAL系统文件中:
taskArr数组,该数组的每一项都是一个函数指针,指向了事件的处理函数
taskCnt变量,保存任务总个数
taskEvent指针,指向了任务事件的首地址
taskEvent和taskArr数组中的数组是一一对应的,taskArr数组中的第 I 个事件处理函数对应taskEvent中的第 I 个任务事件。
系统消息事件包含以下几种:
按键事件;
接收消息事件;
消息接收确认事件;
网络状态改变事件;
绑定确认事件;
匹配响应事件。