ZigBee学习电子笔记
zigbee读书笔记1

7. Coordinator, Router 与 End Device 有什么区别? 好本与烂书的区别在于,好书在开头的时候就知道你在想什么,而烂书呢,到读到最后你也 不知道他在想什么。。 。 这个问题的答案在那本英文“大部头”的前面章节: 1.7 Device Types There are two types of devices in an IEEE 802.15.4 wireless network: full-function devices (FFDs) and reduced-function devices (RFDs). An FFD is capable of performing all the duties described in the IEEE 802.15.4 standard and can accept any role in the network. An RFD, on the other hand, has limited capabilities. For example, an FFD can communicate with any other device in a network, but an RFD can talk only with an FFD device. RFD devices are intended for very simple applications such as turning on or off a switch. The processing power and memory size of RFD devices are normally less than those of FFD devices. 1.8 Device Roles In an IEEE 802.15.4 network, an FFD device can take three different roles: coordinator, PAN coordinator, and device. A coordinator is an FFD device that is capable了一天的程序才发现这种想法太急功近利了,有句古话怎么讲来着--“欲速 则不达”,古人的话还是有道理的,于是决定调整思路,放平心态。但是到底从哪开始呢? 国内 Zigbee 方面的书寥寥无几,大多数又总感觉有种功利色彩。罢了,读英文的吧(借机 感谢下我大学良师 albert,亏着他当时的提点,现在读英文书还不算吃力) 。近期准备从两 个 地 方 下 手 , 一 个 是 TI 的 Zstack 手 册 , 另 外 一 个 是 国 外 的 朋 友 推 荐 的 一 本 叫 works.and.Transceivers 的电子书,不想读电子版的,只是在 深圳的书店还没找到。这是一本360多页的大部头,个人比较欣赏国外这种风格的书,往往 深入浅出,让一个没太有基础的人也容易读得懂,不用搞一大堆书去看同一个东西。国内的 大部头也不少,但很多感觉像我小时候写作文的风格--扯远了,抓紧时间吧~~~ --by outman from zigbeetech 2010.4.8 6. cc2430后面的的 DB,BB,EB 代表什么意思? BB: Battery Board DB: Development Board EB: Evaluation Board 分别对应 TI 公司开发的三种板型,其功能按上顺序依次变强。可以参看"Z-Stack User's Guide for CC2430"的图片,以获得直观认识(具体位置在:开始==》程序==》Texas Instruments ==》ZStack-1.4.3-1.2.1) --by outman 2010.4.8
zigbee基础知识笔记.docx

1. 基础知识 (1)1.1IEEE 地址 (1)1.2 簇 (2)1.3 Profile ID (4)1.4网络地址与端点号、节点 (4)1.5 PANID (5)1.6 zigbee设备 (5)2. 绑定机制 (7)2.1 描述符绑定 (7)2.2 设备绑定 (23)1.基础知识1.1IEEE 地址IEEE 地址是 64 位,在设备进入网络之前就分配好了的,应该在全球是唯一的,而网络地址是在网络建立后,设备加入网络时,它的父节点给它分配的,在设备通信时,首先由ieee地址找到设备的网络地址,然后根据网络地址实现设备之间的通信,这样可以减少帧头长度,多传有效数据通俗的说IEEE 地址相当于你的手机号(11 位的那个),短地址就相当于你们公司的小号(3 、4) 位,一个公司的互打电话就用小号噻。
假设你的手机号138xxxxx666 ,这个是唯一的,但你的小号,假设是 666,在你的公司网中是唯一的,但是在另一个网中,可能别人的小号也是666。
1.2 簇簇就是相当于端点房间里面的人,是接收最终的目标。
这东西是 2 个字节编号,在射频发送的时候,必须要指定接收模块的镞,发送模块不需要指定。
首先每一个端点可以看成是一个 1 个字节数字编号的开有一扇门的房间,数据最终的目标是进入到无线数据包指定的目标端点房间,而取无线数据这个相关的代码在任务事件处理函数里,TI 协议栈有那么多的任务事件处理函数,所以必须要指定在哪个任务事件处理函数来取这个无线数据包里面的有用数据。
端点就相当于一个房间的门牌号!!!SimonApp_epDesc.endPoint= 10;//SimonApp_ENDPOINT;此端点编号为10SimonApp_epDesc.task_id = &SimonApp_TaskID;和我们应用层任务挂钩完成了簇信息表的构建,因为簇信息封装在SimonApp_SimpleDesc 里面,这里面却只是起到一个信息表的作用!方便数据到来的时候查询相关信息表!const cId_t SimonApp_ClusterList[SimonApp_MAX_CLUSTERS] ={SimonApp_CLUSTERID};const SimpleDescriptionFormat_t SimonApp_SimpleDesc = {SimonApp_ENDPOINT,// int Endpoint;SimonApp_PROFID,//uint16 AppProfId[2];SimonApp_DEVICEID,//uint16 AppDeviceId[2];SimonApp_DEVICE_VERSION,//int AppDevVer:4;SimonApp_FLAGS,//int AppFlags:4;SimonApp_MAX_CLUSTERS,//byte AppNumInClusters;(cId_t*)SimonApp_ClusterList,//byte *pAppInClusterList;SimonApp_MAX_CLUSTERS,//byte AppNumInClusters;(cId_t*)SimonApp_ClusterList//byte *pAppInClusterList;};接收到数据以后,判断是属于哪一个端点、属于哪一个簇1.3 Profile ID这个是由Zigbee 组织来分配的应用ID 号,比如无线开关用0x0001 ,智能电表用ox0002,万用遥控器用0x0003 等等。
ZigBee无线协议学习笔记

