当前位置:文档之家› zigbee设备启动分析

zigbee设备启动分析

zigbee设备启动分析
zigbee设备启动分析

设备启动准备

一、设备类型选择:

通过Workspace下拉框选择设备的类型:

图1:协调器

图2:路由器

图3:终端节点

协议栈设备类型:

#define ZG_DEVICETYPE_COORDINATOR 0x00

#define ZG_DEVICETYPE_ROUTER 0x01

#define ZG_DEVICETYPE_ENDDEVICE 0x02

#define ZG_DEVICETYPE_SOFT 0x03

ZG_DEVICETYPE_SOFT说明:可选设备类型。可以成为路由器、也可以成为协调器,由后面的程序决定。

初始化:

对于DEVICE_LOGICAL_TYPE的值各逻辑类型设备初始化如下:

// Device Logical Type

//zgDeviceLogicalType = DEVICE_LOGICAL_TYPE

在ZGlobals.h文件中设备逻辑类型进行了初始化:

#if defined ( SOFT_START )

#define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_SOFT //可选择类型

#elif defined( ZDO_COORDINATOR )

#define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_COORDINATOR //协调器

#elif defined (RTR_NWK)

#define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_ROUTER //路由器

#else

#define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_ENDDEVICE //终端

#endif

说明:如果编译了SOFT_START,则初始化设备逻辑类型(DEVICE_LOGICAL_TYPE)为可选择

类型(ZG_DEVICETYPE_SOFT)即设备可以作为协调器启动创建一个网络或者作为路由器加入一个已经存在的网络。如果没有编译SOFT_START但编译了ZDO_COORDINATOR,则初始化设备逻辑类型(DEVICE_LOGICAL_TYPE)为协调器(ZG_DEVICETYPE_COORDINATOR),即设备作为路由器启动并创建一个网络。如果没有编译SOFT_START和ZDO_COORDINATOR,但编译了RTR_NWK,则初始化设备的逻辑类型为路由器,即设备作为路由器启动并加入网络。其他情况则初始化为终端节点并加入网络。

SOFT-START说明:

SOFT_START is a compile option that allows the device to start as a coordinator if one isn't found.

设备启动模式(devStartMode)、设备状态(devState)

启动模式:表示了设备是以何种方式启动

typedef enum

{

MODE_JOIN, //加入

MODE_RESUME, //恢复

//MODE_SOFT, //暂不支持

MODE_HARD, //创建网络

MODE_REJOIN //重新加入

} devStartModes_t;

说明:MODE_JOIN和MODE_REJOIN 是路由器和终端使用的选项,用来加入或者重新

加入网络。而MODE_HARD是协调器使用的选项。用来创建一个网络。而MODE_RESUME 是恢复设备原来的状态。

设备状态标识了设备此时的状态:

typedef enum

{

DEV_HOLD, // Initialized - not started automatically

DEV_INIT, // Initialized - not connected to anything

DEV_NWK_DISC, // Discovering PAN's to join

DEV_NWK_JOINING, // Joining a PAN

DEV_NWK_REJOIN, // ReJoining a PAN, only for end devices

DEV_END_DEVICE_UNAUTH, // Joined but not yet authenticated by trust center

DEV_END_DEVICE, // Started as device after authentication

DEV_ROUTER, // Device joined, authenticated and is a router

DEV_COORD_STARTING, // Started as Zigbee Coordinator

DEV_ZB_COORD, // Started as Zigbee Coordinator

DEV_NWK_ORPHAN // Device has lost information about its parent..

} devStates_t;

初始化(以协调器为例)

devStartMode和devState的初始化,ZDApp.c中

启动模式(devStartModes_t)

#if defined( ZDO_COORDINATOR ) && !defined( SOFT_START )

// Set the default to coodinator

devStartModes_t devStartMode = MODE_HARD;

#else

// Assume joining

devStartModes_t devStartMode = MODE_JOIN;

#endif

说明:如果编译了ZDO_COORDINATOR并且没有编译SOFT_START,则初始化设备启

动模式(devStartMode)为MODE_HARD,即协调器创建网络。其他情况初始化设备启动模式(devStartMode)为MODE_JOIN,即设备加入网络。.

以上可以看出,如果编译了SOFT_START。首先并不是创建网络,而是先加入网络。如果网络加入失败,则考虑创建一个网络。

设备状态(devState):

#if defined( HOLD_AUTO_START )

devStates_t devState = DEV_HOLD;// Initialized - not started automatically

#else

devStates_t devState = DEV_INIT;// Initialized - not connected to anything

#endif

说明:如果编译了HOLD_AUTO_START,则设备状态(devState)为DEV_HOLD;否则设备状态(devState)为DEV_INIT。

Hold Auto Start说明:

A device will automatically start trying to form or join a network . If the device should wait on a timer or other external event before joining, then

HOLD_AUTO_START must be defined. In order to manually start the join process at a later time.

3、有两种方式来设置非自动启动模式:Hold Auto Start

(1)、手工方式:

在ZDApp_Init()函数中有个ZDAppCheckForHoldKey();(// Check for manual(手工的) "Hold Auto Start").

void ZDAppCheckForHoldKey( void )

{

//如果检测到按键SW_BYPASS_START被按下,则将设备的状态置为DEV_HOLD

#if (defined HAL_KEY) && (HAL_KEY == TRUE)

if ( HalKeyRead () == SW_BYPASS_START)

{

devState = DEV_HOLD;

}

#endif

}

(2)、预编译方式:

project->options->c/c++compiler->preprocessor->defined symbols下编译选项:

HOLD_AUTO_START

在ZDApp.c中:

#if defined( HOLD_AUTO_START )

devStates_t devState = DEV_HOLD;

#else

devStates_t devState = DEV_INIT;

#endif

把devState初始化为DEV_HOLD.

以上两种方式最终都会设置devState = DEV_HOLD // Initialized - not started automatically

预编译选项:

什么是预编译选项:

Compile options are used to select between features that are provided in the source files. Most compile options act as on/off switches for specific sections within source programs. Some options are used to provide a user-defined

编译选项是将源程序里提供的特性选择应用。大多数编译选项是充当“开关”作用。直接通过编译选项来决定是否应用某一特性。

编译选项配置的两种方式:

A:TOOL文件夹下的三个配置文件

在Tools文件夹下查看f8wCoord.cfg、f8wRouter.cfg、f8wEdev.cfg三个配置文件信息。

协调器:f8wCoord.cfg配置文件中同时编译了路由功能RTR_NWK和协调器功能

ZDO_COORDINATOR

/* Coordinator Settings */

-DZDO_COORDINATOR // Coordinator Functions

-DRTR_NWK // Router Functions

路由器:f8wRouter.cfg配置文件中编译了路由功能RTR_NWK

/* Router Settings */

-DRTR_NWK // Router Functions

终端:f8wEdev.cfg配置文件中没有编译这两个功能.

/* */

通过配置文件我们也可以看出协调器不仅具有协调器的作用还可以充当路由器,这就是我们所说的如果当协调器创建完网络后就可以认为协调器就变成了路由器了。路由器只有路由的功能,而终端设备没有路由的功能,更没有协调器的功能。

B: 通过Option选项下的配置条目进行配置

常用配置选项:

NV_RESTORE

SOFT_START

LCD_SUPPORTED=DEBUG

POWER_SAVING

REFLECTOR

RTR_NWK

ZDO_COORDINATOR

HOLD_AUTO_START

网络状态

// ZDOInitDevice return values

#define ZDO_INITDEV_RESTORED_NETWORK_STATE 0x00

#define ZDO_INITDEV_NEW_NETWORK_STATE 0x01

#define ZDO_INITDEV_LEAVE_NOT_STARTED 0x02

说明:ZDO_INITDEV_RESTORED_NETWORK_STATE 网络状态为恢复状态,即如果编译了NV-RESTORE,则设备将恢复为上次的状态。

ZDO_INITDEV_RESTORED_NETWORK_STATE 网络状态为新状态或者没有可以恢复的状态,此时设备将直接创建或者加入一个网络。ZDO_INITDEV_LEAVE_NOT_STARTED 为离开下次启动

网络恢复NV_RESTORE

Devices that have successfully joined a network can “restore the network” (instead of reforming by OTA messages) even after losing power or battery. This automatic restoration can be enabled by defining NV_RESTORE and/or NV_INIT.

地址结构体说明:

typedef struct

{

union

{

uint16 shortAddr;

ZLongAddr_t extAddr;

} addr;

byte addrMode;

} zAddrType_t;

包括有地址模式和地址。

地址模式有:

typedef enum

{

afAddrNotPresent = AddrNotPresent,

afAddr16Bit = Addr16Bit,

afAddrGroup = AddrGroup,

afAddrBroadcast = AddrBroadcast

} afAddrMode_t

特殊地址:

0xFFFF-------向所有设备广播信息

0xFFFE-------绑定时使用该地址

0xFFFD------向所有非睡眠的节点广播

0xFFFC------向所有路由器广播(包括协调器)

实例:

ZDAppNwkAddr.addrMode = Addr16Bit;

ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR;

注册机制说明:

为什么要注册?

协议栈三大注册机制:端点endpoint的注册、按键KEY的注册和ZDOMsg消息注册。这里我们看endpoint的注册。

Endpoint的注册最终调用了函数*afRegisterExtended();

epList_t *afRegisterExtended( endPointDesc_t *epDesc, pDescCB descFn )

{

if ( ep )//成功分配空间

{

// Fill in the new list entry

ep->epDesc = epDesc;

ep->flags = eEP_AllowMatch;

ep->pfnDescCB = descFn;

ep->nextDesc = NULL;

if ( epList == NULL )

epList = ep; // Make this the first entry

else

{

epSearch = epList;

while( epSearch->nextDesc != NULL )

epSearch = epSearch->nextDesc;

//循环到最后,就是依次“下一个”,直到最后一个,在最后把新的加上

epSearch->nextDesc = ep;

}

……

}

协调器创建网络规范说明

在一个zigbee网络中,只有协调器(coordinator)才可以建立网络,建立网络的过程是通过原语实现的。

首先协调器的应用层调用NLME_NETWORK_FORMATION.request原语发出建立网络

请求,网络层(NWK)收到这个原语,向MAC层发送MLME_SCAN.request原语执行信道能量扫描(energy scan)和活动情况扫描(active scan),(在IEEEE802.15.4协议中规定,在2.4G 频段,共有16个信道,每个信道的带宽为5M)。

信道能量(energy scan)扫描是为了找到规定信道中那一个最安静,并标注为可用信道。每扫描一个信道持续约半秒,如果配置为16个信道全部扫描共需约八秒。当MAC层执行完信道能量扫描(energy scan)后,由MAC层向NWK层发送MLME_SCAN.confirm确认原语。当信道能量扫描(energy scan)完成后下一步就在可用信道中执行活动情况扫描(active scan), 活动情况扫描(active scan)是MAC层通过发送MAC帧,检测是否有回应判断信道是否有其他网络存在,活动情况扫描(active scan)的目的在于防止在同一个信道上建立两个具有相同PANID的网络。当MAC层执行活动情况扫描(active scan)后,由MAC层向NWK层发送MLME_SCAN.confirm确认原语。并将可用的可用的PANID和信道发送给上层。

当执行完上述扫描后,如果获得了可用的信道和PANID,则网络层(NWK)向MAC发送MLME_START.request原语请求启动创建网络,当网络创建成功MAC层向网络层(NWK)发送MLME_START.confirm原语告知结果。网络层(NWK)向应用层(APS)发送

NLME_NETWORK_FORMATION.confirm原语告知结果。

协调器启动协议栈代码说明

1、协调器预编译信息

在Tools文件夹下查看f8wCoord.cfg编译ZDO_COORDINATOR和RTR_NWK.

在Option选项卡编译:CC2430EB;ZTOOL_P1;MT_TASK;MANAGED_SCAN

2、具体流程

首先协议栈以主函数为入口点启动协议栈。在主函数中调用了osal_init_system()进行了OS的初始化

ZSEG int main( void )

{

osal_int_disable( INTS_ALL );

HAL_BOARD_INIT();

zmain_vdd_check();

……

osal_init_system()

……

}

OS 初始化系统,初始化了内存、定时器、电源管理以及系统任务等。

byte osal_init_system( void )

{

osal_mem_init();

osal_qHead = NULL;

osalTimerInit();

osal_pwrmgr_init();

// Initialize the system tasks.初始化任务系统

osalInitTasks();

}

在任务初始化osalInitTasks()函数中,OS为每一层分配一个任务ID,使得协议栈成为一个多任务的系统

void osalInitTasks( void )

{

uint8 taskID = 0;

tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt); osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));

