ZigBee源码程序及解释
zigbee协议栈源码

竭诚为您提供优质文档/双击可除zigbee协议栈源码篇一:zigbeez-stack协议栈构架zstack基础1、zstack协议栈构架zigbee协议栈就是将各个层定义的协议都集合在一起,以函数的形式实现,并给用户提供一些应用层api,供用户调用。
协议栈体系分层架构与协议栈代码文件夹对应表如下:整个协议栈的构架,如图所示app:应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。
hal:硬件层目录,包含有与硬件相关的配置和驱动及操作函数。
mac:川@。
层目录,包含了川@。
层的参数配置文件及其mac的lib库的函数接口文件。
mt:监控调试层,主要用于调试目的,即实现通过串口调试各层,与各层进行直接交互。
nwk:网络层目录,含网络层配置参数文件及网络层库的函数接口文件,aps层库的函数接口。
osal:协议栈的操作系统。
profile: @尸层目录,包含aF层处理函数文件。
$。
皿丫五丫:安全层目录,安全层处理函数接口文件,比如加密函数等。
services:地址处理函数目录,包括着地址模式的定义及地址处理函数。
tools:工程配置目录,包括空间划分及zstack相关配置信息。
zdo: zdo 目录。
zmac:mac 层目录,包括mac 层参数配置及mac 层lib 库函数回调处理函数。
zmain:主函数目录,包括入口函数 main()及硬件配置文件。
output:输出文件目录,这个ew8051ide自动生成的。
2、zigbee20xx协议栈源码库结构分析了解了218匕。
20**协议栈整个构架后,再来看看协议栈源码库结构是什么样的,各层的具体文件是什么,建立不同的项目、添加自己的应用层任务及处理函数需要修改什么文件。
zigbee20xx协议栈zstack-1.4.2文件目录及说明如下:打开smapleapp项目工程先看app层:从上图可以看出,对于不同的项目,大部分代码都是相同的,只是在用户应用层,添加了不同的任务及事件处理函数。
Zigbee标签PC程序使用简易说明

图1
连接
连接时,若协调器通过网关与PC连接,则选“网关模式”进行连接;若协调器直接写PC连接,则选“直连模式”进行连接。
串口号即为PC连接时使用的串口号。
采集
连接好之后,会在界面的左侧区域1显示出当前的标签(标签的网络地址和用户ID)。
单击选中一个标签后,右侧绘图区域2会根据区域3相应的选择画出当前标签的信息;同时区域4以文字形式显示出当前标签的各种信息。
配置
图2
单击区域5的“配置”按钮,弹出图2框,即可对标签进行配置,即写操作。
在弹出图2框后,按住需配置的标签的按钮5秒钟后,该框即会显示出该标签当前的配置信息。
如,在区域1显示当前标签的网络地址。
以配置用户ID为例。
区域2的上栏显示当前配置的用户ID,下栏可以输入新的用户ID,十六位字母表示的十六进制数字,输完后点区域3的按钮,若配置成功,会弹出一个小框提示配置成功。
配置报告周期、温湿度等与配置用户ID类似。
其中配置温湿度、光照、加速度,若当前标签的配置状态为报告,则会在相应的上栏的复选框中以打钩选中表示。
获取协调器IEEE地址
图3
连接时与上面说明一致。
连接后,点击“获到协调器IEEE地址”按钮,即会在其上方的输入框中显示出当前连接的协调器的IEEE地址。
LED闪烁
图4
连接时与上面说明一致。
连接后,选中一个标签后,单击右侧的“LED闪烁”按钮,若控制成功,相应的标签的LED灯即会进行闪烁,同时也会弹出一个小框提示控制成功。
ZigBee编程基础入门