1. ZigBee简介1.1. 概述zigbee协议栈结构由一些层构成,每个层都有一套特定的服务方法和上一层连接,称为协议。
数据实体(data entity)提供数据的传输服务,而管理实体(management entity)提供所有的服务类型。
每个层的服务实体通过服务接入点(service access point SAP)和上一层相接,每个SAP提供大量服务方法来完成相应的操作。
zigbee协议栈基于标准的OSI七层模型,但只是在相关范围来定义一些相应层来完成特定的任务。
IEEE802.15.4-2003标准定义了下面的两个层:物理层(PHY层)和媒介层(MAC层)。
zigbee联盟在此基础上建立了网络层(NWK 层)以及应用层(APL层)的框架(framework)。
APL层又包括应用支持子层(application support sub-layer APS),zigbee的设备对象(zigbee device object ZDO)以及制造商定义的应用对象。
1.2. 缩略语和简称AIB 应用支持层的信息库AF 应用框架APDU 应用支持子层协议数据单元APL 应用层APS 应用支持子层APSDE 应用支持子层数据实体APSDE-SAP 应用支持子层数据实体-服务接入点APSME 应用支持子层管理实体APSME-SAP 应用支持子层管理实体-服务接入点ASDU APS服务数据单元MAC 媒体访问控制MCPS-SAP 媒体访问控制公用部分子层-服务接入点MLME-SAP 媒体访问控制子层管理实体-服务接入点MSG 信息服务类型NHLE 上层实体NIB 网络层信息库NWK 网络OSI 开放式系统互连PAN 个人区域网络PDU 协议数据单元PHY 物理层QOS 服务质量RREP 路由应答RREQ 路由请求SAP 服务接入点ZB ZigBeeZDO ZigBee设备对象1.3. ZDOZigBee设备对象(ZDO)描述了一个基本的功能函数类,在应用对象、设备profile和APS 之间提供了一个接口。
Ti_CC2530之Zigbee学习笔记

