当前位置:文档之家› Zigbee网络设备启动流程—协调器(自启动模式)

Zigbee网络设备启动流程—协调器(自启动模式)

Zigbee网络设备启动流程—协调器(自启动模式)
Zigbee网络设备启动流程—协调器(自启动模式)

使用的协议栈版本信息: ZigBee2006\ZStack-1.4.3-1.2.1

Zigbee网络设备启动流程—协调器(自启动模式)—以SampleApp的协调器为例.

1、协调器预编译信息

通过project->options->c/c++compiler->extraOptions可以看到协调器所带的配置文件为:

-f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wCoord.cfg

-f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wConfig.cfg

即编译了ZDO_COORDINATOR和RTR_NWK.

通过project->options->c/c++compiler->reprocessor->Defined symbols可以看到协调器预编译包含了:

CC2430EB; ZTOOL_P1; MT_TASK; LCD_SUPPORTED=DEBUG; MANAGED_SCAN

没有编译HOLD_AUTO_START和SOFT_START.

2、具体流程

main()->osal_init_system()->osalInitTasks()->ZDApp_Init()

进入ZDApp_Init()函数:

**************************************

void ZDApp_Init( byte task_id )

{

uint8 capabilities;

// Save the task ID

ZDAppTaskID = task_id;

// Initialize the ZDO global device short address storage

ZDAppNwkAddr.addrMode = Addr16Bit;

ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR; //0xFFFE

(void)NLME_GetExtAddr(); // Load the saveExtAddr pointer.

// Check for manual"Hold Auto Start"

//检测到有手工设置SW_1则会设置devState = DEV_HOLD,从而避开网络初始化

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

// set broadcast address mask to support broadcast filtering

NLME_GetRequest(nwkCapabilityInfo, 0, &capabilities);

NLME_SetBroadcastFilter( capabilities );

// Start the device?

if ( devState != DEV_HOLD )

{

ZDOInitDevice( 0 );

}

/*如果devState=DEV_HOLD,则不会调用ZDOInitDevice()来初始化网络

即不组网也不进网.LED4闪烁等待应用程序来开启设备并初始化网络

*/

else

{

// Blink LED to indicate HOLD_START

HalLedBlink ( HAL_LED_4, 0, 50, 500 );

}

ZDApp_RegisterCBs();

}

**************************************

协调器没有编译HOLD_AUTO_START,也没有手工设置SW_1,初始化devState = DEV_INIT(参见基本问题说明3).因此直接在ZDApp_Init()中进入ZDOInitDevice( 0 )开启设备.

**************************************

uint8 ZDOInitDevice( uint16 startDelay )

{

//初始化设备网络状态为ZDO_INITDEV_NEW_NETWORK_STATE:新的网络状态.

//可能意味着ZCD_NV_STARTUP_OPTION不能恢复,或没有任何网络状态恢复

uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;

uint16 extendedDelay = 0;

devState = DEV_INIT; // Remove the Hold state

// Initialize leave control logic

//函数读取NV项目ZCD_NV_LEAVE_CTRL的值,ZDApp_LeaveCtrl指向这个值

ZDApp_LeaveCtrlInit();

// Check leave control reset settings

ZDApp_LeaveCtrlStartup( &devState, &startDelay );

// Leave may make the hold state come back

//以上两个函数设置了对设备离开时的控制,如果有延时则延时,没有则

//把设备状态设为DEV_HOLD

if ( devState == DEV_HOLD )

//ZDO_INITDEV_LEAVE_NOT_STARTED:该设备没有在网络中,下次调用才启用.

return ( ZDO_INITDEV_LEAVE_NOT_STARTED ); // Don't join - (one time).

#if defined ( NV_RESTORE )

// Get Keypad directly to see if a reset nv is needed.

// Hold down the SW_BYPASS_NV key (defined in OnBoard.h)

// while booting(引导) to skip past NV Restore.

if ( HalKeyRead() == SW_BYPASS_NV )

//SW_BYPASS_NV按键处于按下状态时,则避开网络层的NV存储

networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE; //设备网络状态为新的网络状态

else

{

// Determine if NV should be restored

//函数返回的设备网络状态要么是新的网络状态;要么是恢复的网络状态;以此

//来确定要不要读取NV里相应条目来恢复网络先前状态

networkStateNV = ZDApp_ReadNetworkRestoreState();

}

//如果设备的网络状态为恢复的网络状态

if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE )

{

//恢复设备先前的网络状态参数并且

//设置devStartMode = MODE_RESUME!!!!

networkStateNV = ZDApp_RestoreNetworkState();

}

else //如果设备的网络状态为新的网络状态,在下面进行处理

{

// Wipe out(清除) the network state in NV

NLME_InitNV();

NLME_SetDefaultNV(); //设置默认NV条目

}

#endif

//如果设备的网络状态为新的网络状态

if ( networkStateNV == ZDO_INITDEV_NEW_NETWORK_STATE )

{

//根据预编译来设置设备新的网络状态参数

ZDAppDetermineDeviceType();/*!!!!*/

// Only delay if joining network - not restoring network state

extendedDelay = (uint16)((NWK_START_DELAY + startDelay)

+ (osal_rand() & EXTENDED_JOINING_RANDOM_MASK));

}

// Initialize device security

ZDApp_SecInit( networkStateNV );

// Trigger the network start

ZDApp_NetworkInit( extendedDelay );

return ( networkStateNV );

}

**************************************

分两种情况:

(1)如果协调器预编译了NV_RESTORE,且函数ZDApp_ReadNetworkRestoreState()返回值为ZDO_INITDEV_RESTORED_NETWORK_STATE,则进入ZDApp_RestoreNetworkState()里设置ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR和devStartMode = MODE_RESUME.

****************

uint8 ZDApp_RestoreNetworkState( void )

{

…………

// Are we a coordinator

//设备的网络状态为恢复的网络状态.则进入这个函数进行恢复

//先判断如果短地址为0则设置设备逻辑类型为协调器且devStartMode = MODE_RESUME

//否则设置devStartMode = MODE_RESUME

ZDAppNwkAddr.addr.shortAddr = NLME_GetShortAddr();

if ( ZDAppNwkAddr.addr.shortAddr == 0 ) //如果短地址是0,即协调器

{

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR; //!!!!!

}

devStartMode = MODE_RESUME; //MODE_RESUME!!!!!!!!

…………

}

****************

(2)如果协调器没有预编译NV_RESTORE,networkStateNV ==ZDO_INITDEV_NEW_NETWORK_STATE,但由于协调器编译了ZDO_COORDINATOR而没有编译SOFT_START,因此ZDAppDetermineDeviceType()不起作用.因此ZDO_Config_Node_Descriptor.LogicalType和devStartMode这两个关键参数保持初始化时的值:

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR(见基本问题说明6) devStartMode = MODE_HARD(见基本问题说明4)

对于协调器,这两种情况最终都是确定两个关键设备网络状态参数的值.对本例的SampleApp的协调器,没有编译NV_RESTORE,因此属于情况(2).

然后调用ZDApp_NetworkInit()启动网络:

****************