macTaskInit( taskID++ );

nwk_init( taskID++ );

Hal_Init( taskID++ );

#if defined( MT_TASK )

MT_TaskInit( taskID++ );

#endif

APS_Init( taskID++ );

ZDApp_Init( taskID++ );

SampleApp_Init( taskID );

}

函数说明:

1、void *osal_mem_alloc( uint16 size )

说明:该函数在内存中开辟了size大小的一块内存

参数说明:size-----------------------要开辟内存的大小

返回值:指针

2、void *osal_memset( void *dest, byte value, int len )

说明:该函数将起始地址为dest,长度为len的一块内存的值设置为value

参数说明:*dest--------------------起始地址

value-------------------要设置成的值

len----------------------设置内存块的大小

返回值:指针

其他说明:

由编译选项可知MT_TASK编译了,可以知道函数中

#if defined( MT_TASK )

MT_TaskInit( taskID++ );

#endif

将被执行。

即最后ZDApp_Init(byte task_id)

传递的任务id的值为5,而SampleApp_Init( taskID )传递的任务id为6.

void ZDApp_Init(byte task_id)

{

uint8 capabilities;

//保存下了OS分配的任务id。即ZDAppTaskID=5

ZDAppTaskID=task_id;

……

//如果程序运行到这里正好SW_1被按下,则会设置设备的状态(devState)为DEV_HOLD,从而避开网络初始化

ZDAppCheckForHoldKey();

//Initialize ZDO items and setup the device – type of device to create.

ZDO_Init();

AfRegister( (endPointDesc_t *)&ZDApp_epDesc );

……

// Start the device

if ( devState != DEV_HOLD )

{

ZDOInitDevice( 0 );

}

else

{

// Blink LED to indicate HOLD_START

HalLedBlink ( HAL_LED_4, 0, 50, 500 );

}

ZDApp_RegisterCBs();

}

函数说明:

1、void ZDAppCheckForHoldKey( void )

说明:如果在设备启动的时候手动将SW_1按下,则将设备状体置为DEV_HOLD,从而避开网络初始化。

参数说明:无

返回值:无

2、void ZDO_Init( void )

说明:该函数是ZDObject 和ZDProfile 初始化函数,在该函数中调用了ZDODeviceSetup()根据编译选项的不同进行了相关的初始化。

参数说明:无

返回值:无

3、afStatus_t afRegister( endPointDesc_t *epDesc )

说明:该函数为zigbee设备注册一个新的端口。应用程序的每一个端口都必须使用该函数

进行注册。

参数说明:epDesc -----------------------指向端口描述符的指针

返回值:afStatus_t-------------------------在ZcomDef.h的Zstatus_t结构体中定义的状态值4、uint8 ZDOInitDevice(uint16 startDelay)

说明:该函数为ZDO设备初始化函数,该函数会检查系统是否需要恢复,如果需要恢复则恢复,否则启动设备。

参数说明:startDelay----------------------------------------------------------------设备启动延时

返回值:ZDO_INITDEV_RESTORED_NETWORK_STATE-------------设备恢复成功

ZDO_INITDEV_NEW_NETWORK_STATE----------------------设备为新状态

ZDO_INITDEV_LEA VE_NOT_STARTED-------------------------离开下次启动

uint8 ZDOInitDevice( uint16 startDelay )

