搜档网
当前位置:搜档网 › ZigBee开发常见问题集

ZigBee开发常见问题集

ZigBee开发常见问题集

目录

说明:本问题集是基于成都无线龙公司C51RF-3系列及C51RF-WSN系列等开发系统或实验箱,由于问题是多个系统集成的,不是针对某单一系统,请用户选择性查阅。

一、软件集成开发环境类 (2)

1.1IAR序列号 (2)

1.2执行错误 (2)

1.3无法打开文件 (2)

1.4 Segment CSTACK (size: 0x50 align: 0x1) is too long (2)

1.5 Last line of file ends without a new line (3)

1.6 Undefined external“UART1_ISR”referred in startup (3)

1.7 Could not open source file (3)

1.8 Too much object code produced for this package (3)

1.9协议栈如何生成HEX文件 (3)

1.10 IAR下载程序时,提示Flash被锁 (6)

二、ZigBee开发系统类 (6)

2.1C51RF-3仿真器无法下载程序 (6)

三、ZigBee协议栈程序类 (8)

3.1ZigBee模块(CC2430)ADC参考电压,转换速率,测量值转换成电压计算公式 (8)

3.2如何读出ZigBee模块CC2430的RSSI值 (9)

3.3ZigBee模块CC2430的I/O第2功能 (10)

3.4ZigBee网络中怎么实现任意两个节点间数据传输 (10)

3.5如何观察ZigBee路由功能 (11)

3.6网络拓扑类型修改 (11)

3.7ZigBee通道(信道)修改 (11)

3.8网络号(PAN ID)修改 (12)

3.9 ZigBee设备类型修改 (12)

3.10ZigBee发射功率修改 (13)

3.11ZigBee路由深度、网络容量修改 (13)

修改如上3个参数,注意此3个参数在多处定义,需要修改多处。 (13)

3.12 ZigBee协议栈如何添加创建任务 (14)

3.13 节点无法加入ZigBee网络 (14)

3.14 ZigBee物理地址(IEEE)如何修改,获得 (14)

3.15 ZigBee网络地址如何修改,获得 (15)

一、软件集成开发环境类

IAR常见错误请先从如下几方面入手:

1序列号是否正确。

2使用版本是否正确,应该使用7.30B打开的工程文件不能使用7.20H打开。

3尽量不要使用中文路径。

ZigBee协议栈文件夹需要放在IAR安装盘根目录下。

4

5请确定当前编译文件夹是否具有读写权限。

6使用的版本是否是限制版。

1.1IAR序列号

为什么通过IAR编译代码时,出现以下错误:

Fatal Error[Cp001]: Copy protection check, No valid license found for this product [20]这是因为IAR序列号错误导致的,请获取正确的序列号。

1.2执行错误

为什么我的新建一个工程、加入文件后,并编译成功,将程序下载到模块中,执行的结果是错的?

IAR工程配置错误,请参阅IAR的入门教材,登陆本社区后,可以在

https://www.sodocs.net/doc/c715317483.html,/bbs/download/download.aspx?id=12下载

1.3无法打开文件

在IAR中怎样修改一下路径,假若不复制到C盘,编译时会出错,显示could not open source file"C:\TexasInstruments\..."

这个取决于你安装IAR的路径,如果IAR安装在D盘,就必须拷贝在D盘中,如果想在其他路径,就需要重新加载工程文件

1.4 Segment CSTACK (size: 0x50 align: 0x1) is too long

“Error[e16]: Segment CSTACK (size: 0x50 align: 0x1) is too long for segment definition. At least 0x50 more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)CSTACK+_STACK_SIZE#", ”

此错误是所定义的全局变量和数组缓冲区等所占的RAM超出硬件支持所致:size: 0x50 为超出的大小。只要减少不要的全局变量和尽量缩小数组缓冲区就可以了。

1.5 Last line of file ends without a new line

Warning[Pe001]: last line of file ends without a new line F:\emoTion\IAR\PK\CC1110-8\main.c 179

在使用IAR时常常会弹出类似这样一个警告,其实只要在最后一行多加一个回车就不会再有这个警告了。

1.6 Undefined external“UART1_ISR”referred in startup

在编写一个串口程序时:编译没有错,但MAKE时就出现下面的错误undefined

external“UART1_ISR”referred in startup。

串口1中断向量没有定义,实际上是串口1中断向量定义其他名称,而不是UART1_ISR。

1.7 Could not open source file

Fatal Error[Pe005]: could not open source file "stdio.h" 这是什么原因?

