zigbee通讯技术复习笔记
这门课对于我一个学嵌入式的来说,还是比较重要的,所以我还是以老师给出的大纲为主体,好好复习一下!
题型:选择题24x1.5 判断10x1 填空15x1 简答4x5 程序1x5 另外一个设计题1x14
每个标题前半部分是老师的提纲知识点,补充下面是我看到的可能比较重要的或者可以了解的。
WPAN及ZigBee基础
- Zigbee、蓝牙、IEEE802.11b(WiFi)标准都是工作在2.4G频段的无线通信标准;Zigbee主要用在短距离无线控制系统,传输少量的控制信息;(P2)
- 短距离无线网络主要分为:无线局域网(WLANs)和无线个域网(WPANs)(P3)
- 无线个域网所对应的通信协议:(P3)
HR-WPANS:802.15.3
MR-WPANS:蓝牙
LR-WPANS(低速率无线个域网):802.15.4 - Zigbee最大传输速率:250kbps。 ZigBee可工作在2.4GHz(全球流行)、868MHz(欧洲流行) 和915 MHz(美国流行)3个频段上,分别具有最高250kbit/s、20kbit/s和40kbit/s的传输速率,它的传输距离在10-75m的范围内, 但可以继续增加 。
- Zigbee无线网络分层: 物理层(PHY) 介质访问控制(MAC)网络层(NWK)应用程序支持子层(APS) 应用层(APL)(P4)
其中802.15.4 定义了物理层和介质访问控制层;Zigbee协议定义了网络层、应用程序支持子层和应用层(具体介绍见下面的补充) - Zigbee特点:(自组网)(P5)
高可靠性:采取了碰撞避免策略;MAC层采用了完全确认的数据传输模式;
低成本、低功耗 :ZigBee模块的复杂度不高,ZigBee协议免专利费,再加之使用的频段无需付费,所以它的成本较低;ZigBee的传输速率低,发射功率仅为1mW,而且采用了休眠模式,功耗低
高安全 :采用高级加密标准(AES 128) 的对称密码;
低数据速率 - Zigbee设备类型:(P5)
协调器(ZC Coordinator):主要负责无线网络的建立与维护;(每个ZigBee网络必须有一个)
路由器(ZR Router):主要负责无线网络的路由;( (1)允许其他网络设备加入 (2)多跳路由 (3)协助电池供电的子节点通信(4)自己作为终端节点应用)
终端节点(ZED End-device):主要负责无线网络数据的采集。(1)向路由节点传递数(2)没有路由功能(3)低功耗(Zigbee的低功耗主要体现在这里)(4)可选择睡眠与唤醒。(路由因不断转发数据需电源供电,终端节点电池供电)) - Zigbee工作在ISM(工业、科学和医疗)频带,共规定了27个信道:(P7)
2.4GHz频段 共16个信道,通信速率为250kbps
915MHz频段 共10个信道,通信速率为40kbps
896MHz频段 共1个信道,通信速率为20kbps - Zigbee网络拓扑结构:星型;网络型;簇状;(P8)
- Zigbee应用为:周期性 ;反复; 间断数据采集应用;
- Zigbee模块开发一般包括两个文件:.h头文件和.c文件(P)
.h文件可理解为一份接口描述文件;
.c文件主要功能是对.h文件中声明的外部函数进行具体实现。
补充:
- Zigbee网络中传输的三类数据:
周期性数据:如家庭中水、电、气三表数据的传输;
间断性数据:如电灯、家用电器的控制等数据的传输;
反复性的低反应时间的数据:如鼠标、操作杆传输的数据。 - ZigBee设备分类
全功能设备(FFD):可以担任网络协调者,形成网络,让其它的FFD或是精简功能装置(RFD)连结,FFD具备控制器的功能,可提供信息双向传输。
~附带由标准指定的全部 802.15.4 功能和所有特征
~更多的存储器、计算能力可使其在空闲时起网络路由器作用。
~也能用作终端设备
精简功能设备(RFD):RFD只能传送信息给FFD或从FFD接收信息。
~附带有限的功能来控制成本和复杂性
~在网络中通常用作终端设备。
~ZigBee相对简单的实现自然节省了费用。RFD由于省掉了内存和其他电路,降低了ZigBee部件的成本,而简单的8位处理器和小协议栈也有助于降低成本。
Zigbee设备类型与角色对应关系
3. ZigBee协议架构
物理层功能:PHY层由射频收发器以及底层的控制模块构成;
1. 激活和休眠射频收发器;
2. 信道能量检测(energy detect);
3. 检测接收数据包的链路质量指示(link quality indication , LQI);
4. 空闲信道评估(clear channel assessment, CCA);
5. 收发数据。
数据链路层功能:MAC子层为高层访问物理信道提供点到点通信的服务接口
1. 协调器产生并发送信标帧,普通设备根据协调器的信标帧与协议器同步;
2. 支持PAN网络的关联(association)和取消关联(disassociation)操作;
3. 支持无线信道通信安全;
4. 使用CSMA-CA(载波侦听多路访问/冲突避免)机制访问信道;
5. 支持时槽保障(guaranteed time slot, GTS)机制;
6. 支持不同设备的MAC层间可靠传输。
网络层功能:
1. ZigBee网络层的主要功能就是提供一些必要的函数,确保ZIgBee的MAC层(IEEE 802.15.4-2003)正常工作,并且为应用层提供合适的服务接口。为了向应用层提供其接口,网络层提供了两个必须的功能服务实体,它们分别为数据服务实体和管理服务实体。
2. 网络层数据实体(NLDE)通过网络层数据服务实体服务接入点(NLDE-SAP)提供数据传输服务;
3. 网络层管理实体(NLME)通过网络层管理实体服务接入点(NLME-SAP)提供网络管理服务。网络层管理实体利用网络层数据实体完成一些网络的管理工作,并且,网络层管理实体完成对网络信息库(NIB)的维护和管理。
应用会聚层功能:该层主要负责把不同的应用映射到ZigBee网络上,具体而言包括:
1. 安全与鉴权
2. 多个业务数据流的会聚
3. 设备发现
4. 服务发现
4.TCP/IP结构对应OSI结构:
5. Z-Stack协议栈文件组织结构介绍
CC2530芯片相关
- CC2530单片机是一款完全兼容8051内核,支持802.15.4协议的无线射频单片机(P30)
CC2530的Flash(非易失性存储器)容量可选: 32KB 64KB 128KB 256KB
CC2530有两个晶振: 32MHz 晶振 32.768KHz(无线通信时必须采用外部32M晶振) - I/O口控制
CC2530内部自带温度传感器:
使用步骤:
1、使能温度传感器
2、连接温度传感器到ADC
3、初始化ADC,确定参考电压、分辨率等,启动ADC读取温度数据
补充:
Zigbee地址相关
-
设备地址:(P134)
64位IEEE地址:长地址又称 MAC地址或 扩展地址(全球唯一)
16位网络地址:短地址 又称逻辑地址(协调器地址为0x0000,其他设备入网时由协调器分配)(1)在网络中标识不同设备;(2)在网络数据传输时指定目的地址和源地址; -
网络地址:唯一标示网络中的一个节点(用网络地址来区分不同的节点);(P135)
-
网络地址最多可以分配65536个节点,地址分配取决于整个网络的架构,整个网络的架构由一下3个值决定:1、网络最大深度 2、每个父节点拥有的孩子节点最大数目 3、每个父节点拥有的孩子节点路由器的最大数目
同一父节点相连的终端节点的网络地址是连续的
同一父节点相连的路由器节点的网络地址通常是不连续的 -
端口:每个节点上最多支持240(1-240)个端口,每个节点上的所有端口共用一个发射/接收天线(用端口来区分同一节点的端口);
-
PANID:Zigbee网络号 可手动设置(或自动随机生成),如果指定的PANID被占用则自动加1。
~PANID范围是0X0001----0XFFFF;
~可以通过给不同的网络指定不同的网络ID号来区分网络,避免干扰;
~如果设置为0XFFFF,那么协调器则随机产生一个值作为自己的PANID;非易失性闪存条目ID号(NV操作用到的ID则定义在0x0201~0x0FFF 范围内!)
-
数据发送:调用**AF_DataRequest()**函数通过天线发送数据(P139)
afStatus_t AF_DataRequest( afAddrType_t *dstAddr,
endPointDesc_t *srcEP,
uint16 cID,
uint16 len,
uint8 *buf,
uint8 *transID,
uint8 options,
uint8 radius )
-
数据接收:调用**osal_msg_receive()**函数从消息队列中接收一个消息(包含事件与数据)
uint8 *osal_msg_receive( uint8 task_id ) -
数据存储位置(结构):(P130)
typedef struct
{
osal_event_hdr_t hdr; /* OSAL Message header */
uint16 groupId; /* Message's group ID - 0 if not set */
uint16 clusterId; /* Message's cluster ID */
afAddrType_t srcAddr; /* Source Address, if endpoint is STUBAPS_INTER_PAN_EP,
it's an InterPAN message */
uint16 macDestAddr; /* MAC header destination short address */
uint8 endPoint; /* destination endpoint */
uint8 wasBroadcast; /* TRUE if network destination was a broadcast address */
uint8 LinkQuality; /* The link quality of the received data frame */
uint8 correlation; /* The raw correlation value of the received data frame */
int8 rssi; /* The received RF power in units dBm */
uint8 SecurityUse; /* deprecated */
uint32 timestamp; /* receipt timestamp from MAC */
afMSGCommandFormat_t cmd; /* Application Data */
} afIncomingMSGPacket_t;
typedef struct
{
byte TransSeqNumber;
uint16 DataLength; // Number of bytes in TransData
byte *Data;
} afMSGCommandFormat_t;
- OSAL(系统抽象层)是一种支持多任务运行的系统资源分配机制(P72)
OSAL主要功能:
任务注册、初始化和启动
任务间的同步、互斥
中断处理
存储器分配和管理
补充:
- IEEE802.15.4网络的建立过程
- int main( )主函数实现硬件的初始化其中包括
事件驱动
-
首先记住 任务轮询、事件驱动 必考;
-
Zigbee将事件和任务的事件处理函数联系方法:(P74)
1、建立一个事件表,保存各个任务的对应事件
2、建立另一个函数表,保存各个任务事件处理函数地址
3、将两张表建立某种对应关系 -
OSAL工作原理(轮询)osal_start_system(void)
通过tasksEvents指针访问事件表的每一项,如果有时间发生,则查找函数表找到事件处理函数进行处理,处理完后,继续访问事件表,查看是否有事件发生,无限循环;(P75) -
协议栈定义的事件成为系统强制事件:(P80)
AF_INCOMING-MSG-CMD
ZDO_STATE_CHANGE
ZDO_CB_MSG
AF_DATA_CONFIRM_CMD -
Zigbee协议栈为半开源;
-
Zigbee协议栈串口操作(P85)
串口基本操作步骤:
1、初始化串口,包括设置波特率、中断等
2、向发送缓冲区发送数据或从接收缓冲区读取数据
操作函数:
uint8 HalUARTOpen(uint8 port,halUARTCfg_t *config); //初始化串口(设置波特率、中断等)
uint16 HalUARTRead(uint8 port,uint8 *buf,uint16 len); //从接受缓冲区读取数据
uint16 HalUARTWrite(uint8 port,uint8* buf,uint16 len);// 向缓冲区发送数据
-
串口回调函数:回调函数不是由该函数实现方直接调用的,而是在特定的事件或条件发生的,由另外的一方调用,用于对该事件或条件进行响应。因此,串口回调函数是在有串口操作(事件)发生时(自动触发)调用的;(P89)
-
当应用有串口操作时,应该对应用程序模块的工程属性的编译预处理的Definedsymbols下拉列表框中输入“HAL_UART=TRUE”。(即用条件编译来控制是否编译与该模块相关的程序,目的是为了节约存储资源);(P93)
-
程序中波特率的设置要与上位机(如串口助手)一致;
-
Zigbee协议栈NV操作(P120)
NV(Non Volatile),即非易失性存储器(Flash存储器),即系统掉电,存储器中的数据不掉失。主要用途保存网路的配置参数,或掉电后,上电该节点还是加入原来的网络并且该节点的网络地址就可以从NV读取。
NV存储器主要的操作有初始化NV存储器、读NV存储器、写NV存储器。这些都在OSAL文件夹下中的OSAL_Nv.h和OSAL.h文件中定义和实现。
下面三个操作函数分别是:
NV初始化函数:uint8 osal_nv_item_init( uint16 id, uint16 len, void *buf ),NV存储器将该存储器分成多个条目,每个条目都有一个ID号。 条目的分类见OSAL文件夹中的ZcomDef.h文件,其中要知道的是:用户应用程序定义的条目地址范围为是0x0201到0x0FFF;
NV写操作函数:uint8 osal_nv_write( uint16 id, uint16 ndx, uint16 len, void *buf );
NV读取函数:uint8 osal_nv_read( uint16 id, uint16 ndx, uint16 len, void *buf );
第一个参数:uint16:NV条目ID号
第二参数:举例条目开始的偏移量
第三参数:要写入的数据长度
第四参数:执行要存放写入或读取数据函数缓冲区的指针 -
用户只能使用条目ID范围0x0201~0x0FFF
可在OSAL文件夹下的ZcomDef.h文件中添加自己的条目
如:#define Test_NV 0x0201 -
**函数名要考:** **事件添加函数**:osal_set_event() 函数原型:osal_set_event( taskID, SYS_EVENT_MSG ); 参数说明: taskID:任务 SYS_EVENT_MSG :事件 **定时器函数**:osal_start_timerEx() (具有开启和停止一个定时器的功能,定时器能用**1毫秒**的增量进行设置) 函数原型: uint8 osal_start_timerEx( uint8 taskID, uint16 event_id, uint16 timeout_value); 参数说明:taskID:任务 event_id:事件 timeout_value:定时毫秒数 **内存拷贝函数**:osal_memcpy() **内存比较函数**:osal_memcmp() **字符串长度函数**:osal_strlen() **无线发送函数**:AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP, uint16 cID, uint16 len, uint8 *buf, uint8 *transID, uint8 options, uint8 radius ) **消息接收函数**:uint8 *osal_msg_receive( uint8 task_id )
补充:
- SYS_EVENT_MSG是系统事件,也是协议栈已经定义好的系统事件。
在文件ZcomDef.h中,事件号是一个16bit的常量,使用叫作独热码(one-hot code)编码,也是一个位表示一个事件,方便进行event的提取,这样一个task最多可以有16个event,SYS_EVENT_MSG已经占用了0x8000,故自定义的事件只能有15个; - 事件的提取和清除可以用简单的位操作指令实现,事件的提取可以用位与操作 events & SYS_EVENT_MSG,事件的清除可以用异或操作实现,evets ^ SYS_EVENT_MSG;
Zigbee通信相关
-
Zigbee协议栈中的规范(Profile)和簇(Cluester)
Zigbee网络中进行数据收发都是建立在应用规范基础上的。每个应用规范都有一个ID来标示。在一个规范(Profile)下又提出了簇(Cluester)的概念,这个Cluester要理解为一个应用领域下的一个特定对象。簇是由命令组成的。 -
同一规范下的发送命令(簇号)和接受命令(簇号)要相同才能通信;
-
Zigbee网络通信必须建立在具体设备节点的具体通信端口:
网络地址可以描述一个节点,用户可使用简单描述符来描述一个端口。(用户可用的端口号是1-240) -
Zigbee通信模式:点播 广播 组播(这一点重点,我觉得可能考设计题和程序题,所以我会在下面着重补充)
点播
发送模式:Addr16Bit
发送目的端口:目的节点的简单描述符设定的工作端口
发送地址:目的节点的网络地址
广播
发送模式:AddrBroadcast
发送目的端口:目的节点的简单描述符设定的工作端口
发送地址: 0xFFFF 全网发送 包括休眠节点
0xFFFD 只发往休眠节点
0xFFFC 发往所有路由节点
组播(同一组的节点才能通信)
发送模式:AddrGroup
发送目的端口:目的节点的简单描述符设定的工作端口
发送地址:组ID -
#include “aps_groups.h”
1、设置组对象(ID 和 name)
2、加入对象组 aps_AddGroup()
3、退出组 -
Zigbee协议栈网络管理
Zigbee协议栈实现网络管理的函数:
获得该节点的网络地址:uint16 NLME_GetShortAddr(void)
获得该节点的MAC地址:byte * NLME_GetExtAddr(void)获得该节点的父节点网络地址:uint16 NLME_GetCoordShortAddr(void) 获得该节点的父节点MAC地址:void NLME_GetCoordExtAddr(byte *buf)
蓝牙
- 采用高速跳频扩展,实现语音和数据在短距离上的稳定无缝无线连接
在2.4GHz的ISM频带上设立79个带宽为GHz的信道,用每秒钟切换1600次的频率的跳频(Hobbing)扩展技术实现信息的收发。
蓝牙系统中的功能模块分为:无线射频单元、链路控制单元、链路管理单元、软件结构 - 微微网: 1主设备 7从设备
- 蓝牙技术采用了全开放的框架结构
- 蓝牙技术的系统结构分为三大部分:
1.底层硬件模块
2.中间协议层
3.高层应用 - 蓝牙协议分为四层:
1.核心协议:BaseBand、LMP、L2CAP、SDP;
2.电缆替代协议:RFCOMM;
3.电话传送控制协议:TCS-Binary、AT 命 令 集;
4.选用协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、 WAE。 - 近场通信NFC 及WIFI(了解一下,不考)
下面我整理了一下实验的一些核心代码,大家可以结合教材一起看,应该会在代码题和设计题里面考:
- No.9 软链接与硬链接
- excel 中设置下拉菜单,让其一直显示
- 旷厂练习生 | 小白进阶之三个月发表一篇CVPR
- zigbee通讯技术复习笔记
- AAAI 2021线上分享 | 华为云提出多轮阅读理解框架,解决短文本的实体链接问题 - 知乎
- 投资笔记-每股两千多的茅台是否敢买
- Node.js 中的异步迭代器
- 初学者福利!花两天时间整理的STM32中的一些C语言知识点
- 如何在基于 Ubuntu 或 Debian 的 Linux 发行版中查看一个软件包的依赖 - 知乎
- 3分钟教你如何在Word里快速制作单斜线和多斜线表头
- 数据库:SQLServer分页查询整理
- 那一年,爱因斯坦输得很惨很惨,被十几个诺奖得主怼了一遍后,退出了群聊……...
- web前端微信小程序开发
- 2020年度总结了这 50 道 MySQL 高频面试题!
- 【技术教程】互联网视频直播点播分析平台EasyDSS配置公网IP后登录提示“服务不存在”,该如何排查?
- lutter可定制的上下滑出抽屉
- 原创 | 人工智能的人文主义,如何让AI更有爱
- Bug or Feature?藏在 requests_html 中的陷阱
- Python核心资料:Django Scrapy Hadoop 数据挖掘 机器学习 Python精选视频(限时福利免费领)
- 滴滴Java后台3面题目:网络 内存溢出 各种锁 高性能 消息队列