void ZDApp_NetworkInit( uint16 delay )

{

if ( delay )

{

// Wait awhile before starting the device

osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, delay );

}

else

{

osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );

}

}

****************

通过触发ZDAppTaskID的ZDO_NETWORK_INIT事件.来看下对ZDO_NETWORK_INIT 事件的处理: ****************

UINT16 ZDApp_event_loop( byte task_id, UINT16 events )

{

…………

if ( events & ZDO_NETWORK_INIT )

{

// Initialize apps and start the network

devState = DEV_INIT;

ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,

DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );

// Return unprocessed events

return (events ^ ZDO_NETWORK_INIT);

}

…………

}

可以看到调用了

ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,DEFA ULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );

这里设备网络状态参数:

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR

devStartMode = MODE_HARD

且协调器编译了ZDO_COORDINATOR

****************

void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder )

{

ZStatus_t ret;

ret = ZUnsupportedMode;

#if defined(ZDO_COORDINATOR)

if ( logicalType == NODETYPE_COORDINATOR )

{

if ( startMode == MODE_HARD ) //MODE_HARD

{

devState = DEV_COORD_STARTING; //Started as Zigbee Coordinator

//建网

ret = NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,

zgDefaultStartingScanDuration, beaconOrder,

superframeOrder, false );

}

else if ( startMode == MODE_RESUME ) //MODE_RESUME

{

// Just start the coordinator

devState = DEV_COORD_STARTING;

ret = NLME_StartRouterRequest( beaconOrder, beaconOrder, false );

}

else //错误,未知启动模式

{

#if defined( LCD_SUPPORTED )

//HalLcdWriteScreen( "StartDevice ERR", "MODE unknown" );

ClearScreen();

Print8(HAL_LCD_LINE_1,10,"StartDevice ERR",1);

Print8(HAL_LCD_LINE_2,10,"MODE unknown",1);

#endif

}

#endif // !ZDO_COORDINATOR

//#if !defined ( ZDO_COORDINATOR ) || defined( SOFT_START )

if ( logicalType == NODETYPE_ROUTER || logicalType == NODETYPE_DEVICE )

{

if ( (startMode == MODE_JOIN) || (startMode == MODE_REJOIN) )

{

devState = DEV_NWK_DISC; //Discovering PAN's to join

#if defined( MANAGED_SCAN )

ZDOManagedScan_Next();

ret = NLME_NetworkDiscoveryRequest( managedScanChannelMask, BEACON_ORDER_15_MSEC );

#else

ret = NLME_NetworkDiscoveryRequest( zgDefaultChannelList, zgDefaultStartingScanDuration );

#endif

}

else if ( startMode == MODE_RESUME ) //MODE_RESUME 恢复

{

if ( logicalType == NODETYPE_ROUTER )

{

ZMacScanCnf_t scanCnf;

devState = DEV_NWK_ORPHAN;

/* if router and nvram is available, fake successful orphan scan */

scanCnf.hdr.Status = ZSUCCESS;

scanCnf.ScanType = ZMAC_ORPHAN_SCAN;

scanCnf.UnscannedChannels = 0;

scanCnf.ResultListSize = 0;

nwk_ScanJoiningOrphan(&scanCnf);

ret = ZSuccess;

}

else

{

devState = DEV_NWK_ORPHAN; //孤儿

ret = NLME_OrphanJoinRequest( zgDefaultChannelList,

zgDefaultStartingScanDuration );

}

}

else

{

#if defined( LCD_SUPPORTED )

// HalLcdWriteScreen( "StartDevice ERR", "MODE unknown" );

Print8(HAL_LCD_LINE_1,10,"StartDevice ERR",1);

Print8(HAL_LCD_LINE_2,10,"MODE unknown",1);

#endif

}

//#endif //!ZDO COORDINATOR || SOFT_START

if ( ret != ZSuccess )

osal_start_timerEx(ZDAppTaskID, ZDO_NETWORK_INIT, NWK_RETRY_DELAY );

}

****************

通过参数可知协调器调用NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,

zgDefaultStartingScanDuration, beaconOrder,

superframeOrder, false )

进行网络的组建.

而对NLME_NetworkFormationRequest()的调用会产生一个回调函数ZDO_NetworkFormationConfirmCB()(见主要函数说明3),来看下:

****************

void ZDO_NetworkFormationConfirmCB( ZStatus_t Status )

{

#if defined(ZDO_COORDINATOR)

nwkStatus = (byte)Status;

if ( Status == ZSUCCESS )

{

// LED on shows Coordinator started

HalLedSet ( HAL_LED_3, HAL_LED_MODE_ON );

// LED off forgets HOLD_AUTO_START

HalLedSet (HAL_LED_4, HAL_LED_MODE_OFF);

#if defined ( ZBIT )

SIM_SetColor(0xd0ffd0);

#endif

if ( devState == DEV_HOLD )

{

// Began with HOLD_AUTO_START

devState = DEV_COORD_STARTING;

}

}

#if defined(BLINK_LEDS)

else

HalLedSet ( HAL_LED_3, HAL_LED_MODE_FLASH ); // Flash LED to show failure

#endif

osal_set_event( ZDAppTaskID, ZDO_NETWORK_START );

#endif //ZDO_COORDINATOR

}

****************

如果Status返回ZSUCCESS,建立网络成功,通过一些灯亮来来指示;不成功则通过闪烁灯来指示.最后触发任务ZDAppTaskID的ZDO_NETWORK_START事件,看下对ZDO_NETWORK_START的处理:

****************

#if defined (RTR_NWK)

if ( events & ZDO_NETWORK_START )

{

ZDApp_NetworkStartEvt();

// Return unprocessed events

return (events ^ ZDO_NETWORK_START);

}

****************

调用了ZDApp_NetworkStartEvt()

****************

void ZDApp_NetworkStartEvt( void )

{

if ( nwkStatus == ZSuccess )//网络建立成功

{

// Successfully started a ZigBee network

if ( devState == DEV_COORD_STARTING )

{

devState = DEV_ZB_COORD;

}

osal_pwrmgr_device( PWRMGR_ALWAYS_ON );

osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );

}

else //网络建立不成功,则增加能量阀值重新建网.

{

// Try again with a higher energy threshold !!

if ( ( NLME_GetEnergyThreshold() + ENERGY_SCAN_INCREMENT ) < 0xff )

{

NLME_SetEnergyThreshold( (uint8)(NLME_GetEnergyThreshold() + ENERGY_SCAN_INCREMENT) );

osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT ); //重新初始化建立网络

}

else

{

// Failed to start network. Enter a dormant state (until user intervenes)

devState = DEV_INIT;

osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );

}

}

}

****************

如果协调器建立网络成功,则触发ZDAppTaskID的ZDO_STATE_CHANGE_EVT事件.看下对ZDO_STATE_CHANGE_EVT的处理:

****************

if ( events & ZDO_STATE_CHANGE_EVT )

{

ZDO_UpdateNwkStatus( devState );

// Return unprocessed events

return (events ^ ZDO_STATE_CHANGE_EVT);

}

****************