是因为头文件路径不对造成,改正的方法是在设置选项卡的C/C++ Compiler -> Preprocessor选项里,将$TOOLKIT_DIR$\INC\CLIB\添到Include paths中。($TOOLKIT_DIR$指IAR的安装路径,一般用到标准库函数时要将它写入Include paths里面) 如果是ZigBee协议栈,请把协议栈复制至IAR安装盘根目录(如C:\)即可。

1.8 Too much object code produced for this package

Fatal Error[e89]: Too much object code produced (more than 0x1000 bytes) for this package 是4K限制版,请使用有非限制版的。

1.9协议栈如何生成HEX文件

在协议栈基本是采用了默认设置,其主要设置如下:

(1)General Options, Code Model Bankedr

information”按默认选择CC2430,如果该选项没有,请在如下目录下将其加 “Derivative

载CC2430.i51(自己创建一个新的工程时这项操作是必须的),Embedded Workbench 4.05 \8051\config\derivatives\Chipcon

(2)Code bank如下图设置

(3)Stack/ heap 设置如下:

(4)设置linker

在output标签中进行如下设置:

Output file中填上你想要生成的HEX文件名,记住后缀一定要是Hex。

在Format中选择other,设置如图

(5)在linker的Extra option中添加如下代码(注意写成一行):

-M(CODE)_BANK1A-1FFFF,28000-2FFFF,38000-3DFFF,3F000-3fff7=(_CODE_END+1)-0xFF FF,0x10000-0x17FFF,0x18000-0x1DFFF,0x1F000-0x1FFF7

1.10 IAR下载程序时,提示Flash被锁

使用程序下载软件下载任意一个HEX文件。

二、ZigBee开发系统类

2.1C51RF-3仿真器无法下载程序

1、请检查硬件连接是否正确。

注:不同系统连接可能不尽相同,请注意区别

2、请复位仿真器。

3、请确认下载驱动成功安装。

驱动路径:C:\Program Files\IAR Systems\Embedded Workbench 4.05 Evaluation version\80 51\drivers\ Chipcon),

4、请检查USB连接线是否完好,更换另一根USB连接线试一次。

5、请更换另一个模块试一次。

6、请更换另一个计算机USB接口试一次。

7、请与我们联系。

三、ZigBee协议栈程序类

3.1ZigBee模块(CC2430)ADC参考电压,转换速率,测量值转换成电压计算公式

ADC参考电压描述如下:

模拟数字转换的正参考电压可选择为一个内部生成的1.25V电压,A VDD_SOC引脚,适用于AIN7输入引脚的外部电压,或适用于AIN6-AIN7输入引脚的差分电压。可以选择参考电压作为ADC的输入,以执行一个参考电压的转换。比如,为了校准的目的。同样地,它有可能选择终端GND接地作为输入。

ADC转换速率( 50k-7.5k)

ADC转换计算公式

数字转换结果以2的补码形式表示。对于14位的分辨率,当模拟输入等于VREF时,数字转换结果是8191,当模拟输入等于-VREF 时,转换结果是-8192,其中VREF是所选的正参考电压。

当ADCCON1.EOC设置为1时,数字转换结果是可以获得的,且结果放在ADCH和ADCL中。

当读取ADCCON2.SCH 位时,它们将指示ADCL 和ADCH 是哪个通道的转换结果。

转换结果最大8191。第十四位(最高位)是符号位;0是正数;1是负数。即:测量范围是负参考电压---正参考电压

测量值转换成电压计算公式

1.X = 满量程值 = 2^(采样位数)。

2.Y = 参考电压。

3.每单位采集值 = Y/X。

3.2如何读出ZigBee模块CC2430的RSSI值

以“\C51RF-3演示程序\菜单综合测试程序”为例。

printRSSI(receiveBuffer[length]); //这个函数显示出RSSI值。

为什么RSSI寄存器值需要减去45?

CC2430有一个内置的接收信号强度指示器(RSSI),其数字值为8 位有符号的二进制补码,可以从寄存器位RSSIL.RSSI_V AI读出。

RSSI值总是通过8个符号周期内(128μs)取平均值得到。RSSI 寄存器值RSSI.RSSI_V AI 在RF引脚上涉及电能P,由下式表示:

P = RSSI_V AL + RSSI_OFFSET [dBm]

式中:RSSI_OFFSET是一个系统开发期间得到的来自前端增益的经验值。RSSI_OFFSET近似值为-45。例如,从RSSI寄存器中读到的值是-20,那么RF的输入功率大约是-65dBm。

