ZigBee协议栈简介
文章目录
- Zigbee协议栈简介
- 如何理解Zigbee协议栈
- 如何使用Zigbee协议栈
Zigbee协议栈简介
Zigbee
协议分为2
部分:
IEEE 802.15.4
定义了PHY
(物理层)和MAC
(介质访问层)技术规范。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协议栈
以简单的无线数据通信为例,其一般步骤为:
- 组网:调用协议栈组网函数、加入网络函数,实现网络的建立和节点的加入。
- 发送:发送节点调用协议栈的发送函数,实现数据无线发送。
- 接收:接收节点调用协议栈的无线接收函数,实现无线数据接收。
由于协议栈都把这些函数都封装好了,因此我们用起来比较方便。大家可以了解一下下面的关键字:
CCM
:Counter with CBC-MAC
(Mode of Operation
)HAL
:Hardware Abstraction Layer
(硬件抽象层)PAN
:Personal Area Network
(个人局域网)RF
:Radio Frequency
(射频)RSSI
:Received Signal Strength Indicator
(接收信号强度指示)
CC2530 BasicRF
文件夹结构如下图:
docs
文件夹:打开文件夹,里面仅有一个名为CC2530_Software_Examples
的PDF
文档,文档的主要内容是介绍Basic RF
的特点、结构及使用。从中我们可以知道,里面Basic RF
包含三个实验例程:无线点灯、传输质量检测、谱分析应用。Ide
文件夹:打开文件夹后会有三个文件夹,以及一个cc2530_sw_examples.eww
工程,这个工程是上面提及的三个实验例程工程的集合。在IAR
环境中打开该工程,在workspace
看到如下文件夹:Ide\Settings
文件夹是在每个基础实验的文件夹里都会有的,它用于保存读者自己的IAR环境设置;Ide\srf05_CC2530
文件夹里面放有三个工程,即light_switch.eww
、per_test.eww
和spectrum_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
:它提供了一种接口来访问TIMER
、GPIO
、UART
、ADC
等,这些接口都通过相应的函数进行实现。Basic RF layer
:为双向无线传输提供一种简单的协议。Application layer
:它是用户应用层,相当于用户使用Basic RF
层和HAL
的接口。我们通过在Application layer
就可以使用到封装好的Basic RF
和HAL
的函数。
Basic RF
由TI
公司提供,它包含了IEEE 802.15.4
标准的数据包的收发功能,但并没有使用到协议栈,仅仅让两个结点进行简单的通信。也就是说,Basic RF
仅仅是包含IEEE 802.15.4
标准的一小部分。其主要特点有:
- 不会自动加入协议,也不会自动扫描其他节点也没有组网指示灯(
LED3
)。 - 没有协议栈里面所说的协调器、路由器或者终端的区分,节点的地位都是相等的。
- 没有自动重发的功能。
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
值配缓冲区。
ZigBee协议栈简介相关推荐
- ZigBee协议栈简介和流程
ZigBee协议栈实际上就是ZigBee协议的API接口 一般步骤为: 1.组网:调用协议栈的组网函数.加入网络函数,实现网络的建立与节点的加入 2.发送:发送节点调用协议栈的无线数据发送函数,实现无 ...
- ZIGBEE通讯-7.ZigBee协议栈简介
想要学习协议栈,必须先知道协议是什么.协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发,而协议栈是协议的具体实现形式,通俗的理解为用代码实现的函数库,以便于开发人员调用. ...
- ZigBee技术简介,以及ZigBee的未来展望
ZigBee技术简介,以及ZigBee的未来展望 本文从ZigBee的发展历史入手,探讨了这种基于无线传感器技术的网络应用的协议栈.性能分析和各种应用领域,全面构建了完整的ZigBee技术应用与发展蓝 ...
- zigbee协议栈之中终端绑定
1193628586 个人中心 好友 消息 退出 聪明女人必撒的九个谎 发博文 博文 痴白孺子牛 http://blog.sina.com.cn/u/1326039221 [订阅] [手机订阅] 首页 ...
- ZigBee协议简介(一)
ZigBee协议简介(一) 注意:在没有确切把握的情况下,不要试图去改变这些网络参数 这是一篇在听课中写的博客,较为凌乱 文章目录 ZigBee协议简介(一) 物理层(PHY) 规定了什么 能用来干嘛 ...
- ZigBee_协议栈简介
非开源协议栈: 1.freescale 解决方案 协议栈种类: 1.1 802.15.4标准mac 1.2 SMAC 1.3 SynkroRF 1.4 ZigBee RF4CE 1.5 ZigBee ...
- zigbee协议栈学习(二)
协议栈规范的 ID号可以通过查询设备发送的 beacon 帧获得.在设备加入网络之前,首先 需要确认协议栈规范的 ID."特定网络"规范 ID号为0: ZigBee协议栈规范的 I ...
- 【RL-TCPnet网络教程】第4章 RL-TCPnet网络协议栈简介
第4章 RL-TCPnet网络协议栈简介 本章节介绍RL-TCPnet网络协议栈,让大家对 RL-TCPnet有一个整体的了解,RL-TCPnet是一款小型网络协议栈,适用于 ARM 内 ...
- ZigBee协议栈浅显解读(一)
目前ZigBee开发主要用的是TI的CC2530.CC2530内部集成看增强型的51所以对于只学过51的小白入门不成问题. 本篇文章我只会介绍ZigBee的协议栈. 我们打开ZigBee协议栈后可以加 ...
- Zigbee协议栈ZStack构架
协议栈版本信息: ZigBee2006\ZStack-1.4.3-1.2.1 1.ZStack协议栈构架 Zigbee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供一些 ...
最新文章
- python-sendcmd主动模式访问ftp——修改port中IP地址信息
- Ispur服务器收集系统日志,centos 7.2往rsyslog服务器端发送系统日志
- ABB机器人套接口通信 机器人部分
- UDP(发短信:简单模拟)
- Java集合类及常用数据结构
- 【ES9(2018)】for await...of
- mysql如何实现逻辑自增_每日一面 - mysql 的自增 id 的实现逻辑是什么样子的?
- android 3.10. 内核,编译android 3.10内核源码时出错
- 计算机属性设备管理器无图标,设备管理器图标的修改方法
- 14.Veeam BR14 配置信息备份与恢复
- IDEA如何快速切换项目(快捷键切换)
- -bash: /usr/local/miniconda2/bin/conda: /home/hadoop/miniconda2/bin/python: bad interpreter: No such
- 4、Mac下的谷歌浏览器输入不安全网址点高级后没有继续前往链接解决办法
- linux复制文件跳过相同,Linux中拷贝目录跳过指定文件的方法
- Latex中表格过长如何实现跨页表格——跨页表格宏包longtable的使用?
- 门多萨与马尔克斯谈话录
- 马哥N46班第一次月考
- 让机器人飞入寻常百姓家,优必选这三步棋很关键
- 三极管的基础知识(上)
- oracle 查询两张表合并,oracle的多表合并查询-工作心得
热门文章
- 25款实用的桌面版博客编辑器
- 个人介绍网页代码 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计
- 虽迟但到,手眼标定代码实现篇
- MTK 6735/6739/6755/6763 android8.1 user版本打开root权限(adb root权限和 apk root权限)
- DB2错误码sqlcode对应表
- 常用 ASCII 码整理
- Linux的打开文件表:打开文件表、文件描述符、打开的文件句柄以及i-node之间的关系
- 房地产大数据管理系统——房地产大数据融合平台
- 【理论】浅解硬件网络通信+交换机芯片+通信系统设计
- java从数据库映射实体类的代码