调用了ZDO_UpdateNwkStatus( devState ),网络状态改变,这个函数会更新和发送信息通知每个注册登记过的应用终端.

****************

void ZDO_UpdateNwkStatus( devStates_t state )

{

// Endpoint/Interface descriptor list.

epList_t *epDesc = epList;

byte bufLen = sizeof(osal_event_hdr_t);

osal_event_hdr_t *msgPtr;

ZDAppNwkAddr.addr.shortAddr = NLME_GetShortAddr();

(void)NLME_GetExtAddr(); // Load the saveExtAddr pointer.

while ( epDesc )

{

if ( epDesc->epDesc->endPoint != ZDO_EP )

{

msgPtr = (osal_event_hdr_t *)osal_msg_allocate( bufLen );

if ( msgPtr )

{

msgPtr->event = ZDO_STATE_CHANGE; // Command ID

msgPtr->status = (byte)state;

osal_msg_send( *(epDesc->epDesc->task_id), (byte *)msgPtr ); //发往应用任务

}

}

epDesc = epDesc->nextDesc;

}

}

****************

对SampleApp的协调器来说,这里触发应用任务SampleApp_TaskID的ZDO_STATE_CHANGE事件,看下对ZDO_STATE_CHANGE的处理:

****************

case ZDO_STATE_CHANGE:

SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status); //获取设备当前状态

if ( (SampleApp_NwkState == DEV_ZB_COORD)

|| (SampleApp_NwkState == DEV_ROUTER)

|| (SampleApp_NwkState == DEV_END_DEVICE) )

{

// Start sending the periodic message in a regular interval.

osal_start_timerEx( SampleApp_TaskID,

SAMPLEAPP_SEND_PERIODIC_MSG_EVT,

SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );

}

else

{

// Device is no longer in the network

}

break;

****************

可以看到当协调器建立网络成功,通过回调函数触发应用任务的ZDO_STATE_CHANGE事件,最终开启定时器发送周期信息.

3、

协调器(自启动模式)—以SampleApp的协调器为例,并假设初始化成功,网络建立成功.

程序大致流程:

main()->osal_init_system()->osalInitTasks()->ZDApp_Init()->ZDOInitDevice()->ZDApp_NetworkInit->触发ZDAppTaskID的ZDO_NETWORK_INIT->ZDO_StartDevice()->NLME_NetworkFormationRequest()->网络建立成功ZDO_NetworkFormationConfirmCB->触发ZDAppTaskID的ZDO_NETWORK_START->ZDApp_NetworkStartEvt()->触发ZDAppTaskID的ZDO_STATE_CHANGE_EVT->ZDO_UpdateNwkStatus()->触发SampleApp_TaskID的ZDO_STATE_CHANGE->开户周期信息发送的定时器.

4、注:

(1)自启动模式下SampleApp的终端和路由器总体流程基本一致.

(2)

以SampleApp为例,ZDO_StartDevice()函数的两个重要参数比较:

终端:

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_DEVICE

devStartMode = MODE_JOIN

路由器:

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_ROUTER

devStartMode = MODE_JOIN

协调器:

ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_COORDINATOR

devStartMode = MODE_HARD

DRF系列ZigBee模块数据传输指南

DRF 系列 Zigbee 模块数据传输指南 (DRF1601,DRF1602,DRF1605,DRF2617-ZR232,DRF2618-ZUSB , DRF2619-ZR485,DRF1605-USB ,DRF1605-RS485) 一,怎样使用配置软件 配置软件是用来设定及读取模块的基本参数; 模块可设置4个参数:PAN ID 、波特率、节点类型、无线频道; (1),PAN ID : 同一个网络内的每个节点具有相同的PAN ID ,不同的网络之间PAN ID 是不同的,在同一空间,二个不同PAN ID 的网络是不会相互影响的; 软件连接后,这里会显示连接的波特率,这个也是模块的波特率 点击Connect ,软件会自动连接模块

对于Coordinator: ●设定新的PAN ID,重启,则马上读取为新的PAN ID; ●设定新的PAN ID后,则以前储存在Coordinator内的网络信息会全部清空,重启后,Coordinator 会重新创建一个网络; ●对于一个已经存在的网络,重新设定Coordinator的PAN ID为同样的值,重启,此时,Coordinator 里的网络值会被全部清空,由于以前的网络仍然存在,此时的Coordinator的PAN ID会自动加 1,避免PAN ID冲突; 对于Router: ●设定新的PAN ID,重启,如果读取为FF FE,表示Router还没有加入网络; ●设定新的PAN ID,重启,如果读取为新的PAN ID,表示Router已经加入网络; ●设定新的PAN ID为FF FF,重启,Router会自动寻找网络并加入; ●设定新的PAN ID为FF FF,重启,Router会自动寻找网络并加入,在没有加入网络之前,读 取的值为FF FE; (2),波特率: 与模块直接连接的设备的硬件波特率,同一个网络内,多个Zigbee模块与多个设备连接,并不需要全网具有同样的波特率,只要模块与设备之间具有相同的波特率即可;

Zigbee协议栈原理基础

1Zigbee协议栈相关概念 1.1近距离通信技术比较: 近距离无线通信技术有wifi、蓝牙、红外、zigbee,在无线传感网络中需求的网络通信恰是近距离需求的,故,四者均可用做无线传感网络的通信技术。而,其中(1)红外(infrared):能够包含的信息过少;频率低波衍射性不好只能视距通信;要求位置固定;点对点传输无法组网。(2)蓝牙(bluetooth):可移动,手机支持;通信距离10m;芯片价格贵;高功耗(3)wifi:高带宽;覆盖半径100m;高功耗;不能自组网;(4)zigbee:价格便宜;低功耗;自组网规模大。?????WSN中zigbee通信技术是最佳方案,但它连接公网需要有专门的网关转换→进一步学习stm32。 1.2协议栈 协议栈是网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。 1.2.1Zigbee协议规范与zigbee协议栈 Zigbee各层协议中物理层(phy)、介质控制层(mac)规范由IEEE802.15.4规定,网络层(NWK)、应用层(apl)规范由zigbee联盟推出。Zigbee联盟推出的整套zigbee规范:2005年第一版ZigBeeSpecificationV1.0,zigbee2006,zigbee2007、zigbeepro zigbee协议栈:很多公司都有自主研发的协议栈,如TI公司的:RemoTI,Z-Stack,SimpliciTI、freakz、msstatePAN 等。 1.2.2z-stack协议栈与zigbee协议栈 z-stack协议栈与zigbee协议栈的关系:z-stack是zigbee协议栈的一种具体实现,或者说是TI公司读懂了zigbee 协议栈,自己用C语言编写了一个软件—---z-stack,是由全球几千名工程师共同开发的。ZStack-CC2530-2.3.1-1.4.0软件可与TI的SmartRF05平台协同工作,该平台包括MSP430超低功耗微控制器(MCU)、CC2520RF收发器以及CC2591距离扩展器,通信连接距离可达数公里。 Z-Stack中的很多关键的代码是以库文件的形式给出来,也就是我们只能用它们,而看不到它们的具体的实现。其中核心部分的代码都是编译好的,以库文件的形式给出的,比如安全模块,路由模块,和Mesh自组网模块。与z-stack 相比msstatePAN、freakz协议栈都是全部真正的开源的,它们的所有源代码我们都可以看到。但是由于它们没有大的商业公司的支持,开发升级方面,性能方面和z-stack相比差距很大,并没有实现商业应用,只是作为学术研究而已。 还可以配备TI的一个标准兼容或专有的网络协议栈(RemoTI,Z-Stack,或SimpliciTI)来简化开发,当网络节点要求不多在30个以内,通信距离500m-1000m时用simpliciti。 1.2.3IEEE802.15.4标准概述 IEEE802.15.4是一个低速率无线个人局域网(LowRateWirelessPersonalAreaNetworks,LR-WPAN)标准。定义了物理层(PHY)和介质访问控制层(MAC)。 LR-WPAN网络具有如下特点: ◆实现250kb/s,40kb/s,20kb/s三种传输速率。 ◆支持星型或者点对点两种网络拓扑结构。 ◆具有16位短地址或者64位扩展地址。 ◆支持冲突避免载波多路侦听技术(carriersensemultipleaccesswithcollisionavoidance,CSMA/CA)。(mac层) ◆用于可靠传输的全应答协议。(RTS-CTS) ◆低功耗。 ◆能量检测(EnergyDetection,ED)。 ◆链路质量指示(LinkQualityIndication,LQI)。 ◆在2.45GHz频带内定义了16个通道;在915MHz频带内定义了10个通道;在868MHz频带内定义了1个通道。 为了使供应商能够提供最低可能功耗的设备,IEEE(InstituteofElectricalandElectronicsEngineers,电气及电子工程师学会)定义了两种不同类型的设备:一种是完整功能设备(full.functionaldevice,FFD),另一种是简化功能设备