典型的作为输入功率功能的RSSI_V AI 如图所示。从图中可以看到,从CC2430中读出的RSSI 值线性极好,且具有大约100dB的动态范围。

在系统开发RSSI_OFFSET期间,被发现前端增益RSSI_OFFSET约为-45。

例如: 如果读值-20从接收信号强度指示登记,射频输入功率约为-65dBm的。3.3ZigBee模块CC2430的I/O第2功能

3.4ZigBee网络中怎么实现任意两个节点间数据传输

在同一ZigBee网络内各节点间传输数据时, 节点会根据ZigBee路由自动查找最合适的通讯链路;并根据通讯链路安全的将数据传输到目的节点。这个过程是自动完成的。

但值得注意的一点时,ZigBee各种类型的设备中,只有路由器和协调器才具备数据转发功能,因此用户在网络中需要根据节点通讯距离和现场环境合理的分布路由器的位置。

为了实现点对点通信,还可以使用ZigBee的绑定功能。

3.5如何观察ZigBee路由功能

首先准备三个节点,并取下实验节点的天线,以人为降低ZigBee节点的通讯距离,以达到在很小的空间实验路由功能的目的。

依次上电协调器和节点A,并通过它们之间的通讯,来测试出两者的最大通讯距离。

拉远协调器与节点A之间的距离,使他们之间无法通信,此时打开路由器A电源,使路由器A加入网络,此时发现节点A可以与协调器通信。

3.6网络拓扑类型修改

 在nwk_globals.h文件,修改网络类型:

#define STACK_PROFILE_ID GENERIC_STAR

// HOME_CONTROLS 树状(网状)网络

// GENERIC_STAR 星状网络

3.7ZigBee通道(信道)修改

ZigBee规范规定了三个可以用的频段,共计27个通道。

在868M频段上, IEEE 802.15.4/ZIGBEE规范规定了1个通道。

在915M频段上, IEEE 802.15.4/ZIGBEE规范规定了10个通道,每两M间隔一个通道。

在2.4G频段上,IEEE 802.15.4/ZIGBEE规范规定了16个通道。

从 2.405GHz-2.480GHz 间分布,信道间隔是5M,具有很强的信道抗串扰能力。

在F8wConfig.cfg; 修改频道如下图:

3.8网络号(PAN ID)修改

在F8wConfig.cfg; 修改PAN ID修改如下图:

如果ZDAPP_CONFIG_PAN_ID被定义为0xFFFF,那么协调器将根据自身的IEEE地址建立一个随机的PANID(0~0x3FFF),如ZDAPP_CONFIG_PAN_ID没有被定义为0xFFFF,那么网络的PANID将由ZDAPP_CONFIG_PAN_ID确定。

这个随机的PANID并非完全随机,它有规律,与IEEE地址有一定的关系:要么就是IEEE地址的低16位,要么就是一个与IEEE地址低16位非常相似值。如IEEE地址为0x8877665544332211,PANID很有可能就是2211或相似值;IEEE地址为0x8877665544337777,PANID很有可能就是3777或其它相似值。注:如上仅是小量实验结果,无法确认是否完全正确,请用户自行分辨。

3.9 ZigBee设备类型修改

ZigBee规范定义了3种类型的设备,每种都有自己的功能要求:ZigBee协调器是启动

和配置网络的一种设备。协调器可以保持间接寻址用的绑定表格,支持关联,同时还能设计信任中心和执行其它活动。协调器负责网络正常工作以及保持同网络其它设备的通信。一个ZigBee网络只允许有一个ZigBee协调器。

ZigBee路由器是一种支持关联的设备,能够将消息转发到其它设备。ZigBee网格或树型网络可以有多个ZigBee路由器。ZigBee星型网络不支持ZigBee路由器。

ZigBee终端设备可以执行它的相关功能,并使用ZigBee网络到达其它需要与其通信的设备。它的存储器容量要求最少。

上述的三种设备根据功能完整性可分为全功能(FFD)和半功能(RFD)设备。其中全功能设备可作为协调器、路由器和终端设备,而半功能设备只能用于终端设备。一个全功能设备可与多个RFD设备或多个其它FFD设备通信,而一个半功能设备只能与一个FFD通信。

在ZigBee无线网络中共有3种设备类型,分别是协调器(COORDINATOR)、路由器(ROUTER)和终端节点(ENDDEVICE)。

