ziebee协议栈学习
zigbee协议栈是zigbee联盟制定的规范,而Z-Stack协议栈是TI zigbee节点的协议栈结构。
jennic的jn5139远没有TI的cc2430那么火,它不开放自己的协议栈,适合二次开发,用户想在zigbee协议栈上开发,也只能利用它提供的有限的接口。这些API函数中主要是两种:stack function调用app(application) function和app function调用stack function。我也初步了解到,协议栈分层并不是那么严格的,分层只是为了理解方便,比如,jn5139用户不能直接在网络层进行操作,但是应用层的app function可以调用一些函数完成对网络层的操作。
一、名词解释
UART:UniversalAsynchronous
端点(endpoint):它是一个8位的字段,描述一个射频端所支持的不同应用。
属性(attribute):设备之间通信的每一种数据像开关的状态或温度计值等皆可称为属性。每个属性可得到唯一的ID,它们都用结构体来描述。
cluster:簇,多个属性的汇集形成了簇,簇是属性的集合,每个簇也拥有一个唯一的ID。与WSN中的分簇相区别。
简单描述符结构体包括:端点号,支持的profile ID,支持的设备ID ,执行的设备描述的版本,终端支持的输入簇数目,指向输入Cluster ID列表的指针,终端支持的输出簇数目,指向输出簇 ID列表的指针。
端点描述符结构体包括:端点号,任务ID号,简单描述符,延时请求。
绑定(binding):通过使用ClusterID为不同设备上的端点建立一个逻辑上的连接。
二、MAC层一些概念
MAC帧分为信标帧、数据帧、确认帧和命令帧
CAP:contention Access period竞争接入期,任何设备想在此时通信,必须采用CSMA-CA竞争机制
CFP:contention free period非竞争期:由GTS组成的几个时隙,这段时期内不需竞争
在MAC层当中规定了两种信道接入模式,一种是信标(beacon)模式,另一种是非信标模式。信标模式当中规定了一种“ superframe”的格式,在超帧的开始发送信标帧,里面含有一些时序以及网络的信息,紧接着是竞争接入时期,在这段时间内各节点以竞争方式接入信道,再后面是非竞争接入时期,节点采用时分复用的方式接入信道,然后是非活跃时期,节点进入休眠状态,等待下一个超帧周期的开始又发送信标帧。而非信标模式则比较灵活,节点均以竞争方式接入信道,不需要周期性的发送信标帧。显然,在信标模式当中由于有了周期性的信标,整个网络的所有节点都能进行同步,但这种同步网络的规模不会很大。实际上,在ZigBee当中用得更多的可能是非信标模式。
三、coordinator中的一些函数:
1.初始化中用到的函数
在AppColdStart()中进行一些初始化,
网络号:当JZS_sConfig.u16PanId
信道:coordinator有16个频道可以选择,通常coordinator自动选择最安静的频道。
vLedControl(LED1, TRUE);用于控制led灯的亮灭。
vUART_printInit(),初始化UART print environment,在Printf.c中有定义
vAHI_UartSetInterrupt()启动串口中断,没有找到定义函数的源文件
bBosRun(TRUE),启动基本操作系统
2.用户自定义函数中调用的函数
添加设备描述调用的函数:
afmeAddSimpleDesc()添加节点简单描述
afdeDataRequest()向其他节点发送控制信息,数据请求等,参数包括:目的地址,目的端点,源地址,profile id,簇id,数据帧类型(KVP或MSG),发送数据的指针,数据发送深度。
3.供协议栈调用的回调函数,通常以JZA_开头
JZA_vStackEvent()用于处理协议栈反馈网络层的一些网络事件,在函数体,对网络层的一些时间作相应的处理,如网络建立成功之后,对节点的endpoint添加简单描述
JZA_bAfMsgObject()接受发送来的MSG类型消息
JZA_vAfKvpResponse()接收到KVP类型消息后进行回应,如果函数体为空,则不回应
先写这么些,很多地方还没弄明白