{

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

uint8 networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;

uint16 extendedDelay = 0;

devState = DEV_INIT; // Remove the Hold state/设备的状态为:设备初始化

……

#if defined ( NV_RESTORE )

if ( HalKeyRead() == SW_BYPASS_NV )

//如果SW_BYPASS_NV按键此时被按下则会避开NV-RSTORE,将网络状态置为新状态

networkStateNV = ZDO_INITDEV_NEW_NETWORK_STATE;

else//决定NV是否需要恢复

{

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

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

networkStateNV = ZDApp_ReadNetworkRestoreState();

//通过函数ZDApp_ReadNetworkRestoreState的返回值决定NV是否需要恢复。

}

//函数ZDApp_ReadNetworkRestoreState()用来检测是否需要恢复,如果返回值为//ZDO_INITDEV_RESTORED_NETWORK_STATE则恢复网络先前的状态

if ( networkStateNV == ZDO_INITDEV_RESTORED_NETWORK_STATE )

{

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

//设置devStartMode = MODE_RESUME

networkStateNV = ZDApp_RestoreNetworkState();

//通过函数ZDApp_RestoreNetworkState()恢复网络先前的状态

}

else //如果没有可以恢复的则执行下面代码

{

// Wipe out the network state in NV

NLME_InitNV();

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

}

#endif

//以下为没有定义NV_RESTORE,即不恢复网路状态或者恢复失败。如果网络状态为//ZDO_INITDEV_NEW_NETWORK_STATE则执行以下代码

if ( networkStateNV == ZDO_INITDEV_NEW_NETWORK_STATE )

{

//根据编译选项决定设备的类型,但仅在编译了SOFT_START 才起作用

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 、uint8 ZDApp_ReadNetworkRestoreState( void )

说明:通过该函数读取NV 中ZCD_NV_STARTUP_OPTION的值决定是否需要恢复先前的网络状态。

参数说明:无

返回值:ZDO_INITDEV_NEW_NETWORK_STATE-------------新网络状态,无需恢复

ZDO_INITDEV_RESTORED_NETWORK_STATE-----------恢复先前网络状态

2、 uint8 ZDApp_RestoreNetworkState( void )

说明:通过该函数可以恢复先前的网络状态

参数说明:无

返回值:ZDO_INITDEV_RESTORED_NETWORK_STATE-------网络状态恢复成功

ZDO_INITDEV_NEW_NETWORK_STATE----------------网络状态恢复失败

3、void ZDAppDetermineDeviceType( void )

说明:通过该函数决定启动时设备的逻辑类型及启动模式,但仅在编译了SOFT_START 才起作用

参数说明:无

返回值:无

4、void ZDApp_NetworkInit( uint16 delay )

说明:通过该函数触发设备启动函数,该函数触发了ZDO_NETWORK_INIT事件。

参数说明:delay--------------------------- 触发ZDO_NETWORK_INIT的延时

返回值:无

其他说明:

在函数ZDApp_NetworkInit()的参数值的大小,这里extendedDelay的大小足够协议栈初始化其它层。因为该参数在传递给函数后定时触发事件ZDO_NETWORK_INIT,而溢出时间正是extendedDelay。在协议栈提供的SampleApp实例中,编译了SOFT_START,当执行到这里的时候,设备类型为可选类型(ZG_DEVICETYPE_SOFT)。延时extendedDelay确保了当设备开始创建网络的时候已经初始化了SampleApp的应用层,在应用层通过跳线决定了设备的类型是协调器或是路由器。

通过上面函数的分析我们可以看出设备在启动的时候可以利用NV恢复上次的网络状态,也可以不恢复直接开始创建或加入网络,恢复与否取决于是否编译了NV_RESTORE。ZDOInitDevice( uint16 startDelay )函数的最后触发了事件ZDO层的ZDO_NETWORK_INIT。ZDO层事件处理函数为ZDApp_event_loop()。

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 (events ^ ZDO_NETWORK_INIT);

}

……

}

函数说明:

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

说明:通过该函数根据设备类型及设备启动方式的不同启动设备。

参数说明:logicalType-----------------------------设备的逻辑类型

startMode------------------------------设备的启动模式

beaconOrder---------------------------信标时间

superframeOrder---------------------超帧长度

返回值:无

在ZDApp_event_loop()中处理ZDO_NETWORK_INIT前,即设备启动之前设备的状态设置为设备初始化(DEV_INIT)。然后调用了ZDO_StartDevice()启动设备。下面仔细分析设备的启动函数ZDO_StartDevice()

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

{

#if defined(ZDO_COORDINATOR) //如果定义了协调器

if ( logicalType == NODETYPE_COORDINATOR ) //node type coordinator

{

//协调器的两种启动方式:

if ( startMode == MODE_HARD )//普通的启动,直接创建网络

{

devState = DEV_COORD_STARTING;//设备状态为协调器正在启动

// NLME_NetworkFormationRequest为系统函数,用于协调器创建网络

ret = NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,

gDefaultStartingScanDuration,beaconOrder, superframeOrder, false );

}

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

{

// Just start the coordinator

devState = DEV_COORD_STARTING; //设备状态为协调器正在启动

//如果是协调器恢复则会以路由器启动

ret = NLME_StartRouterRequest( beaconOrder, beaconOrder, false );

}

……

}

#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; //此时设备状态为“发现网络”

#if defined( MANAGED_SCAN )

//如果编译了MANAGED_SCAN将会会扫描所有信道

ZDOManagedScan_Next(); //进行信道扫描

//选择扫描到的网络加入

ret=NLME_NetworkDiscoveryRequest(managedScanChannelMask,

BEACON_ORDER_15_MSEC ); #else

//加入到默认信道上的网络

ret=NLME_NetworkDiscoveryRequest(zgDefaultChannelList,

zgDefaultStartingScanDuration ); #endif

}

else if ( startMode == MODE_RESUME )//下面是设备恢复代码