在ZGlobals.h 文件中,通过zgDeviceLogicalType 这个参数来设置设备的类型。 zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR //协调器; zgDeviceLogicalType = ZG_DEVICETYPE_ROUTER; //选择ZigBee设备为路由器zgDeviceLogicalType = ZG_DEVICETYPE_ENDDEVICE //选择ZigBee设备为终端节点 zgDeviceLogicalType = ZG_DEVICETYPE_SOFT//选择ZigBee设备变动的类型设备定义为:ZG_DEVICETYPE_SOFT这种类型的作用,当ZMAC_ASSOC_CAPINFO_FFD_TYPE 定义为FFD时,设备启动上电检测网络中有无协调器,无协调器就申请成为协调器;如果有协调器,就成为路由器。如果有路由器,则申请成为另一个网络协调器。

3.10ZigBee发射功率修改

在mac_radio_defs.h文件内。

#define MAC_RADIO_TX_POWER_DEFAULT 0x1F

#define MAC_RADIO_TX_POWER_MAX_MINUS_DBM 25

在Mac_radio.c文件中,注意修改此2个函数。

void macRadioSetTxPower(uint8 txPower)

macRadioUpdateTxPower(void)

void

3.11ZigBee路由深度、网络容量修改

在nwk_globals.h文件,

#define MAX_NODE_DEPTH 5

在nwk_globals.C文件

byte CskipRtrs[MAX_NODE_DEPTH+1] = {6,6,6,6,6,0};

byte CskipChldrn[MAX_NODE_DEPTH+1] = {20,20,20,20,20,0};

修改如上3个参数,注意此3个参数在多处定义,需要修改多处。

3.12 ZigBee协议栈如何添加创建任务

请查阅光盘内“ZigBee2006协议栈使用指南”文档。

以LED闪烁任务为例:

Hal_drivers.h 创建事件ID

#define HAL_LED_BLINK_EVENT 0x0002

 创建任务

osal_set_event (Hal_TaskID, HAL_LED_BLINK_EVENT); //函数须引用 #include "osal.h" Dal_drivers.c 处理任务;

uint16 Hal_ProcessEvent( uint8 task_id, uint16 events )

任务管理器函数

if ( events & HAL_LED_BLINK_EVENT )

{

#if (defined (BLINK_LEDS)) && (HAL_LED == TRUE)

HalLedUpdate();

#endif /* BLINK_LEDS && HAL_LED */

return events ^ HAL_LED_BLINK_EVENT;

}

 任务定时

osal_start_timerEx(Hal_TaskID, HAL_LED_BLINK_EVENT, next);

//启动定时器,到时间后,重新调用该任务

//函数须引用 #include “OSAL_TIMERS.h”

3.13 节点无法加入ZigBee网络

1、检查PAN ID是否相同。

2、检查通道(信道)是否相同。

3、各节点物理(IEEE)地址是否唯一。

4、各节点物理(IEEE)地址不为“0XFFFFFFFFFFFFFFFF”。

3.14 ZigBee物理地址(IEEE)如何修改,获得

32位物理地址(IEEE)通过专门软件修改,获得。

3.15 ZigBee网络地址如何修改,获得

16位网络地址是由ZigBee网络随机分配得,无法通过指定修改。

通过分析数据包获得网络地址。

ZigBee协调器有一个特殊的网络地址0x0000。网络地址0xffff是广播地址。typedef struct

{

union

{

uint16 shortAddr;

} addr;

afAddrMode_t addrMode;

byte endPoint;

} afAddrType_t;

typedef struct

{

osal_event_hdr_t hdr;

uint16 groupId;

uint16 clusterId;

afAddrType_t srcAddr; //源地址

byte endPoint;

byte wasBroadcast;

byte LinkQuality;

byte SecurityUse;

uint32 timestamp;

afMSGCommandFormat_t cmd;

} afIncomingMSGPacket_t;

在nlmede.h文件内

/*

* This function will return this device's 16 bit short address

* This function resides in nwk_util.c.

*/

extern uint16 NLME_GetShortAddr( void );

根据物理地址获得网络地址。

/*

* This function gets the NWK address based on the EXT address.

*/

extern uint8 APSME_LookupNwkAddr( uint8* extAddr, uint16* nwkAddr );

说明:本问题集是基于成都无线龙公司C51RF-3系列及C51RF-WSN系列等开发系统或实验箱,由于问题是多个系统集成的,不是针对某单一系统,请用户选择性查阅。

相关主题