zigbee学习笔记讲解

关于ZIGBEE技术 Zigbee的由来 在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷。对工业,家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,而工业自动化对无线通信的需求越来越强烈。正因此,经过人们长期努力,Zigbee协议在2003年中通过后,于2004正式问世了。 Zigbee是什么 Zigbee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,十分类似现有的移动通信的CDMA网或GSM网,每一个Zigbee网络数传模块类似移动网络的一个基站,在整个网络范围内,它们之间可以进行相互通信;每个网络节点间的距离可以从标准的75米,到扩展后的几百米,甚至几公里;另外整个Zigbee网络还可以与现有的其它的各种网络连接。例如,你可以通过互联网在北京监控云南某地的一个Zigbee控制网络。 不同的是,Zigbee网络主要是为自动化控制数据传输而建立,而移动通信网主要是为语音通信而建立;每个移动基站价值一般都在百万元人民币以上,而每个Zigbee―基站‖却不到1000元人民币;每个Zigbee 网络节点不仅本身可以与监控对对象,例如传感器连接直接进行数据采集和监控,它还可以自动中转别的网络节点传过来的数据资料; 除此之外,每一个Zigbee网络节点(FFD)还可在自己信号覆盖的范围内,和多个不承担网络信息中转任务的孤立的子节点(RFD)无线连接。 每个Zigbee网络节点(FFD和RFD)可以可支持多到31个的传感器和受控设备,每一个传感器和受控设备终可以有8种不同的接口方式。可以采集和传输数字量和模拟量。 Zigbee技术的应用领域 Zigbee技术的目标就是针对工业,家庭自动化,遥测遥控,汽车自动化、农业自动化和医疗护理等,例如灯光自动化控制,传感器的无线数据采集和监控,油田,电力,矿山和物流管理等应用领域。另外它还可以对局部区域内移动目标例如城市中的车辆进行定位. 通常,符合如下条件之一的应用,就可以考虑采用Zigbee技术做无线传输:1.需要数据采集或监控的网点多; 2.要求传输的数据量不大,而要求设备成本低; 3.要求数据传输可性高,安全性高; 4.设备体积很小,不便放置较大的充电电池或者电源模块; 5.电池供电; 6.地形复杂,监测点多,需要较大的网络覆盖; 7.现有移动网络的覆盖盲区; 8.使用现存移动网络进行低数据量传输的遥测遥控系统。 9.使用GPS效果差,或成本太高的局部区域移动目标的定位应用。 Zigbee 技术的特点 省电:两节五号电池支持长达6个月到2年左右的使用时间。 可靠:采用了碰撞避免机制,同时为需要固定带宽的通信业务预留了专用

基于CC2530的ZigBee协调器节点设计

基于CC2530的ZigBee协调器节点设计 随着我国物联网正进入发展的快车道,ZigBee也正逐步被国内越来越多的用户接受。ZigBee技术也已在部分智能传感器场景中进行了应用。如在北京地铁9号线隧道施工过程中的考勤定位系统便采用的是ZigBee,ZigBee取代传统的RFID考勤系统实现了无漏读、方向判断准确、定位轨迹准确和可查询,提 高了隧道安全施工的管理水平;在某些高档的老年公寓中,基于ZigBee网络的 无线定位技术可在疗养院或老年社区内实现全区实时定位及求助功能。由于每 个老人都随身携一个移动报警器,遇到险情时,可以及时的按下求助按钮不但 使老人在户外活动时的安全监控及救援问题得到解决,而且,使用简单方便, 可靠性高。本文介绍基于CC2530的ZigBee协调器节点设计。 节点硬件总体设计 ZigBee无线通信网络主要由协调器、路由器及终端设备3种节点组成。在网络建立之初,每个网络有且仅有一个协调器节点,主要负责网络的发起、参数 的设定、信息的管理及维护功能,也可用来协助建立安全层和应用层的绑定。 鉴于协调器节点的硬件及软件设计最为复杂,本文主要介绍协调器节点的设计 方法。协调器节点主要由处理器模块、RF前端、电源管理模块及各外部接口 等组成,也可根据需要增加传感器及GSM/GPRS等模块。 各功能模块介绍 1)处理器模块 处理器模块采用CC2530作为主控芯片[5]。CC2530是一个兼容 IEEE802.15.4的、真正的片上系统,支持专有的IEEE802.15.4以及 ZigBee、ZigBeePRO和ZigBeeRF4CE标准。CC2530集成了2.4GHz的射频收发器、增强型工业标准的8051MCU、最大256KB可编程FLASH、8KB的

ZigBee技术发展及其特点