{

if ( logicalType == NODETYPE_ROUTER )//路由器的恢复

{

……

nwk_ScanJoiningOrphan(&scanCnf);//路由器以孤点方式加入网络

ret = ZSuccess;

}

else//终端节点的恢复

{

devState = DEV_NWK_ORPHAN;

ret = NLME_OrphanJoinRequest( zgDefaultChannelList,

zgDefaultStartingScanDuration );

}

}

……

}

#endif //!ZDO COORDINATOR || SOFT_START

if ( ret != ZSuccess )//如果没有启动,则重新再来一次!

osal_start_timerEx(ZDAppTaskID,ZDO_NETWORK_INIT, NWK_RETRY_DELAY );

}

函数说明:

1 、ZStatus_t NLME_NetworkFormationRequest( uint16 PanId, uint3

2 ScanChannels,

byte ScanDuration, byte BeaconOrder,

byte SuperframeOrder, byte BatteryLifeExtension )

说明:通过该函数协调器可以创建一个网络。该函数会触发其对应的回调函数

void ZDO_NetworkFormationConfirmCB( ZStatus_t Status )。

2、ZStatus_t NLME_StartRouterRequest( byte BeaconOrder, byte SuperframeOrder,

byte BatteryLifeExtension )

说明:通过该函数可以启动一个路由器或者完成协调器的恢复。该函数会触发其对应的回调函数void ZDO_StartRouterConfirmCB( ZStatus_t Status )。

3、ZStatus_t NLME_NetworkDiscoveryRequest( uint32 ScanChannels,

byte scanDuration)

说明:通过该函数请求网络层发现邻居路由器节点。该函数会触发其对应的回调函数

ZStatus_t ZDO_NetworkDiscoveryConfirmCB( byte ResultCount,

networkDesc_t *NetworkList )

4、void nwk_ScanJoiningOrphan( ZMacScanCnf_t *param )

说明:通过该函数路由器会以孤点的方式加入网络。该函数会触发其回调函数

void ZDO_JoinConfirmCB( uint16 PanId, ZStatus_t Status )

5、ZStatus_t NLME_OrphanJoinRequest( uint32 ScanChannels, byte ScanDuration )

说明:通过该函数终端节点以孤点的方式加入网络。该函数会触发其回调函数

void ZDO_JoinConfirmCB( uint16 PanId, ZStatus_t Status )

我们这里是协调器的启动,并且没有用到网络恢复,所以在该函数中会调用

NLME_NetworkFormationRequest( zgConfigPANID, zgDefaultChannelList,

zgDefaultStartingScanDuration, beaconOrder, superframeOrder, false )

来创建一个新的网络。调用NLME_NetworkFormationRequest()触发了其对应的回调函数ZDO_NetworkFormationConfirmCB()。

void ZDO_NetworkFormationConfirmCB( ZStatus_t Status )

{

#if defined(ZDO_COORDINATOR)

nwkStatus = (byte)Status; //将状态保存到nwkStatus中

if ( Status == ZSUCCESS ) //网络创建成功

{

//点亮LED_3标识协调器已经创建网络成功

HalLedSet ( HAL_LED_3, HAL_LED_MODE_ON );

// LED off forgets HOLD_AUTO_START

HalLedSet (HAL_LED_4, HAL_LED_MODE_OFF);

……

}

#if defined(BLINK_LEDS)

else //没有成功创建网络将闪烁LED提示用户

HalLedSet ( HAL_LED_3, HAL_LED_MODE_FLASH );

#endif

//触发网络已经启动事件 ZDO_NETWORK_START

osal_set_event( ZDAppTaskID, ZDO_NETWORK_START );

#endif //ZDO_COORDINATOR

}

不论是否创建了网络,函数最后触发事件ZDO_NETWORK_START,同样在ZDApp_event_loop()中处理ZDO_NETWORK_START事件。注意:每一层处理每一层的事件,不允许越权处理也不允许不处理,两种情况系统都是无法运行的。

UINT16 ZDApp_event_loop( byte task_id, UINT16 events )

{

……

#if defined (RTR_NWK)

if ( events & ZDO_NETWORK_START )

{

ZDApp_NetworkStartEvt();

// Return unprocessed events

return (events ^ ZDO_NETWORK_START);

}

#endif //RTR_NWK

……

}

函数中调用了函数ZDApp_NetworkStartEvt()对ZDO_NETWORK_START进行处理

void ZDApp_NetworkStartEvt( void )