Ti_CC2530之Zigbee学习笔记网友学习Zigbee的笔记这种学习方法值得借鉴,也值得推广,希望对大家学习Zigbee有所帮助。
硬件参考西安迖泰电子公司的CC2430开发套件。
目录一、重要变量说明 (2)二、重要属性 (9)三、重要结构 (13)四、重要的表 (17)五、ZigBee网络中的设备信息 (18)六、协调器网络的建立 (20)七、输入输出命令的邦定过程及数据发送 (23)一、重要变量说明编译选项:HOLD_AUTO_START --网络设备启动应用程序NV_RESTORE --在NV中保存网络状态RTR_NWKHAL_ADC --是否自持ADCHAL_DMA --是否支持DMAHAL_AESHAL_LCDHAL_LEDHAL_UARTHAL_KEYZDO_MGMT_NWKDISC_REQUEST --请求目标设备执行网络扫描ZDO_MGMT_NWKDISC_RESPONSE --响应目标设备执行网络扫描ZDO_MGMT_LQI_REQUEST --请求目标设备相邻设备列表ZDO_MGMT_LQI_RESPONSE --响应目标设备相邻设备列表ZDO_MGMT_RTG_REQUEST --请求目标设备路由表ZDO_MGMT_RTG_RESPONSEZDO_MGMT_BIND_REQUEST --请求目标设备绑定表ZDO_MGMT_BIND_RESPONSEZDO_MGMT_LEAVE_REQUEST --请求目标设备离开网络ZDO_MGMT_LEAVE_RESPONSEZDO_MGMT_ JOINDIRECT_REQUEST --请求目标设备直接连接另一个设备 ZDO_MGMT_ JOINDIRECT_RESPONSEZDO_MGMT_PERMIT_JOIN_RESPONSE --响应设备允许或拒绝连接宏:MAC_RADIO_TURN_OFF_POWER --关闭无线电MAC_RADIO_TURN_ON_POWER --打开无线电返回值状态:ZSUCCESS 0INVALID_TASK 1MSG_BUFFER_NOT_AVAIL 2INVALID_MSG_POINTER 3INVALID_LEN 4INVALID_SENDING_TASK 5INVALID_DESTINATION_TASK 6INVALID_EVENT_ID 7INVALID_TIMEOUT_VALUE 8INVALID_INTERRUPT_ID 9INVALID_ISR_PTR 10INVALID_TASK_TABLE 11NO_TIMER_AVAIL 12INVALID_MSG_LEN 13NOT_READY 14NV_ITEM_UNINIT 15NV_OPER_FAILED 16INVALID_MEM_SIZE 17NV_BAD_ITEM_LEN 18全局状态值:ZSuccess --成功 0x00 ZFailure --失败 0x01 ZInvalidParameter --无效参数 0x02 ZStack状态值:ZMemError --系统内存错误 0x10 ZBufferFull --缓冲区满 0x11 ZUnsupportedMode --未支持的模式 0x12 ZMacMemError --MAC 内存错误 0x13 ZSapiInProgress 0x20 ZSapiTimeout 0x21 ZSapiInit 0x22 APS层状态值:ZApsFail --失败 0xb1 ZApsTableFull --表满 0xb3ZApsIllegalRequestZApsInvalidBinding --绑定无效 0xb4 ZApsUnsupportedAttrib --未支持的属性0xb5 ZApsNotSupported --未支持0xb6 ZApsNoAck --没有Ack 0xb7 ZApsDuplicateEntry --条目重复 0xb8 ZApsNoBoundDevice --没有绑定设备 0xb9 SEC层状态值: ZSecNoKey --没有密钥0xa1 ZSecOldFrmCount 0xa2 ZSecMaxFrmCount --最大帧数 0xa3 ZSecCcmFail 0xa4 NWK层状态值:ZNwkInvalidParam --无效参数 0xc1 ZNwkInvalidRequest --无效请求0xc2 ZNwkNotPermitted --不允许0xc3 ZNwkStartupFailure --启动失败 0xc4 ZNwkAlreadyPresent --已存在0xc5 ZNwkSyncFailure --同步失败0xc6 ZNwkTableFull --表满0xc7 ZNwkUnknownDevice --未知设备0xc8 ZNwkUnsupportedAttribute --未支持的属性0xc9 ZNwkNoNetworks --没有网络 0xca ZNwkLeaveUnconfirmed --离开未确认 0xcb ZNwkNoAck --没有ACK 0xcc ZNwkNoRoute --没有路由 0xcd MAC层状态值:ZMacSuccess --成功 0x00 ZMacBeaconLoss --信标丢失 0xe0 ZMacChannelAccessFailure 0xe1 ZMacDenied 0xe2 ZMacDisableTrxFailure 0xe3ZMacFailedSecurityCheck 0xe4 ZMacFrameT ooLong 0xe5 ZMacInvalidGTS 0xe6 ZMacInvalidHandle 0xe7 ZMacInvalidParameter 0xe8 ZMacNoACK 0xe9 ZMacNoBeacon 0xea ZMacNoData 0xeb ZMacNoShortAddr 0xec ZMacOutOfCap 0xed ZMacPANIDConflict 0xee ZMacRealignment 0xef ZMacTransactionExpired 0xf0 ZMacTransactionOverFlow 0xf1 ZMacTxActive 0xf2 ZMacUnAvailableKey 0xf3 ZMacUnsupportedAttribute 0xf4 ZMacUnsupported 0xf5 组件标示:COMPID_OSAL 0COMPID_MTEL 1COMPID_MTSPCI 2COMPID_NWK 3COMPID_NWKIF 4COMPID_MACCB 5COMPID_MAC 6COMPID_APP 7COMPID_TEST 8COMPID_RTG 9COMPID_DATA 11测试中的组件标示:COMPID_TEST_NWK_STARTUP 20COMPID_TEST_SCAN_CONFIRM 21COMPID_TEST_ASSOC_CONFIRM 22COMPID_TEST_REMOTE_DATA_CONFI23RM系统事件:SYS_EVENT_MSG系统消息:SPI_INCOMING_ZTOOL_PORT 0x21SPI_INCOMING_ZAPP_DATA 0x22MT_SYS_APP_MSG 0x23MT_SYS_APP_RSP_MSG 0x24AF_DATA_CONFIRM_CMD 0xFDAF_INCOMING_MSG_CMD 0x1AAF_INCOMING_KVP_CMD 0x1BAF_INCOMING_GRP_KVP_CMD 0x1CKEY_CHANGE 0xC0ZDO_NEW_DSTADDR 0xD0ZDO_STATE_CHANGE 0xD1ZDO_MATCH_DESC_RSP_SENT 0xD2ZDO_CB_MSG 0xD3为用户所保留的消息id(用户自定义)0xE0—0xFF各层簇定义:APP层簇ID void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) SAMPLEAPP_MAX_CLUSTERS --最大簇数 2SAMPLEAPP_PERIODIC_CLUSTERID --一个簇标识的周期 1SAMPLEAPP_FLASH_CLUSTERID --一个簇标识的闪烁 2ZDO层簇ID void ZDApp_ProcessMsgCBs( zdoIncomingMsg_t *inMsg ) ZDO, _RESPONSE_BIT_V1_0 --响应位V1.0版本 0x80ZDO_RESPONSE_BIT --响应位 0x8000NWK_addr_req --网络地址请求 0x0000IEEE_addr_req --IEEE地址请求 0x0001Node_Desc_req --节点描述符请求 0x0002Power_Desc_req --电源描述符请求 0x0003Simple_Desc_req --简单描述符请求 0x0003Active_EP_req --动态端点/接口请求 0x0005Match_Desc_req --匹配描述符请求 0x0006NWK_addr_rsp (NWK_addr_req | ZDO_RESPONSE_BIT)IEEE_addr_rsp (IEEE_addr_req | ZDO_RESPONSE_BIT)Node_Desc_rsp (Node_Desc_req | ZDO_RESPONSE_BIT)Power_Desc_rsp (Power_Desc_req | ZDO_RESPONSE_BIT)Simple_Desc_rsp (Simple_Desc_req | ZDO_RESPONSE_BIT)Active_EP_rsp (Active_EP_req | ZDO_RESPONSE_BIT)Match_Desc_rsp (Match_Desc_req | ZDO_RESPONSE_BIT)Complex_Desc_req --复杂描述符请求 0x0010User_Desc_req --用户描述符请求 0x0011Discovery_Cache_req --缓存发现请求 0x0012End_Device_annce --终端设备性能 0x0013User_Desc_set --设置用户描述符 0x0014Server_Discovery_req --服务发现请求 0x0015Complex_Desc_rsp (Complex_Desc_req | ZDO_RESPONSE_BIT)User_Desc_rsp (User_Desc_req | ZDO_RESPONSE_BIT)Discovery_Cache_rsp (Discovery_Cache_req | ZDO_RESPONSE_BIT) User_Desc_conf (User_Desc_set | ZDO_RESPONSE_BIT)Server_Discovery_rsp (Server_Discovery_req | ZDO_RESPONSE_BIT)End_Device_Bind_req --终端设备绑定请求 0x0020Bind_req --绑定请求 0x0021Unbind_req --解除绑定请求 0x0022Bind_rsp (Bind_req | ZDO_RESPONSE_BIT)End_Device_Bind_rsp (End_Device_Bind_req | ZDO_RESPONSE_BIT) Unbind_rsp (Unbind_req | ZDO_RESPONSE_BIT)Mgmt_NWK_Disc_req --网络扫描请求 0x0030Mgmt_Lqi_req --相邻设备请求Mgmt_Rtg_req ((uint16)0x0032)Mgmt_Bind_req ((uint16)0x0033)Mgmt_Leave_req ((uint16)0x0034)Mgmt_Direct_Join_req ((uint16)0x0035)Mgmt_Permit_Join_req ((uint16)0x0036)Mgmt_NWK_Disc_rsp (Mgmt_NWK_Disc_req | ZDO_RESPONSE_BIT)Mgmt_Lqi_rsp (Mgmt_Lqi_req | ZDO_RESPONSE_BIT)Mgmt_Rtg_rsp (Mgmt_Rtg_req | ZDO_RESPONSE_BIT)Mgmt_Bind_rsp (Mgmt_Bind_req | ZDO_RESPONSE_BIT)Mgmt_Leave_rsp (Mgmt_Leave_req | ZDO_RESPONSE_BIT) Mgmt_Direct_Join_rsp (Mgmt_Direct_Join_req | ZDO_RESPONSE_BIT) Mgmt_Permit_Join_rsp (Mgmt_Permit_Join_req | ZDO_RESPONSE_BIT) 各层事件定义:MAC回调事件:void MAC_CbackEvent(macCbackEvent_t *pData)MAC_MLME_ASSOCIATE_IND --关联指示 1 MAC_MLME_ASSOCIATE_CNF --关联确认 2 MAC_MLME_DISASSOCIATE_IND --取消指示 3 MAC_MLME_DISASSOCIATE_CNF --取消确认 4 MAC_MLME_BEACON_NOTIFY_IND --信标通知指示 5 MAC_MLME_ORPHAN_IND --孤指示 6 MAC_MLME_SCAN_CNF --扫描确认7 MAC_MLME_START_CNF --开始确认8 MAC_MLME_SYNC_LOSS_IND --同步损失指示9 MAC_MLME_POLL_CNF --轮询确认10MAC_MLME_COMM_STATUS_IND --通信状态指示11 MAC_MLME_POLL_IND --轮询指示16 MAC_MCPS_DATA_CNF --数据确认 12 MAC_MCPS_DATA_IND --数据指示 13MAC_MCPS_PURGE_CNF --清除确认 14 MAC_PWR_ON_CNF --上电确认 15 ZDO层任务事件: UINT16 ZDApp_event_loop( byte task_id, UINT16 events )ZDO_NETWORK_INIT --设备初始化 0x0001ZDO_NETWORK_START --开始网络 0x0002ZDO_DEVICE_RESET --设备复位 0x0004ZDO_COMMAND_CNF --命令确认 0x0008ZDO_STATE_CHANGE_EVT --更新网路状态 0x0010ZDO_ROUTER_START --开始路由器 0x0020ZDO_NEW_DEVICE --新设备事件 0x0040ZDO_DEVICE_AUTH --设备确认事件 0x0080ZDO_SECMGR_EVENT --安全管理事件 0x0100ZDO_NWK_UPDATE_NV --保存网络状态 0x0200ZDO_FRAMECOUNTER_CHANGE --帧计数器改变 0x0400 二、重要属性获取或设置标准PIB MAC_MlmeGetReq() //获取属性值MAC_MlmeSetReq() //设置属性值MAC_ACK_WAIT_DURATION --等待确认帧的最大符号数MAC_ASSOCIATION_PERMIT --协调器允许关联MAC_AUTO_REQUEST --自动发送一个数据请求MAC_BATT_LIFE_EXT --启用电池寿命MAC_BATT_LIFE_EXT_PERIODSMAC_BEACON_PAYLOAD --信标负载内容MAC_BEACON_PAYLOAD_LENGTH --信标负载字节长度MAC_BEACON_ORDER --协调传送信标时间间隔MAC_BEACON_TX_TIMEMAC_BSN --信标帧序列号MAC_COORD_EXTENDED_ADDRESS --协调器扩展地址MAC_COORD_SHORT_ADDRESS --协调器短地址MAC_DSN --命令帧序列号MAC_GTS_PERMIT --PAN协调器接收GTS请求MAC_MAX_CSMA_BACKOFFS --消除信道之前,CSMA尝试抵消数 MAC_MIN_BE --如果设置为0,禁用避免碰撞MAC_PAN_ID --PAN标示符,0xFFFF不被关联MAC_PROMISCUOUS_MODE --mac处于混乱模式MAC_RX_ON_WHEN_IDLE --空闲周期启用接收器MAC_SHORT_ADDRESS --设备短地址,协调器在MAC_StartReq()设置,其他设备在关联中分配,MAC_ADDR_USE_EXT --设备没有短地址关联。
ZIGBEE学习笔记

