zigbee通讯技术复习笔记

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

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)
    协调器:主要负责无线网络的建立与维护;
    路由器:主要负责无线网络的路由;
    终端节点:主要负责无线网络数据的采集。
  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文件中声明的外部函数进行具体实现。

CC2530芯片相关

CC2530单片机是一款完全兼容8051内核,支持802.15.4协议的无线射频单片机(P30)
CC2530的Flash(非易失性存储器)容量可选: 32KB 64KB 128KB 256KB
CC2530有两个晶振: 32MHz 晶振 32.768KHz
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。

  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. 首先记住 任务轮询、事件驱动 必考;

  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_start_timerEx()
    
    内存拷贝函数: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 )
    

你可能感兴趣的:(物联网课程)