{

if ( nwkStatus == ZSuccess )//如果创建网络成功

{

// Successfully started a ZigBee network

if ( devState == DEV_COORD_STARTING )

{

devState = DEV_ZB_COORD;//将设备的状态修改为DEV_ZB_COORD

}

//设置电源,因为是协调器所以需要PWRMGR_ALWAYS_ON 而不能电池供电

osal_pwrmgr_device( PWRMGR_ALWAYS_ON );

//触发ZDAppTaskID的事件ZDO_STATE_CHANGE_EVT

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//如果能量最大也没有成功进入dormant状态

{

// Failed to start network. Enter a dormant state (until user intervenes) devState = DEV_INIT;

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网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络。加入网络又有两种方法,一种是子设备通过使用MAC层的连接进程加入网络,另一种是子设备通过与一个先前指定的父设备直接加入网络。 一、协调器初始化网络 协调器建立一个新网络的流程如图1所示。 图1 协调器建立一个新网络 1、检测协调器 建立一个新的网络是通过原语NLME_NETWORK_FORMATION.request发起的,但发起NLME_NETWORK_FORMATION.request原语的节点必须具备两个条件,一是这个节点具有ZigBee协调器功能,二是这个节点没有加入到其它网络中。任何不满足这两个条件的节点发起建立一个新网络的进程都会被网络层管理实体终止,网络层管理实体将通过参数值为INVALID_REQUEST的NLME_NETWORK_FORMATION.confirm的原语来通知上层这是一个非法请求。 2、信道扫描 协调器发起建立一个新网络的进程后,网络层管理实体将请求MAC子层对信道进行扫描。 信道扫描包括能量扫描和主动扫描两个过程。首先对用户指定的信道或物理层所有默认的信道进行一个能量扫描,以排除干扰。网络层管理实体将根据信道能量测量值对信道进行一个递增排序,并且抛弃能量值超过了可允许能量值的信道,保留可允许能量值内

的信道等待进一步处理。接着在可允许能量值内的信道执行主动扫描,网络层管理实体通过审查返回的PAN描述符列表,确定一个用于建立新网络的信道,该信道中现有的网络数目是最少的,网络层管理实体将优先选择没有网络的信道。如果没有扫描到一个合适的信道,进程将被终止,网络层管理实体通过参数仠为STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原语来通知上层初始化启动网络失败。 3、配置网络参数 如果扫描到一个合适的信道,网络层管理实体将为新网络选择一个PAN描述符,该PAN 描述符可以是由设备随机选择的,也可以是在NLME_NETWORK_FORMATION.request里指定的,但必须满足PAN描述符小于或等于0x3fff,不等于0xffff,并且在所选信道内是唯一的PAN描述符,没有任何其它PAN描述符与之是重复的。如果没有符合条件的PAN 描述符可选择,进程将被终止,网络层管理实体通过参数值为STARTUP_FAILURE的NLME_NETWORK_FORMATION.confirm的原语来通知上层初始化启动网络失败。确定好PAN 描述符后,网络层管理实体为协调器选择16位网络地址0x0000,MAC子层的macPANID 参数将被设置为PAN描述符的值,macShortAddress PIB参数设置为协调器的网络地址。 4、运行新网络 网络参数配置好后,网络层管理实体通过MLME_START.request原语通知MAC层启动并运行新网络,启动状态通过MLME_START.confirm原语通知网络层,网络层管理实体再通过NLME_NETWORK_FORMATION.confirm原语通知上层协调器初始化的状态。 5、允许设备加入网络 只有ZigBee协调器或路由器才能通过NLME_PERMIT_JOINING.request原语来设置节点处于允许设备加入网络的状态。当发起这个进程时,如果PermitDuration参数值为0x00,网络层管理实体将通过MLME_SET.request原语把MAC层的macAssociationPermit PIB 属性设置为FALSE,禁止节点处于允许设备加入网络的状态;如果PermitDuration参数值介于0x01和0xfe之间,网络层管理实体将通过MLME_SET.request原语把macAssociationPermit PIB属性设置为TRUE,并开启一个定时器,定时时间为PermitDuration,在这段时间内节点处于允许设备加入网络的状态,定时时间结束,网络层管理实体把MAC层的macAssociationPermit PIB属性设置为FALSE;如果PermitDuration参数的值为0xff,网络层管理实体将通过MLME_SET.request原语把macAssociationPermit PIB属性设置为TRUE,表示节点无限期处于允许设备加入网络的状态,除非有另外一个NLME_PERMIT_JOINING.request原语被发出。允许设备加入网络的流程如图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的系统结构和组网方式

简介 ZigBee是一种新兴的短距离、低功耗、低数据传输速率的无线网络技术,它是一种介于无线标记技术和蓝牙之间的技术方案。ZigBee是建立在IEEE802.15.4标准之上,它确定了可以在不同制造商之间共享的应用纲要。IEEE802.15.4标准定义了ZigBee协议的PHY层和MAC层。PHY层规范确定了在2.4GHz(全球通用的ISM频段)以250kb/s的基准传输率工作的低功耗展频无线电以及另有一些以更低数据传输率工作的915MHz(北美的ISM频段)和868MHz(欧洲的ISM频段)的实体层规范。MAC层规范定义了在同一区域工作的多个IEEE802.15.4无线电信号如何共享空中通道。 为了促进ZigBee技术的发展,2001年8月成立了ZigBee联盟,2002年下半年,英国Invensys公司、日本三菱电子公司、美国摩托罗拉公司以及荷兰飞利浦半导体公司四大巨头共同宣布,它们将加入“ZigBee联盟”,目前该联盟已经有150多家成员,以研发名为ZigBee的下一代无线通信标准。 正如前面所述,ZigBee不仅仅只是802.15.4的名字,IEEE802.15.4仅处理低级MAC层和PHY层协议,所以ZigBee联盟对其网络层协议和API进行了标准化,还开发了安全层,以保证这种便携设备不会意外泄漏其标识。 ZigBee的组成和构网方式 1.FFD和RFD 利用zigbee技术组件的无线个人区域网(WPAN)是一种低速率的无线个人区域网(LR WPAN),这种低速率个人区域网的网络结构简单、成本低廉,具有有限的功率和灵活的吞 吐量。 在一个LR WPAN网络中,可同时存在两种不同类型的设备,一种是具有完整功能的设备(FFD),另一种是简化功能的设备(RFD)。 在网络中,FFD通常有3中工作状态:(1)作为个人区域网络(PAN)的主协调器;(2) 作为一个普通协调器;(3)作为一个终端设备。FFD可以同时和多个RFD或其他FFD通信。 而RFD则只用一种工作状态即作为一个终端设备,并且一个RFD只能和一个FFD通信。2.ZigBee的体系结构 ZigBee体系结构主要有物理(PHY)层、媒体接入控制(MAC)层、网络/安全层以及应用框架层构成,如下图所示:

ZigBee技术网络层的路由算法分析(1).

ZigBee技术网络层的路由算法分析(1) 摘要基于IEEE802.15.4标准的 ZigBee网络是一种具有强大组网能力的新型无线个域网,其中的路由算法是研发工作的重点。本文介绍了IEEE802.15.4标准及ZigBee规范的协议模型,重点研究了ZigBee协议网络层的路由算法,分析了Tree路由及Z-AODV路由算法,在此基础上提出了ZigBee网格型网络中基于数据特性的路由选择机制,该机制在网络性能和低功耗方面有明显的优势,并且可以平衡节点能量,最后简单介绍了ZigBee节点的硬件实现。 关键词 ZigBee协议;网络;IEEE802.15.4;路由算法;Tree路由;Z-AODV路由 1 概述 ZigBee技术是由英国Invensys公司、日本三菱电气公司、美国摩托罗拉公司以及荷兰飞利浦等公司在2002年10月共同提出设计研究开发的具有低成本、体积小、能量消耗小和传输速率低的无线通信技术。 2000年12月,IEEE 802 无线个域网(WPAN,Wireless Personal Area Network)小组成立,致力于WPAN无线传输协议的建立。2003年12月,IEEE正式发布了该技术物理层和MAC层所采用的标准协议,即IEEE 802.15.4协议标准,作为ZigBee技术的网络层和媒体接入层的标准协议。2004年12月,ZigBee联盟在IEEE 802.15.4 定义的物理层(PHY)和媒体接入层(MAC)的基础上定义了网络层和应用层,正式发布了基于IEEE 802.15.4的ZigBee标准协议。 2 网络层的研究 ZigBee技术的体系结构主要由物理层(PHY)、媒体接入层(MAC)、网络/安全层以及应用框架层组成,各层之间的分布如图1所示。 图1 ZigBee技术协议组成 PHY层的特征是启动和关闭无线收发器、能量检测、链路质量、信道选择、清除信道评估(CCA)以及通过物理媒体对数据包进行发送和接收。MAC 层可以实现信标管理、信道接入、时隙管理、发送确认帧、发送连接及断开连接请求,还为应用合适的安全机制提供一些方法。它包含具有时间同步信标的可选超帧结构,采用免碰撞的载波侦听多址访问(CSMA-CA)。安全层主要实现密钥管理、存取等功能。网络层主要用于ZigBee的LR-WPAN网的组网连接、数据管理等。应用框架层主要负责向用户提供简单的应用软件接口(API),包括应用子层支持APS(Application Sub-layer Support)、ZigBee设备对象ZDO (ZigBee Device Object)等,实现应用层对设备的管理,为ZigBee技术的实际应用提供一些应用框架模型等,以便对ZigBee技术的开发应用。 网络层的定义包括网络拓扑、网络建立、网络维护、路由及路由的维护。

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协调器技术及系统方案设计--毕业论文

目录 中文摘要......................................... 错误!未定义书签。英文摘要......................................... 错误!未定义书签。 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 组网技术ZigBee 是一种高可靠的无线数传网络,类似于CDMA和GSM网络。ZigBee 数传模块类 似于移动网络基站。通讯距离从标准的75m到几百米、几公里,并且支持无限扩展。Zigbee 技术特点主要有低功耗、低成本、时延短、网络容量大、工作频段灵活、低速率、安全的数据传输等。其中低功耗是Zigbee 技术最重要的特点。由于Zigbee 的传输速率相对较低发射功率较小,使得Zig bee 设备很省电,这是Zigbee 技术能够广泛应用的基石。 ZigBee 协议适应无线传感器的低花费、低能量、高容错性等的要求。Zigbee 的基础是IEEE 802.15.4 。但IEEE仅处理低级MAC层和物理层协议,因此Zigbee 联盟扩展了IEEE,对其网络层协议和API 进行了标准化。Zigbee 是一种新兴的短距离、低速率的无线网络技术。主要用于近距离无线连接。它有自己的协议标准,在数千个微小的传感器之间相互协调实现通信。 ZigBee 组网概述 组建一个完整的zigbee 网状网络包括两个步骤:网络初始化、节点加入网络。其中节点加入网络又包括两个步骤:通过与协调器连接入网和通过已有父节点入网。 ZigBee 网络初始化预备 Zigbee 网络的建立是由网络协调器发起的,任何一个zigbee 节点要组建一个网络必须要满足以下两点要求: (1)节点是FFD节点,具备zigbee 协调器的能力; (2)节点还没有与其他网络连接,当节点已经与其他网络连接时,此节点只能作为该网络的子节点,因为一个zigbee 网络中有且只有一个网络协调器。 FFD:Full Func TIon Device 全功能节点 RFD:Reduced Func TI onDevice 半功能节点

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年左右的使用时间。 可靠:采用了碰撞避免机制,同时为需要固定带宽的通信业务预留了专用

Zigbee组网流程

1、网络形成 组网开始时,网络层首先向MAC层请求分配协议所规定的信道,或者由PHY层进行有效信道扫描,网络层管理实体等待信道扫描结果,然后根据扫描结果选择可允许能量水平的信道。找到合适的信道后,为这个新的网络选择一个个域网标识符(PANID)。PANID可由网络形成请求时指定,也可以随机选择一个PANID(除广播PANID固定为0xFFFF外),PANID 在所选信道中应该是唯一的。PANID一旦选定,无线网关将选择16位网络地址0x0000作为自身短地址,同时进行相关设置。完成设置后,通过MAC层发出网络启动请求,返回网络形成状态。 2、网络维护 网络维护网络维护主要包括设备加入网络和离开网络过程。当网络形成后,通过网络管理实体设定MAC层连接许可标志来判断是否允许其他设备加设备初始化为协调器入网络。加入方式有联合方式和直接方式,在协议实现中采取直接加入网络方式。这种方式下由待加入的设备发送请求加入信标帧,网关接收到后,网络管理实体首先判断这个设备是否已存在于网络。存在,则使其加入网络;若不存在,则向设备发送信标帧,为这个设备分配一个网络中唯一的16位的短地址。这里的信标帧是由网关无线协议MAC层生成作为PHY层载荷,它包含PANID、加入时隙分配等信息。网内设备也可以请求断开网络。当网关收到设备断

开连接请求后,MAC层向网络层发送报告,开始执行断开流程,从设备列表中删除该设备相关信息。 网络层上层请求网络层发现当前在运行的网络: NLME NETWORK DISCOVERY.request(ScanChannels,ScanDuration) ScanChannels:高5为保留(b27~b31),低27为分别表示27个有效信道,该位为1,表示扫描;为0不扫描。 ScanDuration:扫描时间,aBaseSuperframeDuration*(2^n+1),n为ScanDuration值。 网络层在家收到该原语后,将通过检查ScanChannels参数发现网络,如果该设备为一个FFD 设备,则执行主动的扫描。如果为一个RFD设备,倘若设备实现主动扫描,那么他会执行主动的扫描,否则 一个合适的父节点需要满足三个条件:匹配的PAN标志符、链路成本最大为3、允许连接,为了寻找合适的父节点,NLME_JOIN.request原语请求网络层搜索它的邻居表,如果邻居表中不存在这样的父节点则通知上层,如果存在多个合适的父节点则选择具有最小深度的父节点,如果存在多个具有最小深度的合适的父节点则随机选择一个父节点。

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内存管理更有效,在这里应该分配永久堆栈存储区。

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的工作原理

ZigBee得工作原理_ZigBee组网技术ZigBee就是一种高可靠得无线数传网络,类似于CDMA与GSM网络。ZigBee数传模块类似于移动网络基站。通讯距离从标准得75m到几百米、几公里,并且支持无限扩展。Zig bee技术特点主要有低功耗、低成本、时延短、网络容量大、工作频段灵活、低速率、安全得数据传输等。其中低功耗就是Zigbee技术最重要得特点。由于 Zigbee得传输速率相对较低发射功率较小,使得Zig bee设备很省电,这就是 Zigbee技术能够广泛应用得基石。 ZigBee协议适应无线传感器得低花费、低能量、高容错性等得要求。Zigbee 得基础就是IEEE 802.15。4、但IEEE仅处理低级MAC层与物理层协议,因此Zigbee联盟扩展了IEEE,对其网络层协议与API进行了标准化。Zigbee就是一种新兴得短距离、低速率得无线网络技术。主要用于近距离无线连接。它有自己得协议标准,在数千个微小得传感器之间相互协调实现通信。 ZigBee组网概述 组建一个完整得zigbee网状网络包括两个步骤:网络初始化、节点加入网络。其中节点加入网络又包括两个步骤:通过与协调器连接入网与通过已有父节点入网。 ZigBee网络初始化预备 Zigbee网络得建立就是由网络协调器发起得,任何一个zigbee节点要组建一个网络必须要满足以下两点要求: (1)节点就是FFD节点,具备zigbee协调器得能力; (2)节点还没有与其她网络连接,当节点已经与其她网络连接时,此节点只能作为该网络得子节点,因为一个zigbee网络中有且只有一个网络协调器。 FFD:Full Func TI on Device 全功能节点 RFD:Reduced FuncTI onDevice半功能节点

zigbee路由算法研究

毕业设计(论文) 题目:zig bee路由算法研究(zigbee R outing algorithm research) 姓名:王龙龙 学号:0904010117 指导教师:郝毫毫(副教授) 专业:测控技术与仪器 班级:测控01 所在学院:电气信息学院 年月

目录 摘要.....................................................................................................II Abstract................................................................................................ III 第一章绪论.......................................................................................... (1) 1.1 XXXX ............................................................................................. . (1) 1.2 XXXX ............................................................................................... .. x 第二章 XXXX .. (x) 2.1 XXXX .............................................................................................. (x) 2.2 XXXX .............................................................................................. (x) 2.3 XXXX .............................................................................................. (x) 第三章 XXXX............................................................................................. ..x 3.1 XXXX .............................................................................................. (x) 3.2 XXXX .............................................................................................. (x) 第四章 XXXX (x) 4.1 XXXX .............................................................................................. (x) 4.2 XXXX .............................................................................................. (x) 4.3 XXXX .............................................................................................. (x) 总结 (x) 致谢 (x) 参考文献 (x) 附录(可选项) (x) 说明:目录中的标题只列出2级标题(如1.1, 2.3等),不要出现3级及以上标题(如 2.1.2等)。章节不宜划分过细,目录内容不宜超过一页。

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网络设备启动流程—协调器(自启动模式)

使用的协议栈版本信息: 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 ); }

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