晚上安装IAR for 51,一直提示not for this host,后来才发现在win7下破解机和安装包均需要用管理员身份运行。之前一直只是运行了安装包。
--------------------------------------------------------------------------------------------------------------------------------------------------------
一、zigbee简介:
0、zigbee的由来
在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷。对工业,家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,而工业自动化对无线通信的需求越来越强烈。正因此,经过人们长期努力,Zigbee协议在2003年中通过后,于2004正式问世了。
1、 什么是zigbee:
zigbee是一个由可多到65000个无线数传模块组成的一个无线数传网络平台,十分类似现有的移动通信的CDMA网或GSM网,每一个zigbee网络数传模块类似移动网络的一个基站,在整个网络范围内,它们之间可以进行相互通信;每个网络节点间的距离可以从标准的75米,到扩展后的几百米,甚至几公里;另外整个zigbee网络还可以与现有的其它的各种网络连接。
每个Zigbee网络节点(FFD和RFD)可以可支持多到31个的传感器和受控设备,每一个传感器和受控设备终可以有8种不同的接口方式。可以采集和传输数字量和模拟量。
简单的说,zigbee就是一种通讯方式,作用就是构建无线局域网。若此局域网用于传感器数据收集、监控,此局域网叫无线传感器网络。
2、 什么时候使用zigbee:
(1).需要数据采集或监控的网点多;
(2).要求传输的数据量不大,而要求设备成本低;
(3).要求数据传输可性高,安全性高;
(4).设备体积很小,不便放置较大的充电电池或者电源模块;
(5).电池供电;
(6).地形复杂,监测点多,需要较大的网络覆盖;
(7).现有移动网络的覆盖盲区;
(8).使用现存移动网络进行低数据量传输的遥测遥控系统。
(9).使用GPS效果差,或成本太高的局部区域移动目标的定位应用。
3、zigbee 技术的特点
省电:两节五号电池支持长达6个月到2年左右的使用时间。
可靠:采用了碰撞避免机制,同时为需要固定带宽的通信业务预留了专用时隙,避免了发送数据时的竞争和冲突;节点模块之间具有自动动态组网的功能,信息在整个Zigbee网络中通过自动路由的方式进行传输,从而保证了信息传输的可靠性。
时延短:针对时延敏感的应用做了优化,通信时延和从休眠状态激活的时延都非常短。
网络容量大:可支持达65000个节点。
安全:ZigBee提供了数据完整性检查和鉴权功能,加密算法采用通用的AES-128。
高保密性:64位出厂编号和支持AES-128加密。
二、zigbee硬件支持:
1、实现方案:
目前ZigBee的实现方案主要有三种:
(1)、MCU和RF收发器分离的双芯片方案:
如: TI CC2420+MSP430 、FREESCLAE MC13XX+GT60
(2)、集成RF和MCU的单芯片SOC方案:
如:TI CC2530 、ST STM32W108、FREESCALE MC1321X 、EM250。
(3)、ZigBee协处理器和MCU的双芯片方案
如: JENNIC SOC+EEPROM、EMBER 260+MCU
2、 cc2530芯片介绍:
(1)、IO口介绍:QFN40封装,工作电压为2v-3.6v(3.3v为推荐电压)。其中有21个IO口(P0 8脚,P1 5脚,P2 8脚),这21个IO口即可作为普通IO口,也可作为片上外设,由对应的寄存器控制。
(2)、寄存器介绍:P0SEL、P1SEL、P2SEL,均为8位,每一位控制对应的IO口是片上外设还是普通的IO口;P0DIR、P1DIR、P2DIR,均为8位,每一位控制对应的IO口是输入还是输出;P0INP、P1INP、P2INP,都为8位,控制对应的IO口是上拉下拉或者三态,其中P1NIP的多余三位控制P0,P1,P2为上拉还是下拉。
(3)、例子:用cc2530使LED灯闪烁
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
//定义控制LED灯的端口
#define LED1 P1_0 //定义LED1为P10口控制
#define LED2 P1_1 //定义LED2为P11口控制
//函数声明
void Delay(uint); //延时函数
void Initial(void); //初始化P1口
/****************************
//延时函数
*****************************/
void Delay(uint n)
{
uint i,t;
for(i = 0;i<5;i++)
for(t = 0;t<n;t++);
}
/****************************
//初始化程序
*****************************/
void Initial(void)
{
P1DIR |= 0x03; //P1_0、P1_1定义为输出
LED1 = 1; //LED1灯熄灭
LED2 = 1; //LED2灯熄灭
}
/***************************
//主函数
***************************/
void main(void)
{
Initial(); //调用初始化函数
LED1 = 0; //LED1点亮
LED2 = 0; //LED2点亮
while(1)
{
LED1 = !LED1; //LED1闪烁
Delay(50000);
}
}
3、 zigbee通讯基本概念
(1)、信道:2.4 GHz的射频频段被分为16个独立的信道(2405--2480)。每一个设备都有一个DEFAULT_CHANLIST的默认信道集。协调器扫描自己的默认信道集并选择一个信道上噪声最小的信道作为自己所建网络的信道。终端节点和路由节点也要扫描默认信道集并选择一个信道上已经存在的网络加入。
(2)、IEEE物理地址:每个ZigBee设备都有一个64位的IEEE长地址,即MAC地址。物理地址是在出厂时候初始化的。它是全球唯一的。当一个zigbee节点加入网络时候,它的IEEE地址不能与网络中现有节点的IEEE地址冲突且不能为0xFFFFFFFFFFFFFFFF。
(3)、网络地址:网络地址也称短地址,通常用16位的短地址来标识自身和识别对方,对于协调器来说,短地址始终为0x0000,对于路由器和节点来说,短地址由其所在网络中的协调器分配。
(4)、PAN ID:PANID指网络编号,用来区分不同的ZigBee网络。协调器是通过选择网络信道及PANID来启动一个无线网络的。PANID的有效范围为0--0x3FFF。
(5)、设备类型:
Coordinator(协调器):
协调器负责启动整个网络。它也是网络的第一个设备。协调器选择一个信道和一个网络 ID(也称之为 PAN ID,即 Personal Area Network ID),随后启动整个网络。
Router(路由器):
路由器的功能主要是:允许其他设备加入网络,多跳路由和协助它自己的由电池供电的儿子终端设备的通讯。
End-Device(终端设备):
终端设备没有特定的维持网络结构的责任,它可以睡眠或者唤醒,因此它可以可以是一个电池供电设备。
三、zigbee软件支持:
1、zigbee软件协议栈:
(1)、freakz协议栈和contiki操作系统
(2)、msstatePAN协议栈(精简版ZigBee协议栈)
(3)、EmberZNet协议栈(ST)
(4)、BeeStack(Freescale )
(5)、SimpliciTI协议栈(TI)
(6)、Z-Stack协议栈和OSAL操作系统(TI)
(7)、TinyOS操作系统
2、Z-stack协议栈的介绍:
协议栈就是符合某一些格式进行数据打包、解开数据包以及一些其他功能的程序,我们在协议栈中加入自己的程序。协议栈中包括OSAL,OSAL的作用是可以将面向过程的程序进行封装成任务,方便我们的调用和程序的编写。
3、任务的介绍:
(1)每个任务有一个全局变量,也就是taskID,用以任务间的区分。
(2)每个任务间用全局变量tasksEvents来通讯
(3)每个任务有一个任务处理函数,用taskArr[id]的十六位地址标志
4、 任务的初始化:
Mainàosal_init_system()àosalInitTask()
|àosal_start_system()
OSAL_GenericApp
--|tasksArr[]àGenericApp_ProcessEvent
--|osalInitTasks(void)à GenericApp_Init( taskID )
|àtasksEvents
GenericApp
--|GenericApp_Init( byte task_id )
--|GenericApp_ProcessEvent( byte task_id, UINT16 events )
任务的初始化就是给每个任务分配taskID,tasksEvents,taskArr[id]
5、 任务的执行:
void osal_start_system(void)
{
for(;;) // Forever Loop
{
uint8 idx = 0;
Hal_ProcessPoll();//这里是轮训任务队列,并检查是否有某个任务的事件发生
do{
if (tasksEvents[idx]) // Task is highest priority that is ready.
{
break;
}
} while (++idx < tasksCnt);
if (idx < tasksCnt)
{
uint16 events;
halIntState_t intState;
HAL_ENTER_CRITICAL_SECTION(intState);
events = tasksEvents[idx]; //处理该idx的任务事件, 是第idx个任务的事件发生了
tasksEvents[idx] = 0; // Clear the Events for this task.
HAL_EXIT_CRITICAL_SECTION(intState);
//对应调用第idx个任务的事件处理函数,用events说明是什么事件
events = (tasksArr[idx])( idx, events );
//当没有处理完,把返回的events继续放到tasksEvents[idx]当中
HAL_ENTER_CRITICAL_SECTION(intState);
tasksEvents[idx] |= events; // Add back unprocessed events to the current task.
HAL_EXIT_CRITICAL_SECTION(intState);
}
else // Complete pass through all task events with no activity?
{
osal_pwrmgr_powerconserve(); // Put the processor/system into sleep
}
}
}
------------------------------未完,zigbee组网通讯---------------------------------------------------------------------------------------