ZigBee协议栈简介

ZigBee协议栈简介文章目录Zigbee协议栈简介如何理解Zigbee协议栈如何使用Zigbee协议栈Zigbee协议栈简介  Zigbee协议分为2部分:IEEE802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范。Zigbee联盟定义了NWK(网络层)、APS(应用程序支持层)、APL(应用层)技术规范。  Zigbee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供API,用户可以直接调用。如何理解Zigbee协议栈  TI推出的ZigBee2007协议栈也

大家好,又见面了,我是你们的朋友全栈君。

Zigbee协议栈简介

  Zigbee协议分为2部分:

  1. IEEE 802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范。
  2. Zigbee联盟定义了NWK(网络层)、APS(应用程序支持层)、APL(应用层)技术规范。

  Zigbee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供API,用户可以直接调用。

在这里插入图片描述

如何理解Zigbee协议栈

  TI推出的ZigBee 2007协议栈也称为Z-Stack,它是Chipcon推出其CC2430开发平台时,开发的一款商业级协议栈软件。
  Chipcon公司为自己设计的Z-Stack协议栈中提供了一个名为操作系统抽象层OSAL的协议栈调度程序。
  下图是TI公司的基于ZigBee 2007的协议栈Z-Stack-CC2530-2.3.0,所有文件目录如红色框所示,我们可以把它看做一个小型的操作系统,采用任务轮询的方法运行。
在这里插入图片描述

如何使用Zigbee协议栈

  以简单的无线数据通信为例,其一般步骤为:

  • 组网:调用协议栈组网函数、加入网络函数,实现网络的建立和节点的加入。
  • 发送:发送节点调用协议栈的发送函数,实现数据无线发送。
  • 接收:接收节点调用协议栈的无线接收函数,实现无线数据接收。

  由于协议栈都把这些函数都封装好了,因此我们用起来比较方便。大家可以了解一下下面的关键字:

  • CCMCounter with CBC-MAC(Mode of Operation)
  • HALHardware Abstraction Layer(硬件抽象层)
  • PANPersonal Area Network(个人局域网)
  • RFRadio Frequency(射频)
  • RSSIReceived Signal Strength Indicator(接收信号强度指示)

  CC2530 BasicRF文件夹结构如下图:
在这里插入图片描述

  • docs文件夹:打开文件夹,里面仅有一个名为CC2530_Software_ExamplesPDF文档,文档的主要内容是介绍Basic RF的特点、结构及使用。从中我们可以知道,里面Basic RF包含三个实验例程:无线点灯、传输质量检测、谱分析应用。
  • Ide文件夹:打开文件夹后会有三个文件夹,以及一个cc2530_sw_examples.eww工程,这个工程是上面提及的三个实验例程工程的集合。在IAR环境中打开该工程,在workspace看到如下文件夹:Ide\Settings文件夹是在每个基础实验的文件夹里都会有的,它用于保存读者自己的IAR环境设置;Ide\srf05_CC2530文件夹里面放有三个工程,即light_switch.ewwper_test.ewwspectrum_analyzer.eww
  • Source文件夹:该文件夹里面有apps文件夹和components文件夹。Source\apps文件夹存放Basic RF三个实验的应用实现的源代码;Source\components文件夹包含着Basic RF的应用程序使用不同组件的源代码。

  打开文件夹WeBee CC2530 BasicRF\ide\srf05_cc2530\iar路径里面的工程light_switch.eww(无线点灯),我们的实验就是对它进行修改的。在介绍Basic RF之前,来看看这个实验例程设计的大体结构。
在这里插入图片描述

  • Hardware layer:这是实现数据传输的基础。
  • Hardware Abstraction layer:它提供了一种接口来访问TIMERGPIOUARTADC等,这些接口都通过相应的函数进行实现。
  • Basic RF layer:为双向无线传输提供一种简单的协议。
  • Application layer:它是用户应用层,相当于用户使用Basic RF层和HAL的接口。我们通过在Application layer就可以使用到封装好的Basic RFHAL的函数。

  Basic RFTI公司提供,它包含了IEEE 802.15.4标准的数据包的收发功能,但并没有使用到协议栈,仅仅让两个结点进行简单的通信。也就是说,Basic RF仅仅是包含IEEE 802.15.4标准的一小部分。其主要特点有:

  1. 不会自动加入协议,也不会自动扫描其他节点也没有组网指示灯(LED3)。
  2. 没有协议栈里面所说的协调器、路由器或者终端的区分,节点的地位都是相等的。
  3. 没有自动重发的功能。

  Basic RF的工作过程有启动、发射和接收。使用Basic RF实现无线传输只要学会使用这些过程的相应函数就可以了。
  启动的要求如下:
  1. 确保外围器件没有问题。
  2. 创建一个basicRfCfg_t的数据结构,并初始化其中的成员,在basic_rf.h代码中可以找到:

typedef struct { 
   
    uint16 myAddr;    /* 16位的短地址(就是节点的地址) */
    uint16 panId;     /* 节点的“PAN ID” */
    uint8 channel;    /* RF通道(必须在11至26之间 */
    uint8 ackRequest; /* 目标确认就置为true */
#ifdef SECURITY_CCM /* 是否加密,预定义里取消了加密 */
    uint8 *securityKey;
    uint8 *securityNonce;
#endif
} basicRfCfg_t;

  3. 调用basicRfInit函数进行协议的初始化,在basic_rf.c代码中可以找到:

uint8 basicRfInit ( basicRfCfg_t *pRfConfig );

函数功能是对Basic RF的数据结构初始化,设置模块的传输通道、短地址和PAD ID
  发送过程如下:
  1. 创建一个buffer,把payload放入其中,Payload不大于103个字节。
  2. 调用basicRfSendPacket函数发送,并查看其返回值。在basic_rf.c中可以找到:

uint8 basicRfSendPacket ( uint16 destAddr, uint8 *pPayload, uint8 length )

参数destAddr是目的短地址,pPayload是指向发送缓冲区的指针,length是发送数据长度。函数功能是给目的短地址发送指定长度的数据,发送成功刚返回SUCCESS,失败则返回FAILED
  接收过程如下:
  1. 上层通过basicRfPacketIsReady函数来检查是否收到一个新数据包。在basic_rf.c中可以找到:

uint8 basicRfPacketIsReady ( void );

函数功能是检查模块是否已经可以接收下一个数据,如果准备好了,则返回TRUE
  2. 调用basicRfReceive函数,把收到的数据复制到buffer中。代码可以在basic_rf.c中找到:

uint8 basicRfReceive ( uint8 *pRxData, uint8 len, int16 *pRssi );

函数功能是接收来自Basic RF层的数据包,并为所接收的数据和RSSI值配缓冲区。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140065.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android之IntentFilter的用法_Intent.ACTION_TIME_TICK在manifest.xml不起作用

    在模仿一个天气预报的widget时候,用到了IntentFilter,感觉在manifest.xml注册的receiver跟用代码写registerReceiver()的效果应该是相同的,于是想证明一下,就写了如下一段程序:MainActivity:public class MainActivity extends Activity { public static final i

    2022年3月10日
    47
  • Java内存映射原理与实现

    Java内存映射原理与实现Java虚拟机规范中定义了Java内存模型(JavaMemoryModel,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。

    2022年6月21日
    33
  • WinExec、ShellExecute用法详解「建议收藏」

    WinExec、ShellExecute用法详解「建议收藏」1、WinExec():  WinExec主要运行EXE文件,不能运行其他类型的文件,不用引用特别单元。原型是:UINTWinExec(exePath,ShowCmd)  参数说明:  –xePath:命令行参数。注意,要用pChar转化一下。  –ShowCmd:外部程序的运行方式。其取值如下:  —-SW_HIDE隐藏  —-SW_MAXI…

    2022年7月11日
    20
  • datagrip 2021 激活码【2021最新】

    (datagrip 2021 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~ML…

    2022年3月21日
    46
  • portraiture 3 for mac(PS人像磨皮滤镜插件)激活成功教程教程

    portraiture 3 for mac(PS人像磨皮滤镜插件)激活成功教程教程Portraiture3forMac是PS中优秀的人像磨皮滤镜插件,portraiture3mac激活成功教程版可以对皮肤、头发、眉毛、睫毛等部位进行磨皮润色处理,还能自由调整锐度、柔软度、亮度、对比度等,这里为大家带来portraiture滤镜的激活成功教程教程,赶紧来看看吧!portraiture激活成功教程步骤下载好Portraiture安装包后,点击打开Portraiture.dmg,双击【…

    2022年7月22日
    15
  • [渝粤教育] 西安工业大学 汉语文字学 参考 资料[通俗易懂]

    教育-汉语文字学-章节资料考试资料-西安工业大学【】请简要说明黄帝时期与半坡遗址之间的关系。第一章汉字的起源章测试题1、【多选题】请选从下列选项中找出“八卦”的用途()A、卜筮B、族徽C、计数D、装饰参考资料【】2、【多选题】请找出《周礼》中有关史官系统的名称()A、大史B、小史C、内史D、外史参考资料【】3、【多选题】请从下面选项中选出黄帝时期的特点。()A、战争B、纺织C、宫室D、穴居参考资料【】4、【判断题】文

    2022年4月7日
    116

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号