第2章 ZigBee技术及协议分析 ZigBee技术的发展及其特点]1[ 长期以来,低成本、短距离、低传输率、低功率的无线通讯市场一直存在着。蓝牙(Bluetooth)技术的出现曾让玩具制造商、家庭自动化控制以及工业控制等业界从业者兴奋不已,尽管蓝牙技术有很多优点,但是高昂的价格和其存在的技术缺陷严重影响了这些厂商的使用意愿。对于工业控制、家庭自动化控制等领域而言,蓝牙技术过于复杂、功耗过大、距离近、组网规模达不到应用要求等,而工业自动化等领域对无线通信的需求越来越大。因此,经过人们的努力,于2004年正式推出了ZigBee协议规范。 “HomeRF Lite” 2004年(又称ZigBee2004)诞生,它是ZigBee的第一个规范,这使得ZigBee有了自己的发展基本标准。但是由于推出仓促存在很多不完善的地方,因此在2006年进行了标准的修订,推出了(又称ZigBee2006),但是该协议与是不兼容的。相较于做了很多修改,但是仍无法达到最初的设想,于是在2007年再次修订(称为ZigBee2007/PRO),能够兼容之前的ZigBee2006,并且加入了ZigBee PRO部分,此时ZigBee联盟更专注于以下三种应用类型的拓展:家庭自动化(HA)、建筑/商业大楼自动化(BA)以及先进抄表基础建设(AMI)。 随着ZigBee标准的完善以及各软件以及硬件厂商的不断努力,用于ZigBee开发的软硬件正趋于完善,ZigBee技术的实用化不断推进,其使用领域不断拓展。使ZigBee 技术在2004年就被列为当今世界发展最快、市场前景最广阔的十大高新技术之一。 ZigBee技术有以下几个方面的特点: (1)短时延。通信时延以及休眠状态激活时延都很短,通常在15ms至30ms间。 (2)高可靠性。采用了CSMA/CA(碰撞避免)机制,而且为需要固定带宽的通信业务预留了专用的时隙,从而避免了发送数据时可能出现的竞争和冲突;节点模块间有自动动态组网功能,信息在整个ZigBee网络中是通过自动路由方式传输的,这样可以保证信息的可靠传输。 (3)低数据率。数据传输率在10kb/s到250kb/s之间。 (4)低功耗。两节五号电池即可使用6个月至2年,免去了经常更换电池或者是充电的麻烦。 (5)低成本。ZigBee的低数据传输率,简单的协议,都大大降低了成本,而且ZigBee

zigbee模块的配置说明5-20

现场zigbee模块配置说明 陕西星际电子科技发展有限公司 2014.3.9

1 测试设备 1.1 井口RTU 1.2 无线通信模块 长庆数字规范中规定无线通信模块是美国DIGI 公司的Xbee 模块与深圳华奥通的Zigbee 模块。 表格 1 测试无线通信模块 2 现场设备连接方式与无线配置 主RTU 上位机 井口RTU 井口RTU 井口RTU …… 以太网 Zigbee Zigbee Zigbee Zigbee 图 2-1 井场设备连接方式 2.1 数据链路工作方式 表 2-1 各厂家数据链路工作方式

北京安控的使用方式与其它各家不一样,北京安控RTU与XBEE模块之间采用AT指令集,使用这种方式时,族ID与Zigbee规范ID规定为0x0011和0xC105,而非0x0011和0x1857。 2.2Zigbee配置 协调器配置 API方式: 1、工作模式(Function Set):ZIGBEE COORDINATOR API; 2、PAN ID:中国石油定义协议器的值,如指定油气田公司、工程代码,规定见A11标准附录C; 3、SC-Scan Channels:设定为7FFF,由于现场使用不同家的模块,Xbee Pro模块的为FFFF,Xbee Pro S2模块为7FFF,Xbee Pro S2B模块为3FFF,为了统一设定为3FFF; 4、其他参数默认; 5、配置完后读取并记录IO-Operationg 16-bit PAN ID,如90B9:

图2-2协调器配置API方式 路由配置 API方式(使用0x91,0x11指令): 1、工作模式(Function Set):ZIGBEE ROUTER API; 2、PAN ID:中国石油定义协议器的值,如指定油气田公司、工程代码,规定见A11标准附录C, 与同一井场协调器PAN ID保持一致; 3、SC-Scan Channels:设定为7FFF,由于现场使用不同家的模块,Xbee Pro模块的为FFFF,Xbee Pro S2模块为7FFF,Xbee Pro S2B模块为3FFF,为了统一设定为3FFF,且与同一井场协调器SC 参数保持一致; 4、API Output Mode:设定为1,在串口(Serial Interfacing)参数选项中; 5、其他参数默认; 6、配置完后读取IO-Operationg 16-bit PAN ID,确保与协调器的一致,如90B9;

ZigBee协调器技术及系统方案设计--毕业论文

目录 中文摘要......................................... 错误!未定义书签。英文摘要......................................... 错误!未定义书签。 1 绪论 (1) 1.1题目研究背景与意义 (1) 1.2国内外研究现状 (1) 1.3 ZigBee无线网络的研究前景 (2) 1.4 论文的组织结构 (3) 2 相关技术及系统方案设计 (4) 2.1 ZigBee技术 (4) 2.1.1 ZigBee无线网络设备组成 (5) 2.1.2 ZigBee无线网络拓扑结构 (5) 2.2 系统方案设计 (6) 2.2.1 系统方案设计框图 (6) 2.2.2 各模块功能介绍 (7) 3 硬件电路设计 (8) 3.1 硬件电路设计简介 (8) 3.2 处理器模块 (9) 3.2.1 处理器CC2530简介 (9) 3.2.2 芯片功能介绍 (9) 3.3协调器硬件单元电路原理图设计 (10) 3.3.1 CC2530支撑电路原理图设计 (10) 3.3.2 RS232串口通信电路原理图设计 (12) 3.3.3 电源电路设计 (12) 3.3.4 JTAG接口电路设计 (15) 3.3.5 人机交互接口电路设计 (14) 4 IAR开发环境介绍 (15)

4.1 IAR的安装及简介 (15) 4.2 ZigBee 2007 协议栈安装 (17) 4.3 IAR使用介绍: (19) 5 ZigBee无线网络协调器软件设计 (21) 5.1 Z-stack软件架构分析 (21) 5.1.1 Z-stack协议栈的几个重要概念 (21) 5.1.2 Z-stack协议栈分析 (22) 5.1.3 OSAL操作系统 (22) 5.2协调器软件设计 (23) 5.2.1 总体流程设计及代码 (24) 5.2.2 协调器新建网络流程图及代码 (26) 5.2.3绑定与接收 (29) 5.2.4 协调器向串口发送数据 (31) 6 调试 (36) 6.1 软硬件调试方法 (36) 6.2 调试中遇到的问题 (36) 7 总结 (38) 7.1 设计总结 (38) 7.3 设计不足和改善 (38) 参考文献 (39) 致谢 (40)

zigbee网络建立过程简介

星形网络和树型网络可以看成是网状网络的一个特殊子集,所以接下来分析如何组建一个Zigbee网状网络。组建一个完整的Zigbee网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络。加入网络又有两种方法,一种是子设备通过使用MAC层的连接进程加入网络,另一种是子设备通过与一个先前指定的父设备直接加入网络。 一、协调器初始化网络 协调器建立一个新网络的流程如图1所示。 图1 协调器建立一个新网络 1、检测协调器 建立一个新的网络是通过原语发起的,但发起原语的节点必须具备两个条件,一是这个节点具有ZigBee协调器功能,二是这个节点没有加入到其它网络中。任何不满足这两个条件的节点发起建立一个新网络的进程都会被网络层管理实体终止,网络层管理实体将通过参数值为INVALID_REQUEST的的原语来通知上层这是一个非法请求。 2、信道扫描

协调器发起建立一个新网络的进程后,网络层管理实体将请求MAC子层对信道进行扫描。信道扫描包括能量扫描和主动扫描两个过程。首先对用户指定的信道或物理层所有默认的信道进行一个能量扫描,以排除干扰。网络层管理实体将根据信道能量测量值对信道进行一个递增排序,并且抛弃能量值超过了可允许能量值的信道,保留可允许能量值内的信道等待进一步处理。接着在可允许能量值内的信道执行主动扫描,网络层管理实体通过审查返回的PAN描述符列表,确定一个用于建立新网络的信道,该信道中现有的网络数目是最少的,网络层管理实体将优先选择没有网络的信道。如果没有扫描到一个合适的信道,进程将被终止,网络层管理实体通过参数仠为STARTUP_FAILURE的的原语来通知上层初始化启动网络失败。 3、配置网络参数 如果扫描到一个合适的信道,网络层管理实体将为新网络选择一个PAN描述符,该PAN描述符可以是由设备随机选择的,也可以是在里指定的,但必须满足PAN描述符小于或等于0x3fff,不等于0xffff,并且在所选信道内是唯一的PAN描述符,没有任何其它PAN描述符与之是重复的。如果没有符合条件的PAN描述符可选择,进程将被终止,网络层管理实体通过参数值为STARTUP_FAILURE的的原语来通知上层初始化启动网络失败。确定好PAN描述符后,网络层管理实体为协调器选择16位网络地址0x0000,MAC子层的macPANID参数将被设置为PAN描述符的值,macShortAddress PIB参数设置为协调器的网络地址。 4、运行新网络 网络参数配置好后,网络层管理实体通过原语通知MAC层启动并运行新网络,启动状态通过原语通知网络层,网络层管理实体再通过原语通知上层协调器初始化的状态。 5、允许设备加入网络 只有ZigBee协调器或路由器才能通过原语来设置节点处于允许设备加入网络的状态。当发起这个进程时,如果PermitDuration参数值为0x00,网络层管理实体将通过原语把MAC层的 macAssociationPermit PIB属性设置为FALSE,禁止节点处于允许设备加入网络的状态;如果 PermitDuration参数值介于0x01和0xfe之间,网络层管理实体将通过原语把macAssociationPermit PIB属性设置为TRUE,并开启一个定时器,定时时间为PermitDuration,在这段时间内节点处于允许设备加入网络的状态,定时时间结束,网络层管理实体把MAC层的macAssociationPermit PIB属性设置为FALSE;如果PermitDuration参数的值为0xff,网络层管理实体将通过原语把

zigbee应用分析

初始化 因为Z-Stack是在OS下运行的,所以在之前必须调用osalAddTasks()初始化任务。 组织 关于OS的API函数介绍请看文档:Z-Stack OSAL API (F8W-2003-0002),应该说协议栈的每层或者说每部分都有相关的API说明文档。osalAddTasks()初始化任务, osalTaskAdd()函数添加任务,都可 以到API文档或程序中详细分析函数功能。 系统服务 OSAL和APL系统服务是唯一的,因为比如按键和串口类似事件处罚就只能用唯一的一个任务标识。 这两个硬件都留给了用户自己定义使用。 应用设计 用户可能为每一个应用对象都创建一个任务,或者为所有的应用对象只创建一个任务。当选择上述 的设计的时候,下面是一些设计思路: 为许多应用对象创建一个OSAL任务 下面是正面和反面(pros & cons)的一些叙述: - Pro:接受一个互斥任务事件(开关按下或串口)时,动作是单一的。 - Pro:需要堆栈空间保存一些OSAL任务结构。 - Con:接收一个AF信息或一个AF数据确认时,动作是复杂的-----在一个用户任务上,分支多路处 理应用对象的信息事件。 - Con:通过匹配描述符(如:自动匹配)去发现服务的处理过程更复杂-----为了适当的对ZDO_NEW_DSTADDR信息起作用,一个静态标志必须被维持。 为一个应用对象创建一个OSAL任务 :一对一设计的反面和正面(pros & cons)是与上面一对多设计相反的: - Pro:在应用对象试图自动匹配时,仅仅一个ZDO_NEW_DSTADDR被接收。 - Pro:已经被协议栈下层多元处理后的一个AF输入信息或一个AF数据确认。 - Con:需要堆栈空间保存一些OSAL任务结构。 - Con:如果两个或更多应用对象用同一个唯一的资源,接收一个互斥任务事件的动作就更复杂。 强制方法 任何一个OSAL任务必须用两种方法执行:一个是初始化,另一个是处理任务事件。 任务初始化 在例子中调用如下函数执行任务初始化: ―Application Name‖_Init(如SAPI_Init)。该任务初始化函数应该完成如下功能: 变量或相应应用对象特征初始化,为了使OSAL内存管理更有效,在这里应该分配永久堆栈存储区。

JYB-G ZIGBEE无线压力变送器使用说明书

一.产品特点简介 JYB-G ZigBee 无线压力变送器是一款电池供电, 具有 无线通讯功能的高精度压力变送器。 ·段式液晶显示现场数据; ·电池供电,无需现场布线方便使用; ·超低功耗设计,延长电池使用寿命; ·ZigBee 无线通讯协议,抗干扰和组网能力强; ·金属外壳,全密封设计,保证全天候无忧作业。 二.主要用途 本产品主要应用领域是针对野外或配套供电环境不便 的场合,如输油、输汽、供暖等输送能源管道等场合进行压 力监测,无线通讯采用 2.4G ZigBee 通讯协议,抗干扰能力 强,16 物理信道可选,65535个网络 ID 可设,组网能力强。 三.技术说明 主要参数: 1、输出形式:无线通讯 2、供电电池:能量型 C/ER26500/3.6V/8.5Ah 锂电池 3、量程范围:0~35MPa(可定制最大量程 60MPa) 4、准确度:±0.25%F·S(满量程在 70kPa ~5MPa 内) ±0.5%F·S(满量程在 5kPa ~70kPa 内) ±0.5%F·S(满量程在 5MPa ~35MPa 内) 5、介质温度:-30℃~85℃ 6、环境温度:-30℃~45℃ 7、功 耗:通讯瞬间峰值电流≤160mA 休眠电流≤3uA 8、视窗尺寸:58mm×32mm 9、通信频段:2.4 GHz (2.4 GHz~2.485 GHz) 10、传输距离:≥800m(空旷环境) 11、过程连接:M20×1.5 螺纹 12、过载压力:2 倍量程 13、测量介质:油、水、气体等与316 不锈钢兼容介质 14、产品重量:约 1200 g 工作条件: 变送器避免安装在机械振动和较强电磁干扰的环境下。 变送器外形: 变送器尺寸: 四.试运行 变送器电池断电:将后盖打开,无需拿掉电池,只需 将变送器电路板背面的两个跳线帽如图连接。 图 1 跳线帽SW1、SW2 横插为电池断开, 图 2 跳线帽SW1、SW2 纵插为电池接通。 图 1 图 2 工作模式说明: 无线开关: 为节省电池电能,产品出厂时默认无线模块为关闭状 态,产品首次现场调试前应打开无线模块,在不打开 产品后盖的情况下可用磁钢在产品右侧标有磁铁符号 的位置停留 2 秒以上,即可打开无线模块,屏幕提示 “ON ” ,代表无线模块已打开,若再次重复操作,屏 幕提示“OFF ” ,代表模块已关闭;如果打开产品后盖 用有线手操器设置,长按手操器的增加键 2 秒以上, 也可打开无线模块。无线关闭状态下,产品只采集压 力数据并显示,不发送数据;无线打开状态下,产品 采集压力数据并无线发送数据。 无线通讯: 本产品需要与本公司生产的 KL-N4600、KL-W6600 、 这里面http://www.0523yh.com/浏览并寻求帮助

ZIGBEE协调器启动

【转自小峰博客】协调器的启动【自动模式】 使用的协议栈版本信息: ZigBee2006\ZStack-1.4.3-1.2.1 Zigbee网络设备启动流程—协调器(自启动模式)—以SampleApp的协调器为例. 1、协调器预编译信息 通过project->options->c/c++compiler->extraOptions可以看到协调器所带的配置文件为:-f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wCoord.cfg -f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wConfig.cfg 即编译了ZDO_COORDINATOR和RTR_NWK. 通过project->options->c/c++compiler->Preprocessor->Defined symbols可以看到协调器预编译包含了: CC2430EB; ZTOOL_P1; MT_TASK; LCD_SUPPORTED=DEBUG; MANAGED_SCAN 没有编译HOLD_AUTO_START和SOFT_START. 2、具体流程 main()->osal_init_system()->osalInitTasks()->ZDApp_Init() 进入ZDApp_Init()函数: ************************************** void ZDApp_Init( byte task_id ) { uint8 capabilities; // Save the task ID ZDAppTaskID = task_id; // Initialize the ZDO global device short address storage

Zigbee市场分析

WiFi入侵无线传感网络,完胜Zigbee? Wi-Fi正在吹响全面取代其他无线通信协议的战斗号角,而Intel无疑则是这场战役的大后方。2006年9月从Intel分拆出来的初创公司GainSpan声称,他们已经拥有了在无线传感器网络(WSN)领域战胜Zigbee的技术方案。GainSpan总裁兼首席执行官Vijay Parmar不久前在上海接受采访时表示,采用这家公司的WSN解决方案,不仅能够享受到成熟的Wi-Fi技术带来的各种好处,还能确保在单节AA电池下维持长达5~10年的电池寿命。 Parmar此行的中国之行除了拜访已有的客户,还包括首次在中国大陆举行的小型记者见面会,意在为其已经拉开帷幕的中国业务造势。据介绍,这款在台积电采用0.18微米工艺制造的SoC芯片采用ARM7内核,可以支持IEEE 802.11b/g,并提供了802.11i、AES编码、EAP-FAST三种方式来保证数据和信息安全。另外,根据信号强弱与到达时间(TDOA)大小,还能够提供精确的定位功能。芯片外形尺寸为10mmx10mm。目前,该公司正在积极构建同大学和政府机构的合作关系,并已经同Metatech签署了分销协议。Parmar表示,他计划利用6个月时间在中国大陆建立代表处,北京、上海、深圳将是候选城市。“未来几个月内,我们将致力于提升公司在中国市场的认知度。” Intel不仅是GainSpan的孕育者,还先后在两轮融资中给了这家新兴公司巨大的财力支持。2006年9月,由于同母公司的主营业务相关度并不是非常大,当时尚属Intel新业务规划小组的一个WSN 技术开发团队被决定从Intel拆分出来,成立名为GainSpan的初创公司,专注于将Wi-Fi技术应用于工业领域的WSN网络。Intel Capital、New V enture Partners LLC、OVP Venture Partners、Sigma Partners 等四家投资公司为其提供了总额150万美金的启动资金。 2007年11月,Intel再次联合其他三家公司、并将设在加州Menlo Park市的另外一家风险投资公司Opus Capital拉了进来,对GainSpan进行了第二轮投资。此轮投资金额一跃提高到了2000万美金。 将Wi-Fi用于WSN网络,确实是个不错的主意。因为它能够享受到正在被大规模部署的Wi-Fi 网络所带来的成熟的技术、各种层出不穷的Wi-Fi设备、既有的网络设施、架构支持、丰富的网络知识,另外还有快速安装和减少了学习周期和与其他协议互操作而带来的各种麻烦,加快开发周期。 然而,将Wi-Fi用于WSN却又不是一件容易的事情。因为在这种应用中,最先需要解决的就是功耗问题——幸运的是,GainSpan已经将其轻松搞定。虽然没有透露更多的技术细节,但是Parmar 表示,有效的激活/待机状态转换以及系统的电源管理是完成这一指标的关键所在。“我们的方案可以实现一节AA电池工作5~10年的寿命,我们是唯一能够做到这一点的公司。”Parmar的自豪溢于言表。 在2006年带队成立GainSpan之前,Parmar曾在Intel公司工作4年左右。稍早的工作经历是在VxTel(一家VoIP解决方案供应商)担任市场部副总裁,后者与2001年被Intel收购。而更早些时候,他供职于AMD公司,曾经担任AMD亚太地区微处理器方面的区域市场总经理一职。这令他对中国市场相当熟悉。

zigbee模块使用手册

2.4G无线模块WLT2408NZ 产品数据手册编号:DSWLT01003 更新日期:2012/04/26 版本:V1.03 产品概述 WLT2408NZ模块是广州晓网电子出品的WLT系列ZigBee数据传输模块,具备最大8dBm 输出功率,视距传输距离可达500米(@5dbi天线),工作频段2.380GHz~2.500Ghz,除标准ZigBee的16个通道外,还有9个扩展频段,可以有效避开WIFI、蓝牙等其他2.4G信号干扰。 广州晓网电子为WLT2408NZ用户提供mesh对等无线路由协议,无组网延时,采用时间空间权值均衡原则,路由时间短,通讯稳定可靠。 基本参数产品图片 输出功率: 供电电压: 天线接口: 数字接口: 视距传输距离:功耗: 休眠电流 工作温度: 存储温度: 尺寸:-50~+8dBm 1.9~3.3V SMA,U.FL UART,GPIO,AD 500米@5dbi天线 发送峰值电流46.3mA,接收时36.4mA <1uA -40℃至+85℃ -40℃至+105℃ 16×23mm 公司简介 广州晓网电子科技有限公司是一家专门从事无线通讯方案设计、生产及服务的公司,公司拥有一流的设计团队,运用先进的工作方法,集合无线设计经验,公司拥有业界实用的各种模块,也为客户提供客制化服务。 订货信息 WLT2408NZ-S SMA形式天线接头 WLT2408NZ-U U.FL形式天线接头 WLT2408NZ SDK 无线模块评估板套件,包含两个评估板,搭载的模块为 WLT2408NZ-S。 数据手册

版权声明 本文档提供有关晓网电子产品的信息,并未授予任何知识产权的许可,并未以明示或暗示,或以禁止发言或其它方式授予任何知识产权许可,任何单位和个人未经版权所有者授权不得在任何形式的出版物中摘抄本手册内容。 产品命名规则 图1-1 产品命名规则 例如:WLT2408NZ-S表示晓网电子模块类的产品,频段为2.4GHz,理论输出功率为﹢8dBm(实际输出为﹢7.7dBm),超小封装,调制方式为ZigBee,外置SMA头的模块。

Zigbee网络设备启动流程—协调器(自启动模式)

使用的协议栈版本信息: ZigBee2006\ZStack-1.4.3-1.2.1 Zigbee网络设备启动流程—协调器(自启动模式)—以SampleApp的协调器为例. 1、协调器预编译信息 通过project->options->c/c++compiler->extraOptions可以看到协调器所带的配置文件为: -f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wCoord.cfg -f $PROJ_DIR$\..\..\..\Tools\CC2430DB\f8wConfig.cfg 即编译了ZDO_COORDINATOR和RTR_NWK. 通过project->options->c/c++compiler->reprocessor->Defined symbols可以看到协调器预编译包含了: CC2430EB; ZTOOL_P1; MT_TASK; LCD_SUPPORTED=DEBUG; MANAGED_SCAN 没有编译HOLD_AUTO_START和SOFT_START. 2、具体流程 main()->osal_init_system()->osalInitTasks()->ZDApp_Init() 进入ZDApp_Init()函数: ************************************** void ZDApp_Init( byte task_id ) { uint8 capabilities; // Save the task ID ZDAppTaskID = task_id; // Initialize the ZDO global device short address storage ZDAppNwkAddr.addrMode = Addr16Bit; ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR; //0xFFFE (void)NLME_GetExtAddr(); // Load the saveExtAddr pointer. // Check for manual"Hold Auto Start" //检测到有手工设置SW_1则会设置devState = DEV_HOLD,从而避开网络初始化 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 // set broadcast address mask to support broadcast filtering NLME_GetRequest(nwkCapabilityInfo, 0, &capabilities); NLME_SetBroadcastFilter( capabilities ); // Start the device? if ( devState != DEV_HOLD ) { ZDOInitDevice( 0 ); }

zigBee实验报告

ZIgBee学习心得 实验报告 项目名称基于无线传感器网络的采温实验专业班级软件1105 学号 姓名

目录 《计算机网络》............................................................................................. 错误!未定义书签。实验报告. (1) 一、实验目的 (3) 二、实验内容和报告简介 (3) 三、实验相关设备环境 (3) 四、实验内容 (7) 4.1.内容简介 (7) 4.2. 无线传感器网络采温系统实验 (7) 4.2.1实验简介 (7) 4.2.2 工程结构简介 (8) 4.2.3 设备功能及网络拓扑结构介绍 (10) 4.2.4 main()函数和OSAL (10) 4.2.5 设备相关功能主要函数介绍 (14) 4.3 ZigBee协议和ZStack分析 (26) 4.3.1 ZigBee协议和ZStack简介 (27) 4.3.2 OSAL原理分析和实现 (28) 4.3.3IEEE 802.15.规定的PHY层 (35) 4.3.4IEEE 802.15.规定的MAC层 (37) 4.3.5 ZigBee2007的网络层。 (40) 4.3.6 ZigBee2007的应用层 (45) 五、实验结果 (46) 六、实验结论 (47) 七、实验小结 (47) 7.1 短距离无线通信网络的现状和发展 (47) 7.2 ZigBee通信技术的应用 (48) 7.3 学习ZigBee开发的心得体会 (48) 7.4 下一步可能的学习计划 (49)

ZigBee协调器和上位机通信协议

ZigBee协调器和上位机通信协议通信方式:采用RS232串口通讯,8位数据位,1位停止位,没有校验位。低有效位先传送。波特率可采用38400bps,57600bps,115200bps。默认波特率为38400bps。 通信格式 内容 字节数 SOF: 一帧数开始的标志,其内容为0xFE,但不是每一个0xFE都是一帧数据的开始。 LEN:LEN的值为DATA的长度。 CMD:CMD的长度为2,包括CMD0、CMD1两个字节。 CMD0CMD1=‘w’‘r’表示写系统时间 CMD0CMD1=‘r’‘d’表示读系统时间 CMD0CMD1=‘c’‘w’表示查询节点网络状态 CMD0CMD1=‘c’‘d’表示查询节点的数据 ZigBee协调应答时需要将CMD0CMD1的最高有效位置高. DATA:为数据内容,因命令参数的不同数据内容是可变的。 CMD0CMD1=‘w’‘r’时DATA的内容为时间,格式为年月日时分秒。 年占两个字节值的范围为(2000-2136),

月日时分秒各占一个字节。 CMD0CMD1=‘r’‘d’时DATA的内容为时间,格式为年月日时分秒。 年占两个字节值的范围为(2000-2136), 月日时分秒各占一个字节。 CMD0CMD1=‘c’‘w’时DATA的内容为节点的短地址占两个字节。 应答时DATA的前两个字节为节点的地址,接下来为关联 节点数,子结点短地址,相互关系,链路质量等内容。 上图为2个关联节点的情况。 节点关系定义为: 链路质量占两个字节,第一个字节为发送时平均链路质 量,第二个为接收时平均链路质量。 CMD0CMD1=‘c’‘d’时DATA的内容为节点的短地址占两个字节。 应答时DATA的前两个字节为节点的地址,后两个字节为 请求的数据内容。 FCS: 异或校验字节,校验的内容为LEN到DATA的所有字节。 上位机软件的界面大致如下:

ZigBee协议栈初始化网络启动流程图

ZigBee协议栈初始化网络启动流程 ZigBee的基本流程:由协调器的组网(创建PAN ID),终端设备和路由设备发现网络以及加入网络。 基本流程:main()->osal_init_system()->osalInitTasks()->ZDApp_Init(),进协议栈初始化函数ZDApp_Init()。 1.1 进入程序入口main()。 ZMain.c中 C++ Code int main( void ) { // Turn off interrupts osal_int_disable( INTS_ALL ); // Initialization for board related stuff such as LEDs HAL_BOARD_INIT(); // Make sure supply voltage is high enough to run zmain_vdd_check(); // Initialize board I/O InitBoard( OB_COLD ); // Initialze HAL drivers HalDriverInit(); // Initialize NV System osal_nv_init( NULL ); // Initialize the MAC ZMacInit();

// Determine the extended address zmain_ext_addr(); // Initialize basic NV items zgInit(); #ifndef NONWK // Since the AF isn't a task, call it's initialization routine afInit(); #endif // Initialize the operating system osal_init_system(); // Allow interrupts osal_int_enable( INTS_ALL ); // Final board initialization InitBoard( OB_READY ); // Display information about this device zmain_dev_info(); /* Display the device info on the LCD */ #ifdef LCD_SUPPORTED zmain_lcd_init(); #endif #ifdef WDT_IN_PM1 /* If WDT is used, this is a good place to enable it. */ WatchDogEnable( WDTIMX ); #endif osal_start_system(); // No Return from here

相关主题
文本预览
相关文档 最新文档