1、ZigBee协议栈:ZigBee协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。
协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来遵循和使用这个协议的,进而实现无线数据收发。
2、ZigBee无线网络协议层的架构:ZigBee协议分为两部分---IEEE 802.15.4和ZigBee,IEEE 802.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的协调器,协调器首先选择一个信道和网络标识(PAN ID),然后开始这个网络.因为协调器是整个网络的开始,他具有网络的最高权限,是整个网络的维护者,还可以保持间接寻址用的表格绑定,同时还可以设计安全中心和执行其他动作,保持网络其他设备的通信。
zigbee学习笔记(一)

Zstack的任务处理机制Zmain.c中初始化部分重点掌握:osal_init_system(); //初始化操作系统osal_start_system(); //执行操作系统Z-Stack 操作系统初始化中:osalInitTasks(); //初始化系统的任务初始化系统的任务:void osalInitTasks( void ){uint8 taskID = 0;//分配内存,返回指向缓冲区的指针tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);//设置所分配的内存空间单元值为0osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt)); //任务优先级由高向低依次排列,高优先级对应taskID 的值反而小macTaskInit( taskID++ ); //macTaskInit(0),用户不需考虑nwk_init( taskID++ ); //nwk_init(1),用户不需考虑Hal_Init( taskID++ ); //Hal_Init(2),用户需考虑APS_Init( taskID++ ); //APS_Init(3),用户不需考虑ZDApp_Init( taskID++ ); //ZDApp_Init(4),用户需考虑GenericApp_Init ( taskID ); // GenericApp_Init _Init(5),用户需考虑}注明用户不需考虑的任务Ti已经给初始化完成了,在编程的时候可以不予考虑。
我们只需要考虑硬件层和应用层的任务初始化。
如:Hal_Init( taskID++ );ZDApp_Init( taskID++ );GenericApp_Init ( taskID );下面说一下如何在程序中加入自己的任务:在osalInitTasks()和tasksArr[]添加相应的项就可以了。
zigbee学习杂记

杂记
ZigBee网络层的主要功能是路由,路由算法是它的核心。
目前ZigBee网络层主要支持两种路由算法——树状路由和网状路由。
树状路由(具体可以参考ZigBee的协议栈规范)把整个网络看作是以协调器为根的一棵树,因为整个网络是由协调器所建立的。
协调器的子节点可以是路由器或者是末端节点,路由器的子节点也可以是路由器或者末端节点,而末端节点没有子节点,相当于树的叶子。
树状路由利用了一种特殊的地址分配算法,使用四个参数—深度、最大深度、最大子节点数和最大子路由器数来计算新节点的地址,于是寻址的时候根据地址就能计算出路径,而路由只有两个方向——向子节点发送或者向父节点发送。
树状路由不需要路由表,节省存储资源,但缺点是很不灵活,浪费了大量的地址空间,并且路由效率低。
ZigBee当中还有一种路由方法是网状路由,这种方法实际上是AODV路由算法的一个简化版本,非常适合于低成本的无线自组织网络的路由。
它可以用于较大规模的网络,需要节点维护一个路由表,耗费一定的存储资源,但往往能达到最优的路由效率,而且使用灵活。
除了这两种路由方法,ZigBee 当中还可以进行邻居表路由,其实邻居表可以看作是特殊的路由表,只不过只需要一跳就可以发送到目的节点。
Zigbee学习知识重点

