zigbee协议栈应用(二)基础协议栈入门

zigbee协议栈应用(二)基础协议栈入门zigbee基础理论1.协议栈(1)协议栈定义协议栈是指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程: 由上层协议到底层协议,再由底层协议到上层协议。使用最广泛的是英特网协议栈,由上到下的协议分别是:应用层(HTTP,TELNET,DNS,EMAIL 等), 运输层(TCP,UDP),网络层(IP),链路层(WI-FI,以太网,令牌环,FDDI等),物理层。

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

zigbee基础理论

1.协议栈

(1)协议栈定义

协议栈是指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程: 由上层协议到底层协议,再由底层协议到上层协议。使用最广泛的是英特网协议 栈,由上到下的协议分别是:应用层(HTTP,TELNET,DNS,EMAIL 等), 运输层(TCP,UDP),网络层(IP),链路层(WI-FI,以太网,令牌环,FDDI

等),物理层。

协议栈是协议的具体实现形式,通 俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个 协议的,进而实现无线数据收发。

ZigBee 的

协议分为两部分,IEEE 802.15.4 定义了 PHY(物理层)和 MAC(介质访问层)技术规范;ZigBee

联盟定义了 NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。

物理层(PHY):

物理层定义了物理无线信道和 MAC 子层之间的接口,提供物理层数据服务和 物理层管理服务。

物理层内容:

1)ZigBee 的激活;

2)当前信道的能量检测;

3)接收链路服务质量信息;

4)ZigBee 信道接入方式;

5)信道频率选择;

6)数据传输和接收

介质接入控制子层(MAC)

MAC 层负责处理所有的物理无线信道访问,并产生网络信号、同步信号;支持 PAN 连接和分离,提供两个对等 MAC 实体之间可靠的链路

MAC 层功能:

1)网络协调器产生标;

2)与信标同步;

3)支持 PAN(个域网)链路的建立和断开;

4)为设备的安全性提供支持;

5)信道接入方式采用免冲突载波检测多址接入(CSMA-CA)机制;

6)处理和维护保护时隙(GTS)机制;

7)在两个对等的 MAC 实体之间提供一个可靠的通信链路。

网络层(NWK)

ZigBee 协议栈的核心部分在网络层。网络层主要实现节点加入或离开网络、接 收或抛弃其他节点、路由查找及传送数据等功能。

网络层功能:

1)网络发现;

2)网络形成;

3)允许设备连接;

4)路由器初始化;

5)设备同网络连接;

6)直接将设备同网络连接;

7)断开网络连接;

8)重新复位设备;

9)接收机同步;

10)信息库维护。

应用层(APL)

ZigBee 应用层框架包括应用支持层(APS)、ZigBee 设备对象(ZDO)和制造商所定 义的应用对象。

应用支持层的功能包括:维持绑定表、在绑定的设备之间传送消息。

网络七层协议: 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 

    物理层:以二进制形式在物理媒体上传输数据

    数据链路层:传输有地址的帧,错误检测功能

    网络层:为数据包选择路由

    传输层:提供端对端的接口

    会话层:解除或建立与其他接点的联系

    表示层:数据格式化,代码转换,数据加密

    应用层:文件传输,电子邮件,文件服务,虚拟终端

(2)怎么使用协议栈

协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用,

用户实现一个简单的无线数据通信时的一般步骤

1、组网:调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入。

2、发送:发送节点调用协议栈的无线数据发送函数,实现无线数据发送。

3、接收:接收节点调用协议栈的无线数据接收函数,实现无线数据接收。

协议栈很多都封装好了,下面我们大概看看无线发送函数:
1. afStatus_t AF_DataRequest( afAddrType_t *dstAddr,
2. endPointDesc_t *srcEP,
3. uint16 cID,
4. uint16 len,
5. uint8 *buf,
6. uint8 *transID,
7. uint8 options,
8. uint8 radius ) )
用户调用该函数即可实现数据的无线数据的发送,此函数中有 8 个参数,先理解以下两个参数

4. uint16 len, // 发送数据的长度;
5. uint8 *buf, // 指向存放发送数据的缓冲区的指针。

(3)zigbee 工作流程: 

zigbee协议栈应用(二)基础协议栈入门

 Zstack 中的osal_init_system调用过程:
main()—> osal_init_system()—> osalInitTasks()—> SampleApp_Init()

Zstack 中的osal_init_system调用过程:

main()->osal_start_system()-> osal_run_system()->tasksEvents->osalInitTasks( void )

重要函数

SampleApp_Init()//用户应用任务初始化程序

SampleApp_ProcessEvent() //用户应用任务的事件处理函数

//接收数据,参数为接收到的数据
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

SampleApp_SendPeriodicMessage()//分析发送周期信息 

//发送函数

AF_DataRequest( &SampleApp_Periodic_DstAddr, //发送目的地址+端点地址和传送模式
&SampleApp_epDesc,  //源(答复或确认)终端的描述(比如操作系统中任务 ID 等)源 EP
SAMPLEAPP_PERIODIC_CLUSTERID,  //被 Profile 指定的有效的集群号
2,  // 发送数据长度
SendData,// 发送数据缓冲区
&SampleApp_TransID,  // 任务 ID 号
AF_DISCV_ROUTE,  // 有效位掩码的发送选项
AF_DEFAULT_RADIUS ) //传送跳数,通常设置为 AF_DEFAULT_RADIUS

先来点主线源码:

int main( void )
{

osal_int_disable( INTS_ALL );  //关闭所有中断
HAL_BOARD_INIT();  //初始化系统时钟
zmain_vdd_check();  //检查芯片电压是否正常
InitBoard( OB_COLD );  //初始化  I/O , LED 、 Timer 等
HalDriverInit();  //初始化芯片各硬件模块
osal_nv_init( NULL );  //初始化  Flash 存储器
ZMacInit();  //初始化  MAC 层
zmain_ext_addr();  //确定  IEEE 64 位地址
zgInit();  //初始化非易失变量
#ifndef NONWK
// Since the AF isn’t a task, call it’s initialization routine
afInit();
#endif
osal_init_system(); //初始化操作系统
osal_int_enable( INTS_ALL ); //使能全部中断
InitBoard( OB_READY );  //最终板载初始化
zmain_dev_info();  //显示设备信息
#ifdef LCD_SUPPORTED
zmain_lcd_init();  //初始化 LCD
#endif
#ifdef WDT_IN_PM1
/* If WDT is used, this is a good place to enable it. */
WatchDogEnable( WDTIMX );
#endif
osal_start_system(); // No Return from here 执行操作系统,进去后不会返回
return 0; // Shouldn’t get here.
}

实验步骤
1.选择 CoordinatorEB, 下载到板 A;作为协调器
2.选择 EndDeviceEB, 下载到板 B;作为终端设备
3.给两块开发板上电,通过观察 D3 来判断组网是否成功,协调器 D3熄灭说明组网成功,当
终 端 D3熄灭时说明连网成功,请观察 Led1 灯的变化

(4)TI协议栈说明

有四种

1、Zstack 是针对Zigbee pro协议的 正确
2、RemoTI是针对Zigbee RF4CE协议的 正确
3、Simpliciti 简单的使用TI的zigbee芯片进行无限数据收发,只是使用mac层收发数据而已,自定义非标准
4、RF4CE不属于zigbee 标准,无法兼容通信,是新一代家电遥控解标准和协
如果要组网,扩展能力强就用zstack
家电遥控类的就用rf4ce
最简单的几个点通信,代码量最少可以使用Simpliciti即可,非常简单

2.设备

在 ZigBee 网络中存在三种逻辑设备类型:Coordinator(协调器),Router(路 由 器)和 End-Device(终端设备)。ZigBee 网络由一个 Coordinator 以及多个 Router 和多个 End_Device 组成。

ZigBee 设备有两种类型的地址。一种是 64 位 IEEE 地址,即 MAC 地址,另一

种是 16 位网络地址。

64 位地址使全球唯一的地址,设备将在它的生命周期中一直拥有它。它通常由

制造商或者被安装时设臵。这些地址由 IEEE 来维护和分配。

16 位网络地址是当设备加入网络后分配的。它在网络中是唯一的,用来在网络

中鉴别设备和发送数据。其中,协调器的网络地址为 0x00



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

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

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


相关推荐

  • 详解贝叶斯学派与频率学派的区别和联系

    详解贝叶斯学派与频率学派的区别和联系大家好,我是东哥。要说贝叶斯和频率学派,那简直太有意思了。为什么这么说呢?因为两个学派的理解对于我来说真的是一场持久战。我是在学习机器学习的时候接触到的这两个学派,此前并不知道,当时就被深深吸引了,于是找了各种资料学习下来,说实话感觉有点懂了,但又感觉没理解透。后面我一直是带着这种似懂非懂的状态继续肝机器学习。但随着不断深入学习我发现很多理论其实都有出现两个学派的身影,而且在模型算法层面结合两派不断琢磨对我的理解有了很大帮助,经常有茅塞顿开的感觉(那段日子真的进步的飞起)。虽说我有点笨,但好在经过时间

    2022年6月2日
    78
  • jvm垃圾回收详解_java 垃圾回收器

    jvm垃圾回收详解_java 垃圾回收器JVM垃圾回收1.概述JVM会自动帮程序员进行垃圾回收,并不需要程序员手动的进行垃圾回收(C++等语言需要自己手动回收垃圾),了解JVM的垃圾回收,可以帮程序员写出占用内存更小、更高效的程序。1.1什么是垃圾?垃圾是指运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。1.2什么区域需要进行垃圾回收JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生、随线程而灭,因此这几个区域的内存分配和回

    2022年9月12日
    0
  • Using MSAgent to Scan the Start Menu 选择自 wm_ni 的 Blog

    Using MSAgent to Scan the Start Menu 选择自 wm_ni 的 BlogNotethiscodewillignoreduplicateshortcuts.ForexampleIhave4or5shortcutsinmyStartMenuthatarenamed”Readme.txt.”Onlythefirstinstanceofthesewillgetaddedtothecommandsallot

    2022年6月21日
    20
  • java实现最简单的web聊天室程序源代码,适合初学者

    java实现最简单的web聊天室程序源代码,适合初学者java实现最简单的web聊天室程序源代码,适合初学者源代码下载地址:http://www.zuidaima.com/share/1795674187762688.htm

    2022年6月22日
    24
  • 中标麒麟操作系统安装教程_中标麒麟内核是centos

    中标麒麟操作系统安装教程_中标麒麟内核是centos为什么80%的码农都做不了架构师?>>>…

    2022年8月30日
    0
  • modis数据简介及批处理工具[通俗易懂]

    modis数据简介及批处理工具[通俗易懂]MODIS数据:MODIS是传感器而不是卫星(Landsat是卫星)MODIS传感器的全称为中分辨率成像光谱仪(moderate-resolutionimagingspectroradiometer),主要搭载在Terra和Aqua星上。MODIS命名规则:MOD09GA是产品名称,表示500米地表反射率产品。A2018179表示产品时间2018年第179天(以每年1…

    2022年5月30日
    39

发表回复

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

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