zigbee通讯技术复习笔记

语言: CN / TW / HK

这门课对于我一个学嵌入式的来说,还是比较重要的,所以我还是以老师给出的大纲为主体,好好复习一下!

题型:选择题24x1.5 判断10x1 填空15x1 简答4x5 程序1x5 另外一个设计题1x14

每个标题前半部分是老师的提纲知识点,补充下面是我看到的可能比较重要的或者可以了解的。

WPAN及ZigBee基础

  1. Zigbee、蓝牙、IEEE802.11b(WiFi)标准都是工作在2.4G频段的无线通信标准;Zigbee主要用在短距离无线控制系统,传输少量的控制信息;(P2)
  2. 短距离无线网络主要分为:无线局域网(WLANs)和无线个域网(WPANs)(P3)
  3. 无线个域网所对应的通信协议:(P3)
    HR-WPANS:802.15.3
    MR-WPANS:蓝牙
    LR-WPANS(低速率无线个域网):802.15.4


  4. Zigbee最大传输速率:250kbps。 ZigBee可工作在2.4GHz(全球流行)、868MHz(欧洲流行) 和915 MHz(美国流行)3个频段上,分别具有最高250kbit/s、20kbit/s和40kbit/s的传输速率,它的传输距离在10-75m的范围内, 但可以继续增加 。
  5. Zigbee无线网络分层: 物理层(PHY) 介质访问控制(MAC)网络层(NWK)应用程序支持子层(APS) 应用层(APL)(P4)
    其中802.15.4 定义了物理层和介质访问控制层Zigbee协议定义了网络层、应用程序支持子层和应用层(具体介绍见下面的补充)
  6. Zigbee特点:(自组网)(P5)
    高可靠性:采取了碰撞避免策略;MAC层采用了完全确认的数据传输模式;
    低成本、低功耗 :ZigBee模块的复杂度不高,ZigBee协议免专利费,再加之使用的频段无需付费,所以它的成本较低;ZigBee的传输速率低,发射功率仅为1mW,而且采用了休眠模式,功耗低
    高安全 :采用高级加密标准(AES 128) 的对称密码;
    低数据速率



  7. Zigbee设备类型:(P5)
    协调器(ZC Coordinator):主要负责无线网络的建立与维护;(每个ZigBee网络必须有一个)
    路由器(ZR Router):主要负责无线网络的路由;( (1)允许其他网络设备加入 (2)多跳路由 (3)协助电池供电的子节点通信(4)自己作为终端节点应用)
    终端节点(ZED End-device):主要负责无线网络数据的采集。(1)向路由节点传递数(2)没有路由功能(3)低功耗(Zigbee的低功耗主要体现在这里)(4)可选择睡眠与唤醒。(路由因不断转发数据需电源供电,终端节点电池供电))


  8. Zigbee工作在ISM(工业、科学和医疗)频带,共规定了27个信道:(P7)
    2.4GHz频段 共16个信道,通信速率为250kbps
    915MHz频段 共10个信道,通信速率为40kbps
    896MHz频段 共1个信道,通信速率为20kbps


  9. Zigbee网络拓扑结构:星型;网络型;簇状;(P8)
  10. Zigbee应用为:周期性 ;反复; 间断数据采集应用
  11. Zigbee模块开发一般包括两个文件:.h头文件和.c文件(P)
    .h文件可理解为一份接口描述文件;
    .c文件主要功能是对.h文件中声明的外部函数进行具体实现。