第一章Zigbee概述1、Zigbee是一种新兴的短距离、低速率无线网络技术,主要用于近距离无线连接。
2、Zigbee的特点是功耗低、成本低、时延短、网络容量大、可靠安全。
3、常见的Zigbee芯片有CC243X系列、MC1322X系列和CC253X系列。
4、常见的Zigbee协议栈有非开源(msstatePAN)协议栈、开源(freakz)协议栈和半开源(Zstack)协议栈。
5、Zigbee软件开发平台包括IAR、Zigbee Sniffer、物理地址修改软件以及其它辅助软件。
6、Zigbee硬件开发平台采用Altium Designer进行设计。
7、简述Zigbee的定义。
答:Zigbee是一种近距离、低复杂度、低功耗、低成本的双向无线通讯技术。
主要用于距离短、功耗低且传输速率不高的各种电子设备之间,进行数据传输(包括典型的周期性数据、间歇性数据和低反应时间数据)的应用。
(Zigbee的基础是IEEE802.15.4,但是IEEE802.15.4仅处理低级的MAC(媒体接入控制协议)层和物理层协议,Zigbee联盟对网络层协议和应用层进行了标准化。
)8、简述无线传感器网络与Zigbee之间的关系。
答:从协议标准来讲:目前大多数无线传感器网络的物理层和MAC层都采用IEEE802.15.4协议标准。
IEEE802.15.4描述了低速率无线个人局域网的物理层和媒体接入控制协议(MAC 层),属于IEEE802.15.4工作组。
而Zigbee技术是基于IEEE802.15.4标准的无线技术。
从应用上来讲:Zigbee适用于通信数据量不大,数据传输速率相对较低,成本较低的便携或移动设备。
这些设备只需要很少的能量,以接力的方式通过无线电波将数据从一个传感器传到另外一个传感器,并能实现传感器之间的组网,实现无线传感器网络分布式、自组织和低功耗的特点。
9、Zigbee技术特点:低功耗、低成本、大容量、可靠、时延短、灵活的网络拓扑结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一讲第二讲2530通用I/O口有21个:P0/P1/口个8个;P2口5个,其中,P1_0、P_1有20mA的驱动能力,其余只有4mA2.IO口配置相关的寄存器(3个)PxSEL: P0SEL、P1SEL、P2SEL,每个寄存器是1byte,分别用来设定3个口的工作模式。
IO的两种工作模式:1.普通IO口模式:点灯、监测按键输入2.片上外设模式:作为串口或者其他非普通IO口PxDIR:P0DIR/P1DIR/P2DIR,每个寄存器占一个字节,用来设定IO口作为输入还是输出PxINP:P0INP/P1INP/P2INP:输入情况下,注意P2INP寄存器后3位的用法(见下图):输出示例(以P0_0为例):1)设置P0_0为普通IO口工作模式,非片上外设:P0SEL=0xFE(&11111110) 2)让P0_0作为输出用,非输入监测用:P0DIR=0x01(+ 00000001)3)输出(如P0_0=0或P0_0=1等)。
输入示例(让P1_2作为输入):1)设置P1_2为普通IO口工作模式,非片上外设:P1SEL=0xfd(11111011)2)让P1_2作为输入检测用,非输出用P1DIR=0xfd(11111011)3)选择上拉、下拉或三态中的一种输入(因为上电的时候寄存器默认为0,所以IO口都默认工作在普通IO口输入、上下拉模式)4)检测用:If (P1_2= =0 or 1){}Else{}总结:由此可见,当芯片上电初始化后,3组IO口默认工作在普通IO口下的输入监测、上拉输入模式。
自己编程示例:第三讲:外部中断检测中断有3级开关:CPU中断总开关------IO口组中断开关---------IO组内某口中断开关中断信号触发类型选择:上升、下降因此,某IO口产生中断需配置:1)CPU中断开关打开;EA=1;2)该口所在的IO组中断打开;P0组的中断开关在IEN1的第5位;P1组的中断开关在IEN2的第4位;P2组的中断开关在IEN2的第1位;3)该口中断打开;P0IEN;8位寄存器。
例如要把P0_2脚的中断开关打开,就要把该寄存器的第2位在程序中置1P1IENP2IEN4)配置中断信号的触发方式PICTL寄存器(8位)中断函数:编程示例:#pragma vector=P0INT_VECTOR__Interrupt void zd(){…...P0IFG=0;//为避免死循环需要先清零,该寄存器有8位,分别为P0组8个脚的标志位,若某个脚产生中断,则该位置1,故出中断函数时要清零。
P0IF=0;//CPU中断标志清零}第四讲:时钟的切换和控制串口时钟:cc2530片内有4个时钟源,芯片工作时必须使用一高一低频进行搭配,使用两个寄存器进行对其配置以及当前状态标志。
配置时钟源:CLKCONCMD命令寄存器:8位寄存器D6位用于高频时钟的选择;D7位用于低频时钟的选择;0表示外部,1表示内部?(视频里)芯片进行无线通信时必须将时钟切换到32MHz的石英晶振上CLKCONSTA除了时钟状态标志外还有时钟分频功能参考代码如下:串口串口0有两组备用位置:备用位置1为P0_2和P0_3;备用位置2为P1_4和P1_5。
到底选择哪组由PERCFG寄存器的第0位配置,0表示备用1,1表示备用2.串口编程示例(部分):第五讲:DIY无线通信模块射频通信注意:1)数据不能直接被发送出去,必须调制到高频载波上发送以提高通信效率,接收设备再解调恢复原始数据。
IEEE802.15.4 ISM信道:2.4GHz频段/915GHz频段/896GHz频段实验中ZigBee大约工作在2.4GHz频段(16个信道)2)什么是信道?2405M 11号信道2410M 12号信道2415M 13号信道…..2480M 26号信道信道一致的两个收发模块才能进行收发!3) 网络地址(网络短地址)、PANID(个域网ID)网络短地址:类似于计算机以太网的局域网,每台计算机都有唯一的一个IP地址。
在ZigBee网络中,每一个通信模块都有一个通信地址,即网络短地址;网络短地址为2个字节。
PANID:为了区分不同的ZigBee网络为每个ZigBee网络标示的ID,2个字节。
4)每一个CC2530芯片上都有一块RAM存放发送和接收数据,缓冲区。
都是128byte。
模块通信编程示例(以视频中板子为例)下图是主程序(主函数):#define SHORT_ADDR0 XREG( 0x6174 )#define SHORT_ADDR1 XREG( 0x6175 )//宏映射到CC2530的RAM上,操作宏就是操作对应地址上的RAM。
发送模块的主函数里做了哪些工作:1)板子上需要用到的资源初始化;2)设置本模块的网络短地址;3)等待按钮中断。
4)发生按钮中断时,在按钮中断里调用void RFSend(char*pstr,char len);函数把数据发送出去射频发送函数的定义如下:以上为数据发送做准备注意:RFST是数据发送寄存器射频接收函数定义如下:数码管配置程序:板子上其他硬件资源配置程序(均已模块化):实验中,使用key3按键控制另一模块的LED灯,该按键的中断程序如下图:其中涉及到该板子系统自定义的宏(如ON_LED0),参考如下:总结:ZigBee既需要软件上(协议栈)的支持,也需要硬件上支持协议就是基于某硬件上数据进行传输的格式第六讲:协议栈之操作系统抽象层OSAL1、操作系统是什么?能干什么事?为什么要在Zigbee里面引入操作系统他和Zigbee是什么关系?Main(){While(){A;B;//新加入B段代码后会对A段代码产生影响。
Delay();//浪费CPU的资源。
及时使用定时器也会使得代码繁琐}}//为了提高代码执行效率、便于管理代码、提高软硬件资源的利用率、提高整个程序效率,便引入了操作系统。
协议栈就是按照一定格式对数据进行打包、拆包以及一些其他功能的程序。
协议栈里面有一个类似操作系统的东西(OSAL)传统程序:Main(){While(){A;//采集数据B;//处理数据C;//报警、打印}}引入操作系统后:A;//采集数据-------模块化一个任务(功能、函数)1(ID)B;//处理数据C;//报警、打印任务的定义:在操作系统中实现某种功能的一块代码任务由一个全局变量来标识ID:任务ID char任务通信:使用全局变量来标记任务执行状态、交流信息如Char a=0来标记任务1正在执行,当为0时,主程序检测到该任务已完成,采取其他操作。
Main(){osal_init_system( )//初始化每一个任务osal_start_system( )}每一个任务:1)其内容由其自己的功能代码定义,代码在任务(处理)函数里,每个函数名是一个16位的地址,2)有自己的任务ID号3)每个任务都有一个用来通信的全局变量,为2个字节,存于16位的数组中,即16位变量tasksEvents[任务ID],如:tasksEvents[0]tasksEvents[1]操作系统初始化函数osal_start_system( )进入之后,是一个死循环:不管得检查每一个任务的通信变量是否为零如果为0,则反复检查,如果不为零,则通过该变量的下标找到其任务ID号码,在通过该ID号从tasksAst找到相应的任务函数进行处理这就是OSAL的运作原理。
事件:按钮按下以后产生中断,中断把某个任务通信的16位变量的某一位置1(还有其他一些操作)消息:向某一个任务发送消息就是把任务通信的16位变量的某一位置1,通信变量里面不同的位代表不同的消息调度:调度某一个任务就是运行某一个任务协议栈置操作系统抽象层按钮实验代码跟踪找到按键中断函数,half_key.c文件,里面的中断代码执行(通信变量置位等)完后发消息给主函数,检测到后进入处理函数。
怎么配置按钮中断、小灯:OnBoard.c一些全局的函数和变量配置在half_key.c配置一些寄存器和宏(注释:Ctrl+K,取消shift+Ctrl+K)OSAL 实际发消息机制1)按钮按下进入half_key.c2)操作系统的函数:(hal_drivers.c )OSAL 是TI 公司开发的一个类似OS 的调度软件,并不是真正的OS 第七讲:协议栈之组网通信在无线传感器网络里,按照其网络功能将ZigBee 模块分为协调器、路由器、终端这三者在网络中的不同点:1) 协调器是WSN 的发起者,创建网络,路由器和终端加入该网络2) 网络地址,加入到协调器所创建的网络里的节点(协调器、路由器、终端)都会获得一个在该网络里唯一的16位地址(2byte ),即网络地址(网络短地址),并且,协调器的网络地址永远是0x0000,其余节点的网络短地址是不确定的3)除了协调器之外,其他节点如要加入网络,需要待加入节点的父节点介绍引入,注意:终端节点是不能充当父节点的,其他均可个域网ID(PANID):区分不同ZigBee网络的网络标识ID4)端点:每个加入到ZigBee网络里的无线模块均是一个节点,每个节点里逻辑上存在若干个端点,模块间的收发消息均需指定一个端点进行,因此节点间通信的本质是端点间的通信,端点中有若干簇,端点号可以不同,但是簇号要一致。
ZigBee网络广播通信配置流程:<协调器>1)接收部分首先定义一个节点,定义一个端点描述符(结构体)簇(数组)ID16位填写端点描述符然后进行注册,注册完成后(端点和任务绑定),端点便可以接收消息了,外部从指定端点发来的数据都会引发对应用户任务的一个消息事件,然后调用任务处理函数,把数据取出来。
在接受处理函数里通过簇来区分2)发送部分首先定义一个节点,定义一个端点描述符(结构体)簇(数组)ID16位填写端点描述符然后进行注册,注册完成后(端点和任务绑定),端点便可以发送消息了。
因为发送的时候确定目标(宿主),所以必须要获取目标的信息,故发送方必须指定接收方的信息,如地址模式(宏),接收方接收端点设计一个系统函数:OSAL发数据的函数:第八讲:。