zigbee基本概念及协议术语1. 逻辑设备类型协调器(coordinator),路由器(router),终端设备(end-device)•ZigBee 协调者—coord为协调者节点*–每各ZigBee网络必须有一个.–初始化网络信息.协调器是一种特殊的路由器(待确认)•ZigBee 路由器—router为路由节点*–路由信息•ZigBee 终端节点—rfd为终端节点*–没有路由功能–低价格2 . 2.4GHz射频信道分为16个独立信道。
3. 绑定应用设备之间信息流的控制机制。
有直接绑定(OTA)、间接绑定、直接绑定(通过串口)4. 配置文件profile 应用程序框架5. 端点endpoint 每个ZigBee设备支持多达240个端点6. NWK寻址地址类型:ZigBee设备有一个64位IEEE长地址(MAC地址)通常用一个16位短地址表识网络地址分配由协调器完成相关参数:5 max_depth 网络的最大深度6 Max_children 路由器或协调器节点连接子节点最大个数20 Max_router 路由器或协调器处理的具有路由能力的子节点最大个数它是max_children的子集数据包传送单点unicast 多点multicast 广播broadcast路由:经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的节点。
F8wconfig.cfg配置路由看了下面就不用纠结了。
配置文件(profile):Zigbee协议的配置文件是对逻辑组件及其相关接口的描述,是面向某个应用类别的公约、准则.通常没有程序代码与配置文件相关联.属性(attribute):设备之间通信的每一种数据像开关的状态或温度计值等皆可称为属性.每个属性可得到唯一的ID值.簇(cluster):多个属性的汇集形成了簇,每个簇也拥有一个唯一的ID.虽然个体之间传输的通常是属性信息,但所谓的逻辑组件的接口指的却是簇一级的操作,而非属性一级.终端(endpoint):每个支持一个或多个簇的代码功能块称为终端.不同的设备通过它们的终端及所支持的簇来进行通信.Cluster: is a container for one or more attributes. (一个或更多属性的集合)Attribute: a data entity which represents a physical quantity or state.(反映物理特性或状态的一个数据实体)Cluster是逻辑设备之间的事务关系Cluster定性Attribute则是某种事务关系的具体特例Attribute定量Endpoint是一个逻辑设备(个人理解为入口地址)。
zigbee协议,源代码

竭诚为您提供优质文档/双击可除zigbee协议,源代码篇一:揭开zigbee20xx协议栈z-stack的”开源“面纱揭开zigbee20xx协议栈z-stack的”开源“面纱(20xx-11-2216:06)分类:zigbee技术学习我们都在说zigbee20xx协议栈z-stack是开源的,但是这个协议栈到底是全部开源的,还是只是开源一部分,让我们来揭开它的“开源”面纱?z-stack是在20xx年4月,德州仪器推出业界领先的zigbee协议栈,z-stack符合zigbee20xx规范,支持多种平台,z-stack 包含了网状网络拓扑的几近于全功能的协议栈,在竞争激烈的zigbee领域占有很重要地位。
配合osal完成整个协议栈的运行。
z-stack只是zigbee协议的一种具体的实现,我们要澄清的是zigbee不仅仅有z-stack这一种,也不能把z-stack 等同于zigbee20xx协议,现在也有好几个真正开源的zigbee协议栈,例如:msstatepan协议栈,freakz协议栈,这些都是zigbee协议的具体实现,而且是全部真正的开源的,它们的所有源代码我们都可以看到,而z-stack中的很多关键的代码是以库文件的形式给出来,也就是我们只能用它们,而看不到它们的具体的实现。
那下面我们就以z-stack1.4.3-1.2.0看看它的组织架构,那些功能是开源的,那些是以库文件的形式提供给我们的。
我们利用z-stack开发应用,只能知道怎么做和做什么也就是“how”和“what”,而不能准确的知道“为什么”,“why”.我们也可以通过真正这些开源的zigbee协议栈了解为什么。
我们可以从ti的官方网站下载最新的协议栈,/zigbee 我这里的是zigbee20xx版本为版本的。
下载完以后我们可以点击exe文件进行安装,默认会在c盘的根目录下建立texasinstruments目录,该目录下面的子目录就是安装z-stack的文件。
zigbee协议栈代码主要名词解释

zigbee协议重要名词解释及英文缩写(转载)网络层功能:1. 加入和退出网络2. 申请安全结构3. 路由管理4. 在设备之间发现和维护路由5. 发现邻设备6. 储存邻设备信息当适当的重新分配地址联合其他设备,ZIGBEE2006可以依赖于网络协调者建立一个新网络.ZIGBEE应用层由APS(应用支持)、AF(应用结构)、ZDO(ZIGBEE设备对象)和厂商自定义应用对象组成。
APS功能1. 绑定维持工作台,定义一个两个合拢的设备进行比较建立他们的需要和服务。
2. 促进信息在设备之间的限制3. 组地址定义,移除和过滤组地址消息4. 地址映射来自于64位IEEE地址和16位网络地址5. 分裂、重新组装和可靠数据传输ZDO功能1. 定义设备内部网络(ZigBee协调者和终端接点)2. 开始和/或回答绑定请求3. 在网络设备中建立一个网络安全关系4. 在网络中发现设备和决定供给哪个应用服务ZDO同样有责任在网络中发现设备和为他们提供应用服务。
1.1.4 网络拓扑ZIGBEE网络层支持星状、树状和网状拓扑。
在星状拓扑中网络受约束与单个设备,呼叫COORD。
COORD有责任建立和维持在网络中发现的设备和其他所有设备,都知道的终端接点直接和COORD 通信。
在网状和树状拓扑中,COORD有责任建立一个网络和选择几个关键网络参数,但是网络有有可能直接应用于ZigBee路由器。
在树状网络中,利用分等级路由策略完成路由传输数据和控制消息直通网络。
树状网络在802.15.4-2003中可以采用信标引导通信。
网状网络将允许所有对等网络通信。
ZIGBEE 路又将不能在网状网络中发射规则的IEEE802.15.4-2003信标。
缩写含义AIB:应用支持层消息AF:应用结构APDU:应用支持层以下数据单位APL:应用层APS:应用支持层APSDE:应用支持层以下数据实体APSDE-SAP:应用支持层数据实体—服务通道APSME:应用支持层管理实体APSME-SAP:应用支持层管理实体—服务通道ASDU:APS服务数据单位BRT:广播重试计时器BTR:广播处理记录BTT:广播处理工作台CCM*:CSMA-CA:载波多重监听通道——避免碰撞FFD:全部功能设备GTS:担保时间跟踪IB:消息数据LQI:连接质量指示LR-WPAN:低速率无线局域网MAC:控制层MCPS-SAP:控制层公共部分—服务通道MIC:消息完整代码MLME-SAP:控制层管理实体—服务通道MSC:消息序列图表MSDU:控制层服务数据单位MSG:消息服务类型NBDT:网络广播发送时间NHLE:下一个更高层实体NIB:网络层信息数据NLDE:网络层数据实体NLDE-SAP:网络层数据实体——服务通道NLME:网络层管理实体NLME-SAP:网络层管理实体——服务通道NPDU:网络层数据单位NSDU:网络服务数据单位NWK:网络OSL:打开系统联络PAN:局域网PD-SAP:物理层数据—指向服务通道PDU:协议数据单位PHY:物理层PIB:局域网消息PLME-SAP:物理层管理实体——指向服务通道POS:私人运作空间QOS:服务质量RREP:路由回答RN:路由接点SKG:SKKE:SSP:安全服务提供SSS:安全服务说明WPAN:无线局域网XML:可扩展语言ZB:ZIGBEEZDO:ZIGBEE设备对象2.1.1APSAPS提供一个工作台在网络层和应用层之间直接服务于ZDO和厂商自定义设备。
ZigBee源码程序及解释

协议栈无线透传编程原理:第一个功能:协调器的组网,终端设备和路由设备发现网络以及加入网络//第一步:Z-Stack 由main ()函数开始执行,main ()函数共做了2件事:一是系统初始化,另外一件是开始执行轮转查询式操作系统int main( void ) ( // Initialize the operating system osal_init_system(); //第二步,操作系统初始化osal_start_system(); //初始化完系统任务事件后,正式开始执行操作系统}//第二步,进入osal_init_system() 函数,执行操作系统初始化uint8 osal_init_system( void ) //初始化操作系统,其中最重要的是,初始化机扃统的任务(// Initialize the Memory Allocation Systemosal_mem_init();// Initialize the message queueosal_qHead = NULL;// Initialize the timersosalTimerInit();// Initialize the Power Management Systemosal_pwrmgr_init();// Initialize the system tasks.osalInitTasks(); //第三步,执行操作系统任务初始化函数// Setup efficient search for the first free block of heap.osal_mem_kick();return ( SUCCESS );}//第三步,进入osalInitTasks() 函数,执行操作系统任务初始化void osalInitTasks( void ) //第三步,初始化操作系统任务(uint8 taskID = 0;tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));//任务优先级由高向低依次排列,高优先级对应taskID 的值反而小macTaskInit( taskID++ ); // 不需要用户考虑nwk_init( taskID++ ); 〃不需要用户考虑Hal_Init( taskID++ ); //硬件抽象层初始化,需要我们考虑#if defined( MT_TASK )MT_TaskInit( taskID++ );#endifAPS_Init( taskID++ ); //不需要用户考虑#if defined ( ZIGBEE_FRAGMENTATION )APSF_Init( taskID++ );#endifZDApp_Init( taskID++ ); // 第四步,ZDApp层,初始化,执行ZDApp_init函数后,如果是协调器将建立网络,如果是终端设备将加入网络。
zigbee程序

if(addata > 4095) addata = 4095;
// addata = (addata - syspara.AD0_Min)*4095/(syspara.AD0_Max - syspara.AD0_Min);
// addata = addata/(syspara.AD0_Max - syspara.AD0_Min);
{
uint8 st = 0; //执行状态0 --正常1 --保存失败2 --值超界
syspara.minlight = pData[9]*256 + pData[10];
//保存系统参数
if(SUCCESS != osal_nv_write(SYSTEM_PARA_NV, 0, sizeof(SystemPara), &syspara))
uint8 bindpreind = 0;
uint8 bindlostcnt = 0;
void myMsgProcess(afIncomingMSGPacket_t *pMSGpkt )
{
uint16 source;
uint8 *pData;
uint16 devind = 0;
uint16 nwkaddr;
Sendstr[i++] = FRAM_END;
SendDataOTA(0xffff,DATA2_CLUSTERID,i,Sendstr,BROADCAST);
}
}
break;
default:
break;
}
}
/*
* @return无
*/
uint8 SendDataOTA(uint16 dstaddr,uint16 cmd,uint16 len,uint8 *buf,uint8 type)
zigbee组网小实验2—相关源代码1

·风格控,你今天“艰难决定”了吗? ·手机写博 Word写博 LiveWriter写博
2010-12-17
zigbee组网小实验2—相关源代码1 - 小峰的日志 - 网易博客
/*SPI Data command*/ if ( events & UART_RX_DAT_CB_EVT ) {
SampleApp_SPI_SendData( databuf, rxlen+1+2 ); return (events ^ UART_RX_DAT_CB_EVT); } //********************** /*SPI Control command*/ if ( events & UART_RX_CMD_CB_EVT ) { // HalLedBlink( HAL_LED_4, 4, 50, (1000 / 4) ); //test SampleApp_SPI_SendCommand( databuf, rxlen+1+2 ); return (events ^ UART_RX_CMD_CB_EVT); } //********************** /*inform the coordinator when join the network*/ #ifndef ZDO_COORDINATOR if ( events & SAMPLEAPP_SEND_NWKADDR_EVT ) { SampleApp_SendNwkaddrMessage(); return ( events ^ SAMPLEAPP_SEND_NWKADDR_EVT); } #endif //********************** /*transmit the data periodically*/ if ( events & SAMPLEAPP_COMMAND_PERIODIC_MSG_EVT ) { SampleApp_PrcoessCommandPeriodicMessage(); return ( events ^ SAMPLEAPP_COMMAND_PERIODIC_MSG_EVT); } //********************** // Discard unknown events return 0; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
协议栈无线透传编程原理:第一个功能:协调器的组网,终端设备和路由设备发现网络以及加入网络//第一步:Z-Stack 由 main()函数开始执行,main()函数共做了 2 件事:一是系统初始化,另外一件是开始执行轮转查询式操作系统int main( void ) { .......// Initialize the operating systemosal_init_system(); //第二步,操作系统初始化......osal_start_system(); //初始化完系统任务事件后,正式开始执行操作系统......}//第二步,进入 osal_init_system()函数,执行操作系统初始化uint8 osal_init_system( void ) //初始化操作系统,其中最重要的是,初始化操作系统的任务{// Initialize the Memory Allocation Systemosal_mem_init();// Initialize the message queueosal_qHead = NULL;// Initialize the timersosalTimerInit();// Initialize the Power Management Systemosal_pwrmgr_init();// Initialize the system tasks.osalInitTasks(); //第三步,执行操作系统任务初始化函数// Setup efficient search for the first free block of heap.osal_mem_kick();return ( SUCCESS );}//第三步,进入osalInitTasks()函数,执行操作系统任务初始化void osalInitTasks( void ) //第三步,初始化操作系统任务{uint8 taskID = 0;tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));//任务优先级由高向低依次排列,高优先级对应 taskID 的值反而小macTaskInit( taskID++ ); //不需要用户考虑nwk_init( taskID++ ); //不需要用户考虑Hal_Init( taskID++ ); //硬件抽象层初始化,需要我们考虑#if defined( MT_TASK )MT_TaskInit( taskID++ );#endifAPS_Init( taskID++ ); //不需要用户考虑#if defined ( ZIGBEE_FRAGMENTATION )APSF_Init( taskID++ );#endifZDApp_Init( taskID++ ); //第四步,ZDApp层,初始化,执行ZDApp_init函数后,如果是协调器将建立网络,如果是终端设备将加入网络。
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined( ZIGBEE_PANID_CONFLICT )ZDNwkMgr_Init( taskID++ );#endifSerialApp_Init( taskID ); //应用层SerialApp层初始化,需要用户考虑在此处设置了一个按键触发事件,//当有按键按下的时候,产生一个系统消息}//第四步,进入ZDApp_init()函数,执行ZDApp层初始化//The first stepvoid ZDApp_Init( uint8 task_id ) //The first step,ZDApp层初始化。
{// Save the task IDZDAppTaskID = task_id;// Initialize the ZDO global device short address storageZDAppNwkAddr.addrMode = Addr16Bit;ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;(void)NLME_GetExtAddr(); // Load the saveExtAddr pointer.// Check for manual "Hold Auto Start"ZDAppCheckForHoldKey();// Initialize ZDO items and setup the device - type of device to create.ZDO_Init();// Register the endpoint description with the AF// This task doesn't have a Simple description, but we still need // to register the endpoint.afRegister( (endPointDesc_t *)&ZDApp_epDesc );#if defined( ZDO_USERDESC_RESPONSE )ZDApp_InitUserDesc();#endif // ZDO_USERDESC_RESPONSE// Start the device?if ( devState != DEV_HOLD ) //devState 初值为DEV_INIT ,所以在初始化ZDA层时,就执行该条件语句{ZDOInitDevice( 0 ); //The second step, 接着转到ZDOInitDevice()函数,执行The third step;}else{// Blink LED to indicate HOLD_STARTHalLedBlink ( HAL_LED_4, 0, 50, 500 );}ZDApp_RegisterCBs();} /* ZDApp_Init() *///The third step,执行ZDOInitDevice()函数,执行设备初始化uint8 ZDOInitDevice( uint16 startDelay ) //The third step, ZDO层初始化设备,{.......// Trigger the network startZDApp_NetworkInit( extendedDelay ); //网络初始化,跳到相应的函数里头,执行The fourth step.......}//The fouth step,执行 ZDApp_NetWorkInit()函数void ZDApp_NetworkInit( uint16 delay ) //The fourth step,网络初始化{if ( delay ){// Wait awhile before starting the deviceosal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT,delay ); //发送ZDO_NETWORK_INIT(网络初始化)消息到 ZDApp层,转到//ZDApp层,执行The fifth step , ZDApp_event_loop() 函数}else{osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );}}//The fifth step,转到ZDApp_event_loop()函数UINT16 ZDApp_event_loop( uint8 task_id, UINT16 events ){if ( events & ZDO_NETWORK_INIT ) //The fivth step,网络初始化事件处理{// Initialize apps and start the networkdevState = DEV_INIT;//设备逻辑类型,启动模式,信标时间,超帧长度,接着转到The sixth step,去启动设备,接着执行The sixth step,转到ZDO_StartDevice() ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,DEFAULT_BEACON_ORDER,DEFAULT_SUPERFRAME_ORDER );// Return unprocessed eventsreturn (events ^ ZDO_NETWORK_INIT);}}//The sixth step,执行ZDO_StartDevice()函数,启动设备void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder ) //The sixth step{......if ( ZG_BUILD_COORDINATOR_TYPE && logicalType ==NODETYPE_COORDINATOR ) //当设备作为协调器时,执行这个条件语句。
{if ( startMode == MODE_HARD ){devState = DEV_COORD_STARTING;//向网络层发送网络形成请求。
当网络层执行NLME_NetworkFormationRequest()建立网络后,将给予 ZDO层反馈信息。
// 接着转到The seventh step,去执行ZDApp层的ZDO_NetworkFormationConfirmCB()函数ret = NLME_NetworkFormationRequest( zgConfigPANID, zgApsUseExtendedPANID, zgDefaultChannelList,zgDefaultStartingScanDuration, beaconOrder,superframeOrder, false );}if ( ZG_BUILD_JOINING_TYPE && (logicalType == NODETYPE_ROUTER || logicalType == NODETYPE_DEVICE) ) //当为终端设备或路由时{if ( (startMode == MODE_JOIN) || (startMode == MODE_REJOIN) ){devState = DEV_NWK_DISC;// zgDefaultChannelList与协调器形成网络的通道号匹配。