补充:

  1. Zigbee网络中传输的三类数据:
    周期性数据:如家庭中水、电、气三表数据的传输;
    间断性数据:如电灯、家用电器的控制等数据的传输;
    反复性的低反应时间的数据:如鼠标、操作杆传输的数据。


  2. 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芯片相关

  1. CC2530单片机是一款完全兼容8051内核,支持802.15.4协议的无线射频单片机(P30)
    CC2530的Flash(非易失性存储器)容量可选: 32KB 64KB 128KB 256KB
    CC2530有两个晶振: 32MHz 晶振 32.768KHz(无线通信时必须采用外部32M晶振

  2. I/O口控制
    CC2530内部自带温度传感器:
    使用步骤:
    1、使能温度传感器
    2、连接温度传感器到ADC
    3、初始化ADC,确定参考电压、分辨率等,启动ADC读取温度数据
    补充:





Zigbee地址相关

  1. 设备地址:(P134)
    64位IEEE地址:长地址又称 MAC地址扩展地址(全球唯一)
    16位网络地址:短地址 又称逻辑地址(协调器地址为0x0000,其他设备入网时由协调器分配)(1)在网络中标识不同设备;(2)在网络数据传输时指定目的地址和源地址;

  2. 网络地址:唯一标示网络中的一个节点(用网络地址来区分不同的节点);(P135)

  3. 网络地址最多可以分配65536个节点,地址分配取决于整个网络的架构,整个网络的架构由一下3个值决定:1、网络最大深度 2、每个父节点拥有的孩子节点最大数目 3、每个父节点拥有的孩子节点路由器的最大数目
    同一父节点相连的终端节点的网络地址是连续的
    同一父节点相连的路由器节点的网络地址通常是不连续的

  4. 端口:每个节点上最多支持240(1-240)个端口,每个节点上的所有端口共用一个发射/接收天线(用端口来区分同一节点的端口);

  5. PANID:Zigbee网络号 可手动设置(或自动随机生成),如果指定的PANID被占用则自动加1。
    ~PANID范围是0X0001----0XFFFF;
    ~可以通过给不同的网络指定不同的网络ID号来区分网络,避免干扰;
    ~如果设置为0XFFFF,那么协调器则随机产生一个值作为自己的PANID;


    非易失性闪存条目ID号(NV操作用到的ID则定义在0x0201~0x0FFF 范围内!) 在这里插入图片描述

  6. 数据发送:调用**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 )
  1. 数据接收:调用**osal_msg_receive()**函数从消息队列中接收一个消息(包含事件与数据)
    uint8 *osal_msg_receive( uint8 task_id )

  2. 数据存储位置(结构):(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;
  1. OSAL(系统抽象层)是一种支持多任务运行的系统资源分配机制(P72)
    OSAL主要功能:
    任务注册、初始化和启动
    任务间的同步、互斥
    中断处理
    存储器分配和管理




补充:

  1. IEEE802.15.4网络的建立过程
    在这里插入图片描述
  2. int main( )主函数实现硬件的初始化其中包括
    在这里插入图片描述

事件驱动

  1. 首先记住 任务轮询、事件驱动 必考;

  2. Zigbee将事件和任务的事件处理函数联系方法:(P74)
    1、建立一个事件表,保存各个任务的对应事件
    2、建立另一个函数表,保存各个任务事件处理函数地址
    3、将两张表建立某种对应关系


  3. OSAL工作原理(轮询)osal_start_system(void)
    通过tasksEvents指针访问事件表的每一项,如果有时间发生,则查找函数表找到事件处理函数进行处理,处理完后,继续访问事件表,查看是否有事件发生,无限循环;(P75)

  4. 协议栈定义的事件成为系统强制事件:(P80)
    AF_INCOMING-MSG-CMD
    ZDO_STATE_CHANGE
    ZDO_CB_MSG
    AF_DATA_CONFIRM_CMD



  5. Zigbee协议栈为半开源

  6. 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);// 向缓冲区发送数据
  1. 串口回调函数:回调函数不是由该函数实现方直接调用的,而是在特定的事件或条件发生的,由另外的一方调用,用于对该事件或条件进行响应。因此,串口回调函数是在有串口操作(事件)发生时(自动触发)调用的;(P89)

  2. 当应用有串口操作时,应该对应用程序模块的工程属性的编译预处理的Definedsymbols下拉列表框中输入“HAL_UART=TRUE”。(即用条件编译来控制是否编译与该模块相关的程序,目的是为了节约存储资源);(P93)

  3. 程序中波特率的设置要与上位机(如串口助手)一致;

  4. 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号
    第二参数:举例条目开始的偏移量
    第三参数:要写入的数据长度
    第四参数:执行要存放写入或读取数据函数缓冲区的指针









  5. 用户只能使用条目ID范围0x0201~0x0FFF
    可在OSAL文件夹下的ZcomDef.h文件中添加自己的条目
    如:#define Test_NV 0x0201

  6. **函数名要考:**
    **事件添加函数**: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 )
    

