ZIGBEE学习笔记综述.docx
《ZIGBEE学习笔记综述.docx》由会员分享,可在线阅读,更多相关《ZIGBEE学习笔记综述.docx(45页珍藏版)》请在冰点文库上搜索。
ZIGBEE学习笔记综述
1、ZigBee协议栈:
ZigBee协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。
协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来遵循和使用这个协议的,进而实现无线数据收发。
2、ZigBee无线网络协议层的架构:
ZigBee协议分为两部分---IEEE802.15.4和ZigBee,IEEE802.15.4定义了PHY(物理层)和MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。
ZigBee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供API(应用层),用户可以直接调用---学习Zigbee就是熟悉API和学习如何使用对应函数。
3、用户实现简单的无线数据通信的一般步骤:
---组网:
调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入。
---发送:
发送节点调用协议栈的无线数据发送函数,实现无线数据发送。
---接收:
接收节点调用协议栈的无线数据接收函数,实现无线数据接收。
4、Z-STACK协议栈工作原理:
Z-stack可以看做是一个小型的操作系统(本质是大型的程序),用于实现底层和网络层的内容,Z-stack将复杂部分屏蔽掉。
用户通过API函数就可以轻易用ZigBee。
5、协调器、路由器、终端:
Router----路由器
Coodinator----协调器
EndDevice----终端设备
(1)协调器:
(coordinator)
每个zigbee网络只允许有一个zigbee的协调器,协调器首先选择一个信道和网络标识(PANID),然后开始这个网络.因为协调器是整个网络的开始,他具有网络的最高权限,是整个网络的维护者,还可以保持间接寻址用的表格绑定,同时还可以设计安全中心和执行其他动作,保持网络其他设备的通信。
(2)路由器:
(router)
路由器是一种支持关联的设备,能够实现其他节点的消息转发功能。
Zigbee的树形网络可以有多个zigbee路由器设备,zigbee的星型网络不支持zigbee的路由器设备。
(3)终端:
(end)
Zigbee终端节点是具体执行的数据采集传输的设备,他不能转发其他节点的消息。
设备类型的决定通常在编译时间通过编译选项(ZDO_COORDINATOR和RTR_NWK)来确定的.所有的实例应用被提供用分开的项目文件去编译每一个设备类型.尽可能的建立一个映像既有Coordinator又有Router功能.在运行时选择设备类型.看SOFT_START编译选项。
6、Z-Stack软件架构分析:
Z-Stack项目中大约有14个目录文件,目录文件下面又有很多的子目录和文件。
这14个根目录的作用如下:
(1)App:
应用层目录,此目录下的文件是创建新项目时自己添加的文件,
(2)HAL:
硬件层目录,Common目录下的文件是公用文件,基本上与硬件无关,其中hal_assert.c是断言文件,用于调用,hal_drivers.c是驱动文件,抽象出与硬件无关的驱动函数,包含有与硬件相关的配置和驱动及操作函数。
Include目录下主要包含各个硬件模块的头文件,而Target目录下的文件是跟硬件平台相关的,可能看到有两个平台,分别是Cc2530DB平台和一个CC2530EB平台。
后面的DB和EB表示的是TI公司开发板的型号,其实还有一种类型是BB的,BB:
BatteryBoard;DB:
DevelopmentBoard;EB:
EvaluationBoard,分别对应TI公司开发的三种板型,其功能按上顺序依次变强。
可以参看"Z-StackUser'sGuideforCC2530"的图片,可以获得更直观的认识。
(3)MAC:
MAC层目录,High Level和Low Level两个目录表示MAC层分为了高层和底层两层,Include目录下则包含了MAC层的参数配置文件及基MAC的LIB库函数接口文件,这里的MAC层的协议是不开源的,以库的形式给出
(4)MT:
监制调试层目录,该目录下的文件主要用于调试目的,即实现通过串口调试各层,与各层进行直接交互。
(5)NWK:
网络层目录,含有网络层配置参数文件及网络层库的函数接口文件,及APS层库的函数接口
(6)OSAL:
协议栈的操作系统抽象层目录。
(7)Profile:
AF层目录,ApplicationFarmework应用框架,包含AF层处理函数接口文件。
(8)Security:
安全层目录,包含安全层处理函数接口文件
(9)Services:
ZigBee和802.15.4设备地址处理函数目录,包括地址模式的定义及地址处理函数
(10)Tools:
工作配置目录,包括空间划分及Z-Stack相关配置信息
(11)ZDO:
指ZigBee设备对象,可认为是一种公共的功能集,文件用户用自定义的对象调用APS子层的服务和NWK层的服务
(12)ZMAC:
其中Zmac.c是Z-StackMAC导出层接口文件,zmac_cb.c是ZMAC需要调用的网络层函数
(13)Zmain:
Zmain.c主要包含了整个项目的入口函数main(),在OnBoard.c包含硬件开始平台类外设进行控制的接口函数
(14)Output:
输出文件目录,这个是EW8051IDE自动生成的
7、Z-Stack主函数Zmain.c:
Z-Stack的main函数在Zmain.c中,main函数主要做了做了两件工作,一个是系统初始化,即有启动代码来初始化硬件系统和软件架构需要的各个模块,另一个作用是执行操作系统实体。
(1)系统初始化:
系统启动代码需要完成初始化硬件平台和软件架构所需要的各个模块,为操作系统的运行做好准备工作,主要分为初始化系统时钟,检测芯片工作电压、初始化堆栈、初始化各个硬件模块、初始化FLASH存储、形成芯片MAC地址、初始化非易失量、初始化MAC层协议、初始化化应用帧层协议、初始化操作系统等十余部分,其具体流程图和对应的函数如下:
图1系统初始化流程图
(2)操作系统的执行:
启动代码为操作系统的执行做好准备工作后,就开始执行操作系统入口程序,并由此彻底将控制权移交给操作系统。
操作系统实体只有一行代码:
Osal_start_system();//NoReturnfromhere
注释的意思是本函数不会返回,也就是说它是一个死循环,永远不可能执行完。
这个函数就是osal系统轮转查询操作的主体部分,它所做的工作就是不断的查询每个任务中是否有事件发生,如果有事件发生,就调用相应的事件处理函数,如果没有任何事件发生就一直查询。
如果不算调试任务,操作系统一共要处理6项任务,其优先级由高到低分别为MAC层网络层硬件抽象层应用层ZigBee设备应用层用户处理的应用层。
MAC层任务具有最高优先级,用户层具有最低的优先级。
Z-Stack已经编写了对从MAC层到ZigBee设备应用层这五层任务的事件处理函数,一般情况下不需要修改这些函数,只需要按照自己的需求编写用户应用层的任务及事件处理函数就可以。
一般情况下用户只需要额外添加三个文件就可以完成一个项目。
一个是主文件,存放具体的任务事件处理函数;一个是这个主文件的头文件;另外一个是以Osal开头的操作系统接口文件,是专门存放任务处理函数数组tasksArr[]的文件。
这样就实现了Z-Stack代码的公用,用户只需要添加这几个文件,编写自己的任务处理函数就可以了。
操作系统抽象层和实时操作系统中的μC/OS-II有相似之处。
但是,Z-Stack只是基于这个OSAL(操作系统抽象层)运行,ZigBee协议的核心是ZigBee设备之间的通信的实现,以及组网(组成不同的网络结构),所以远比我们添加几个文件来的复杂。
8、OSAL多任务资源分配机制:
Z-Stack与ZigBee之间并不能完全划等号。
Z-Stack是ZigBee的具体实现,所以存在于Z-Stack中的OSAL并不一定出现在ZigBee中。
但是,我们可以在ZigBee中找到些许OSAL的踪影。
在ZigBee协议中,协议本身已经定义了大部分内容。
在基于ZigBee协议的应用开发中,用户只需要实现应用程序框架即可。
从上图可以看出应用程序框架中包含了最多240个应用程序对象。
如果我们把一个应用程序对象看做为一个任务的话,那么应用程序框架将包含一个支持多任务的资源分配机制。
于是OSAL便有了存在的必要性,它正是Z-Stack为了实现这样一个机制而存在的。
OSAL就是以实现多任务为核心的系统资源管理机制。
所以OSAL与标准的操作系统还是有很大的区别的。
简单而言,OSAL实现了类似操作系统的某些功能,但并不能称之为真正意义上的操作系统。
(1)OSAL任务运行方式:
Z-Stack应用程序的运行机制如下图所示:
当有一个事件发生的时候,OSAL负责将此事件分配给能够处理此事件的任务,然后此任务判断事件的类型,调用相应的事件处理程序进行处理。
ZigBee协议的结构图
(2)OSAL的事件传递机制:
OSAL_GenericApp.c文件中有一个很重要的数组tasksArr和一个同样很重要的函数osalInitTasks。
TaskArr数组里存放了所有任务的事件处理函数的地址,在这里事件处理函数就代表了任务本身,也就是说事件处理函数标识了与其对应的任务。
osalInitTasks是OSAL的任务初始化函数,所有任务的初始化工作都在这里面完成,并且自动给每个任务分配一个ID。
添加新任务,我们需要编写新任务的事件处理函数和初始化函数,然后将事件处理函数的地址加入此数组。
然后在osalInitTasks中调用此任务的初始化函数。
在此例中,我们此前提到过的GenericApp_ProcessEvent这个函数被添加到了数组的末尾,GenericApp_Init这个函数在osalInitTasks中被调用。
值得注意的是,TaskArr数组里各任务函数的排列顺序要与osalInitTasks函数中调用各任务初始化函数的顺序必须一致,只有这样才能够保证每个任务能够通过初始化函数接收到正确的任务ID。
另外,为了保存任务初始化函数所接收的任务ID,我们需要给每一个任务定义一个全局变量来保存这个ID。
在GenericApp.c中定义了一个全局变量GenericApp_TaskID;并且在GenericApp_Init函数中进行了赋值。
----------------------------------------------------------------------------------------------------------------------
CC2530
1、CC2530简介:
模块大致可以分为三种类型:
CPU和内存相关的模块;外设、时钟和电源管理相关的模块;无线电相关的模块。
(1)CPU和内存相关的模块:
CC253x设备系列使用的8051CPU内核是一个单周期的8051兼容内核。
它有三个不同的存储器访问总线(SFR、DATA和CODE/XDATA),以单周期访问SFR、DATA和主SRAM。
它还包括一个调试接口和一个18输入的扩展中断单元。
CC253x的中断控制器提供了18个中断源,分为六个中断组,每组与四个中断优先级相关。
当设备从空闲模式回到活动模式,也会发出一个中断服务请求。
一些中断还可以从睡眠模式唤醒设备(供电模式1-3)。
内存仲裁器位于系统中心,因为它通过SFR总线,把CPU和DMA控制器和物理存储器和所有外设连接在一起。
SRAM(8-KB)映射到DATA存储空间和XDATA存储空间的一部分。
8-KBSRAM是一个超低功耗的SRAM,当数字部分掉电时(供电模式2和3)能够保留自己的内容—非易失。
闪存块(32/64/128/256KB)为设备提供了内电路可编程的非易失性程序存储器,映射到CODE和XDATA存储空间。
除了保存程序代码和常量,非易失性程序存储器允许应用程序保存必须保留的数据---当作数据存储器,这样在设备重新启动之后可以使用这些数据。
(2)时钟和电源管理:
数字内核和外设由一个1.8V低差稳压器供电。
CC253x包括一个电源管理功能,可以使用不同供电模式实现电池长寿命的低功耗运行。
有五种不同的复位源来复位设备。
(3)外设:
---调试接口:
执行一个专有的两线串行接口,用于内电路调试。
---I/O控制器负责所有通用I/O引脚。
---系统可以使用一个多功能的五通道DMA控制器,使用XDATA存储空间访问存储器,因此能够访问所有物理存储器。
---定时器1是一个16位定时器,具有定时器/计数器/PWM功能。
---定时器2(MAC定时器)是专门为IEEE802.15.4MAC或软件中其他时槽的协议设计。
---定时器3和定时器4是8位定时器,具有定时器/计数器/PWM功能。
---一个内置的看门狗定时器允许设备在固件挂起的情况下复位自身。
---睡眠定时器是一个超低功耗的定时器,计算32-kHz晶振或32-kHzRC振荡器的周期。
---ADC支持7到12位的分辨率,分别在30kHz或4kHz的带宽。
---随机数发生器使用一个16位LFSR来产生伪随机数,这可以被CPU读取或由选通命令处理器直接使用。
---AES协处理器允许用户使用带有128位密钥的AES算法加密和解密数据。
---USART0和USART1每个被配置为一个SPI主/从或一个UART。
---USB2.0全速控制器(仅CC2531可用)有5个端点,1KBFIFORAM的双缓冲。
(4)无线电相关的模块:
CC253x设备系列提供了一个IEEE802.15.4兼容无线收发器。
RF内核控制模拟无线模块。
另外,它提供了MCU和无线设备之间的一个接口,这使得可以发出命令、读取状态、自动操作和确定无线设备事件的顺序。
无线设备还包括一个数据包过滤和地址识别模块。
2、调试接口:
两线调试接口允许对片上闪存进行编程,可以访问存储器和寄存器内容,以及调试功能,比如断点、单步和寄存器修改。
调试接口使用I/O引脚P2.1和P2.2分别作为调试模式中的调试数据和调试时钟。
当设备不在调试模式下,这些I/O引脚只能用于通用I/O。
因此调试接口不干预任何外设I/O引脚。
Debug调试接口上有SPI总线,但是平时进行调试时不会用到SPI总线,SPI总线可以作为分析仪的时候使用。
3、振荡器和时钟:
(1)设备有两个高频振荡器:
•32MHz晶振(用于RF收发器—精确度高)
•16MHzRC振荡器(RC振荡器精确度低,但功耗低)
32MHz晶振启动时间对一些应用程序来说可能比较长,因此设备可以运行在16MHzRC振荡器,直到晶振稳定。
16MHzRC振荡器功耗少于晶振,但是由于不像晶振那么精确,不能用于RF收发器操作。
主系统时钟源可以是32MHzXOSC或16MHzRCOSC。
(2)设备的两个低频振荡器:
•32kHz晶振
•32kHzRC振荡器
32kHz用于运行在32.768kHz,为系统需要的时间精度提供一个稳定的时钟信号。
默认复位后32kHzRCOSC使能,被选为32kHz时钟源。
RCOSC功耗较少,但是不如32kHzXOSC精确。
所选的32kHz时钟源驱动睡眠定时器,为看门狗定时器产生标记,当计算睡眠定时器睡眠时间的时候用作定时器2的一个选通命令。
4、复位:
(1)CC2430有五个复位源。
以下事件产生复位:
强制RESET_N输入引脚为低
上电复位条件
布朗输出复位条件
看门狗定时器复位条件
时钟丢失复位条件
(2)复位之后初始条件如下:
I/O引脚配置为带上拉的输入(P1.0和P1.1是输入,但是没有上拉/下拉)
CPU程序计数器装在0x0000,程序执行从这个地址开始
所有外设寄存器初始化为各自复位值(参见寄存器描述)
看门狗定时器禁用
时钟丢失探测器禁用
(3)布朗输出探测器(BOD)只能运行在规定的1.8V数字电压。
BOD在电压变化期间保护存储器内容,这会导致规定的1.8V电压下降,降低到数字逻辑、闪存存储器和SRAM所需的最低电平。
当使用最初电源,POR和BOD将保持设备在复位状态,直到电压源上升超过上电复位和布朗输出探测电压。
时钟丢失探测器可以用于安全关键的系统来检测XOSC时钟源(32MHzXOSC或32kHzXOSC)之一的停止。
5、I/O口:
(1)未使用的I/O:
未使用的I/O引脚电平是确定的,不能悬空。
一个方法是使引脚不连接,配置引脚为具有上拉电阻的通用I/O输入。
这也是所有引脚复位后的状态(除了P1.0和P1.1没有上拉/下拉功能)。
或者引脚可以配置为通用I/O输出。
这两种情况下引脚都不能直接连接到VDD或GND,以避免过多的功耗。
(2)通用I/O:
CC2530具有3个8位端口,端口0、端口1和端口2,表示为P0、P1和P2。
其中,P0和P1是完全的8位端口,而P2仅有5位可用。
所有的端口均可以通过SFR寄存器P0、P1和P2位寻址和字节寻址。
每个端口引脚都可以单独设置为通用I/O或外部设备I/O。
除了两个高驱动输出口P1.0和P1.1各具备20mA的输出驱动能力之外,其他的输出均具备4mA的驱动能力。
寄存器PxSEL(x为端口的标号0~2)用来设置端口的每个引脚为通用I/O或者是外部设备I/O信号。
复位之后,所有的数字输入/输出引脚都设置为通用输入引脚。
寄存器PxDIR用来设置每个端口引脚为输入或输出。
设置PxDIR中的指定位为1,其对应的引脚口就被设置为输出了。
通用I/O端口引脚用作输入时可以设置为上拉、下拉或三态操作模式。
复位之后,所
有的端口均设置为带上拉的输入。
要取消输入的上拉或下拉功能,就要将PxINP中的对应位设置为1。
I/O端口引脚P1.0和P1.1没有上拉/下拉功能。
配置为外设I/O的引脚没有上拉/下拉功能,即使外设功能是一个输入。
(3)通用I/O中断:
通用I/O引脚设置为输入后,可以用于产生中断。
中断可以设置在外部信号的上升或下降沿触发。
P0、P1或P2端口都有中断使能位,中断寄存器如下:
IEN1.P0IE:
P0中断使能---端口中断使能
IEN2.P1IE:
P1中断使能---端口中断使能
IEN2.P2IE:
P2中断使能---端口中断使能
P0IEN:
P0中断使能---端口位中断使能
P1IEN:
P1中断使能---端口位中断使能
P2IEN:
P2中断使能---端口位中断使能
PICTL:
P0、P1和P2触发沿设置
P0IFG:
P0中断标志
P1IFG:
P1中断标志
P2IFG:
P2中断标志
(4)外设I/O引脚映射:
6、ADC:
ADC支持多达14位的模拟数字转换,具有多达12位的ENOB(有效数字位)。
它包括一个模拟多路转换器,具有多达8个各自可配置的通道;以及一个参考电压发生器。
转换结果通过DMA写入存储器。
还具有若干运行模式。
ADC的主要特性如下:
●可选的抽取率,这也设置了分辨率(7到12位)
●8个独立的输入通道,可接受单端或差分信号
●参考电压可选为内部单端、外部单端、外部差分或AVDD5
●产生中断请求
●转换结束时的DMA触发
●温度传感器输入
●电池测量功能
7、定时器:
(1)定时器1是一个独立的16位定时器,支持典型的定时/计数功能,比如输入捕获,输出比较和PWM功能。
定时器有五个独立的捕获/比较通道。
每个通道定时器使用一个I/O引脚。
定时器用于范围广泛的控制和测量应用,可用的五个通道的正计数/倒计数模式将允许诸如电机控制应用的实现。
定时器1的功能如下:
•五个捕获/比较通道
•上升沿、下降沿或任何边沿的输入捕获
•设置、清除或切换输出比较
•自由运行、模或正计数/倒计数操作
•可被1,8,32或128整除的时钟分频器
•在每个捕获/比较和最终计数上生成中断请求
•DMA触发功能
(2)定时器3和4是两个8位的定时器。
每个定时器有两个独立的比较通道,每个通道上使用一个I/O引脚。
定时器3/4的特性如下:
●两个捕获/比较通道
●设置、清除或切换输出比较
●时钟分频器,可以被1,2,4,8,16,32,64,128整除
●在每次捕获/比较和最终计数事件发生时产生中断请求
●DMA触发功能
(3)定时器2主要用于为802.15.4CSMA-CA算法提供定时,以及为802.15.4MAC层提供一般的计时功能。
当定时器2和休眠定时器一起使用时,即使系统进入低功耗模式也会提供定时功能。
定时器运行在CLKCONSTA.CLKSPD指明的速度上。
如果定时器2和睡眠定时器一起使用,时钟速度必须设置为32MHz,且必须使用一个外部32kHzXOSC获得精确结果。
定时器2的主要特性如下:
16位定时器正计数提供的符号/帧周期,例如:
16μs/320μs
可变周期可精确到31.25ns
2×16位定时器比较功能
24位溢出计数
2×24位溢出计数比较功能
帧首定界符捕捉功能
定时器启动/停止同步于外部32kHz时钟以及由睡眼定时器提供定时
比较和溢出产生中断
具有DMA触发功能
通过引入延迟可调整定时器值
(4)睡眠定时器用于设置系统进入和退出低功耗睡眠模式之间的周期。
睡眠定时器还用于当进入低功耗睡眠模式时,维持定时器2的定时。
睡眠定时器的主要功能如下:
●24位的定时器正计数器,运行在32kHz的时钟频率
●24位的比较器,具有中断和DMA触发功能
●24位捕获
(5)看门狗定时器(WDT)是在CPU可能受到软件颠覆的情况下用作恢复的方法。
当软件在选定时间间隔内不能清除WDT时,WDT必须就复位系统。
看门狗可用于受到电气噪音、电源故障、静电放电等影响的应用,或需要高可靠性的环境。
如果一个应用不需要看门狗功能,可以配置看门狗定时器为一个间隔定时器,这样可以用于在选定的时间间隔产生中断。
看门狗定时器的特性如下:
●四个可选的定时器间隔
●看门狗模式
●定时器模式
●在定时器模式下产生中断请求
8、USART:
USART0和USART1是串行通信接口,它们能够分别运行于异步UART模式或者同步SPI模式。
两个USART具有同样的功能,可以设置在单独的I/O引脚。
9、闪存—Flash:
设备包含闪存存储器以存储程序代码。
闪存存储器可以通过用户软件和调试接口进行编程。
闪存控制器处理写入和擦除嵌入式闪存存储器。
嵌入式闪存存储器包括多达128页面,每页有2048个字节(256KB)。
闪存控制器有如下特性:
●32位字可编程
●页面擦除