补充:

  1. SYS_EVENT_MSG是系统事件,也是协议栈已经定义好的系统事件。
    在文件ZcomDef.h中,事件号是一个16bit的常量,使用叫作独热码(one-hot code)编码,也是一个位表示一个事件,方便进行event的提取,这样一个task最多可以有16个event,SYS_EVENT_MSG已经占用了0x8000,故自定义的事件只能有15个
  2. 事件的提取和清除可以用简单的位操作指令实现,事件的提取可以用位操作 events & SYS_EVENT_MSG,事件的清除可以用异或操作实现,evets ^ SYS_EVENT_MSG;

Zigbee通信相关

  1. Zigbee协议栈中的规范(Profile)和簇(Cluester)
    Zigbee网络中进行数据收发都是建立在应用规范基础上的。每个应用规范都有一个ID来标示。在一个规范(Profile)下又提出了簇(Cluester)的概念,这个Cluester要理解为一个应用领域下的一个特定对象。簇是由命令组成的。

  2. 同一规范下的发送命令(簇号)和接受命令(簇号)要相同才能通信;

  3. Zigbee网络通信必须建立在具体设备节点的具体通信端口:
    网络地址可以描述一个节点,用户可使用简单描述符来描述一个端口。(用户可用的端口号是1-240)

  4. Zigbee通信模式:点播 广播 组播(这一点重点,我觉得可能考设计题和程序题,所以我会在下面着重补充)
    点播
    发送模式:Addr16Bit
    发送目的端口:目的节点的简单描述符设定的工作端口
    发送地址:目的节点的网络地址
    广播
    发送模式:AddrBroadcast
    发送目的端口:目的节点的简单描述符设定的工作端口
    发送地址: 0xFFFF 全网发送 包括休眠节点
    0xFFFD 只发往休眠节点
    0xFFFC 发往所有路由节点
    组播(同一组的节点才能通信)
    发送模式:AddrGroup
    发送目的端口:目的节点的简单描述符设定的工作端口
    发送地址:组ID













  5. #include “aps_groups.h”
    1、设置组对象(ID 和 name)
    2、加入对象组 aps_AddGroup()
    3、退出组


  6. Zigbee协议栈网络管理
    Zigbee协议栈实现网络管理的函数:
    获得该节点的网络地址:uint16 NLME_GetShortAddr(void)
    获得该节点的MAC地址:byte * NLME_GetExtAddr(void)


     	获得该节点的父节点网络地址:uint16 NLME_GetCoordShortAddr(void)
     	获得该节点的父节点MAC地址:void NLME_GetCoordExtAddr(byte *buf)
    

蓝牙

  1. 采用高速跳频扩展,实现语音和数据在短距离上的稳定无缝无线连接
    在2.4GHz的ISM频带上设立79个带宽为GHz的信道,用每秒钟切换1600次的频率的跳频(Hobbing)扩展技术实现信息的收发。
    蓝牙系统中的功能模块分为:无线射频单元、链路控制单元、链路管理单元、软件结构

  2. 微微网: 1主设备 7从设备
  3. 蓝牙技术采用了全开放的框架结构
  4. 蓝牙技术的系统结构分为三大部分:
    1.底层硬件模块
    2.中间协议层
    3.高层应用


  5. 蓝牙协议分为四层:
    1.核心协议:BaseBand、LMP、L2CAP、SDP;
    2.电缆替代协议:RFCOMM;
    3.电话传送控制协议:TCS-Binary、AT 命 令 集;
    4.选用协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、 WAE。



  6. 近场通信NFC 及WIFI(了解一下,不考)

下面我整理了一下实验的一些核心代码,大家可以结合教材一起看,应该会在代码题和设计题里面考: