CC2530简介课件(PPT 84页)_第1页
CC2530简介课件(PPT 84页)_第2页
CC2530简介课件(PPT 84页)_第3页
CC2530简介课件(PPT 84页)_第4页
CC2530简介课件(PPT 84页)_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CC2530简介1第1页,共84页。CC2530芯片CC2530是基于2.4GHz IEEE802.15.4、ZigBee和RF4CE上的一个片上系统解决方案。其特点是以极低的总材料成本建立较为强大的网络节点。CC2530 芯片结合了RF 收发器,增强型8051 CPU,系统内可编程闪存,8KB SRAM 和许多其他模块的强大的功能。CC2530 主要有四种不同的闪存版本:CC2530F32/64/128/256(32/64/128/256KB闪存)其具有多种运行模式,使得它能满足超低功耗系统的要求。同时CC2530运行模式之间的转换时间很短,使其进一步降低能源消耗。2第2页,共84页。CC2

2、530片内结构方框图数字模拟混合输入/输出控制器XOSC_Q2 RESET_N XSOC_Q1 P2_4 P2_3 P2_2 P2_1 P2_0 P1_4 P1_3 P1_2 P1_1 P1_0 RF_PP1_7 P1_6 P1_5 P1_4 P1_3 P1_2 P1_1 P1_0 P1_7 P1_6 P1_5 复位看门狗片上稳压器32MHz晶振高速RC-OSC上电/复位/掉电32.768KHz晶振32.768KHzRC-OSC睡眠定时器调试接口多路时钟校准睡眠模式控制器DMA8051CPU内核存储器仲 裁32/64/128/256KB FLASH8KB SRAMADC音频/直流8通道AES加

3、密和解密IRQ控制FLASH写射频寄存器CSMA/CA选通处理器USART1USART2射步数据接口定时器1(16位)定时器2IEEE 802.15.4 MAC定时器定时器3(8位)定时器4(8位)调制器解调器自动增益控制频率合成器接收链RF_N先进选出和帧控制发送链VDD(2.03.6V)DCOUPL3第3页,共84页。CC2530引脚描述(1)4第4页,共84页。CC2530引脚描述(2)5第5页,共84页。CC2530封装6第6页,共84页。CC2530需要极少的外部连接元件,同时有很多典型电路,其模块大致可以分为三类: 1、CPU和内存相关模块 2、外设,时钟和电源管理相关模块 3、无

4、线信号收发相关模块CC2530芯片内部结构7第7页,共84页。强大的5通道DMAIEEE 802.15.4 MAC定时器,通用定时器(一个16位定时器,一个8位定时器)IR发生电路(IR 中断)具有捕获功能的32-kHz睡眠定时器硬件支持CSMA/CA(载波侦听多路访问冲突避免) 支持精确的数字化RSSI/LQI(链路质量指示 )电池监视器和温度传感器21个通用I/O引脚看门狗定时CC2530的外设(1)8第8页,共84页。两个8位定时器:定时器3,4为8位定时器,有一个可编程分频器,一个8位的周期值,一个计数器通道。MAC定时器:专为MAC或其他协议而设的定时器,可以跟踪已过周期,同时可以记

5、录收发某一的帧精确时间和传输结束时间,以便产生不同的选通命令到无线模块ADC:支持7到12位的分辨率,带宽范围为7-30kHz,在DC与音频转换时,能够使用8个输入通道。AES加密/解密内核:CC2530用128位的AES算法进行加密或解密数据,从而保证了ZigBee网络层和应用层的安全要求。USART0和USART1分别被配置为一个主从或一个UART,其功能是为RX和TX提供双缓冲,以及硬件流控制。调试接口:用于内部电路调试,具有两线串形接口I/O控制器:负责所有的通用的I/O引脚CC2530的外设(2)9第9页,共84页。 CC2530具备一个IEEE802.15.4兼容无线收发器,其中的

6、RF内核控制模拟无线模块,另外它还提供了一个连接外部设备的端口,从而可以发出命令和读取状态,操纵各执行电路的事件顺序。同时无线设备还包括数据包过虑模块和地址识别模块。无线设备10第10页,共84页。CC2530最小系统11第11页,共84页。CC2530的典型应用12第12页,共84页。输入输出匹配:当使用单极子的一个不平衡天线,需要用一个巴伦(平衡非平衡转换器 )来对性能进行优化,可以采用低成本分立电感或电容来实现,这里主要运用C262,L261,C252,L252.如果使用了诸如折叠偶极子这样的平衡天线,巴伦可以忽略。1.8V片上稳压器:用以提供1.8V的数字逻辑电压,采用这一个稳压器要求

7、用一个去耦电容C401来获得稳定运行效果。电源去耦和过滤必须使用合适的电源去耦以获得最佳的性能。在一个应用中去耦电容和电源过滤的位置和尺寸对获得最佳性能是非常重要的。TI 提供了一个紧凑的参考设计,应该很好地遵循。晶振 32MHz 晶振使用了一个外部32-MHz 振荡器XTAL1 和两个负载电容(C221 和C231)。晶振 XTAL2 是一个可选的32.768 kHz 晶振,有两个负载电容(C321 和C331)用于32.768-kHz晶振。32.768 kHz 晶振用于要求非常低的睡眠电流消耗和精确唤醒时间的应用。元件说明13第13页,共84页。CC2530模块传感器板14第14页,共84

8、页。步进电机结点15第15页,共84页。CC Debug仿真器16第16页,共84页。CC2530使用的8051CPU是一个单周期的兼容内核,它有三种不同的访问总线。其中包括中断控制器,内存仲裁器,8KB SRAM,32/64/128/256KB闪存块。增强型8051 内核使用标准的8051 指令集。因为以下原因指令执行比标准的8051更快:每个指令周期是一个时钟,而标准的8051 每个指令周期是12个时钟消除了总线状态的浪费。因为一个指令周期与可能的内存存取是一致的,大多数单字节指令在一个时钟周期内执行。除了速度提高之外,增强型8051 内核还包括结构上的改善。第二个数据指针一个扩展的18源

9、中断单元8051 内核的对象代码兼容业界标准的8051 微控制器。即对象代码使用8051 内核上执行的业界标准的8051编译器或汇编器编译,在功能上是等同的。CC2530的CPU17第17页,共84页。CC2530的CPU中断控制器:其为18个中断源提供服务,它们中的每个中断都被赋予4 个中断优先级中的某一个。内存仲裁器:位于系统中心,它负责执行仲裁,即决定同时访问系统物理存储器时的顺序,便于系统效率的提高。8 KB SRAM:为超低功耗的SRAM,使数字部分即使掉电也能保存其中内容,是芯片低功耗原因所在。闪存块:用于保存电脑传输进入的程序代码以及常量数据,节约了搜寻时间。18第18页,共84

10、页。CC2530的存储器CC2530里的四种存储空间:CODE程序存储器:用处存放程序代码和一些常量,寻址范围 0000HFFFFH 共64KB。DATA:内部数据存储空间,可以直接或间接被一个单周期CPU指令访问。这一存储空间是256B。其中较低的128B可以直接或间接寻址,较高的128B只能间接寻址。XDATA:外部数据存储空间,通常需要4-5个CPU指令周期来访问。这一存储空间是64KB。访问XDATA 存储器慢于访问DATA,因为CODE 和XDATA 存储空间共享CPU 内核上的一个通用总线。SFR:寄存器存储空间,可以直接被一个CPU指令访问。这一存储空间含有128字节。对于地址是

11、被8 整除的SFR 寄存器,每一位还可以单独寻址。 这四个存储空间在8051 结构中是分开的,但是在设备中有部分是重叠的,以减轻DMA 传输和硬件调试操作的负担。19第19页,共84页。CC2530的XDATA存储器映射为使DMA 访问全部物理存储空间,并由此使得DMA 在不同8051存储空间之间进行传输,CODE和SFR部分存储空间映射到XDATA存储空间。XDATA较高的32KB是一个只读区域(XBANK),任何可用的32KB闪存区均可以映射到这里。这使得软件可以访问整个闪存存储器。这一区域主要用作存储另外的常量数据。20第20页,共84页。CC2530的CODE存储器映射机制一 机制一是

12、标准的8051映射,只有程序存储器(即闪存)映射到CODE 存储空间, 这是复位后默认映射方式。RootBankFMAP.MAP2:0确定过来的Bank21第21页,共84页。CC2530的CODE存储器映射机制二22第22页,共84页。CPU 存储空间SRAM 映射到的地址范围是0 x0000 到(SRAM_SIZE 1)。XREG 区域映射到1KB 地址区域(0 x60000 x63FF)。这些寄存器是另外的寄存器,有效地扩展SFR 寄存器空间。一些外设寄存器和大多数无线电控制和数据寄存器映射到这里。SFR 寄存器映射到地址区域(0 x70800 x70FF)。闪存信息页面(2 KB)映射

13、到地址区域(0 x78000 x7FFF)。这是一个只读区域,包含有关设备的各种信息。XDATA 存储空间(0 x80000 xFFFF) 的较高32KB 是一个只读的闪存代码区( XBANK),可以使用MEMCTR.XBANK2:0位映射到任何一个可用的闪存区。闪存存储器SRAM 和寄存器到XDATA 的映射允许DMA 控制器和CPU 访问在一个统一的地址空间内的所有物理存储器。写入存储映射中未执行的区域(图中的阴影部分)没有影响。从为执行的区域读出返回0 x00。写只读区域比如闪存区域将被忽略。23第23页,共84页。物理存储器闪存存储器:片上闪存存储器主要是为了保存程序代码和常量数据。闪

14、存存储器有以下功能:页面大小:2 KB闪存页面擦除时间:20ms闪存芯片(批量)擦除时间:20ms闪存写时间(4 字节):20s数据保留(室温下):100 年编程/擦除次数:20,000 次信息页面是一个2 KB 的只读区域,存储设备信息。其他信息中它包括来自TI 地址范围的一个唯一的IEEE地址。它以最低位优先的形式存储在XDATA 地址0 x780C。将出版一个单独的设计说明,详细介绍信息页面的内容。SFR寄存器:特殊功能寄存器(SFR)控制8051CPU内核和/或外设的一些功能。许多8051CPU内核的SFR和标准的8051SFR 相同。但是有一些控制功能的另外的SFR,是标准8051

15、中所没有的。另外的SFR 用于和外设单元以及RF 收发器接口。24第24页,共84页。与端口有关的寄存器寄存器名称地址描 述端口P00 x80端口0。可从XDATA(0 x7080)只读。P10 x90端口1。可从XDATA(0 x7090)只读。P20 xA0端口2。可从XDATA(0 x70A0)只读。寄存器名称地址描 述端口控制寄存器P0SEL0 xF3端口0功能选择(0-通用I/O,1-外围功能)P1SEL0 xF4端口1功能选择(0-通用I/O,1-外围功能)P2SEL0 xF5端口2功能选择(0-通用I/O,1-外围功能)P0INP0 x8F端口0 输入模式(0-三态,1-上拉)P

16、1INP0 xF6端口1输入模式(0-三态,1-上拉)P2INP0 xF7端口2输入模式(0-三态,1-上拉)P0DIR0 xFD端口0方向选择(0-输入,1-输出)P1DIR0 xFE端口1方向选择(0-输入,1-输出)P2DIR0 xFF端口2方向选择(0-输入,1-输出)25第25页,共84页。以下代码使P1_0引脚电平每隔一定时间反向一次:#include #define BLED P1_0 / 定义LED为P1_0口控制void main() unsigned int d; P1SEL &= 0 x01; / 选择P1_0为通用I/O引脚 P1DIR |= 0 x01; / I/O方

17、向选择为输出 while(1) for(d=0; d30000; d+); / 延时 BLED = BLED; / 电平反向,LED闪烁 26第26页,共84页。将P1_2设为三态输入,读取按键状态#define key P0_1 P0SEL &= 0X02; / P0_1作为通用I/O口P0DIR &= 0X02; / P0_1输入P0INP |= 0 x02; / P0_1上拉uchar key_scan(void)if(key = 0) / 低电平有效 delay(100); / 延时消抖动 if(key = 0) / 处理按键事件 while(!key); / 直到松开按键 27第27

18、页,共84页。定时器T1(1)16 位递增或递减计数器由CLKCON.TICKSPD定义活动时钟边沿周期,它设置从0.25MHz到32MHz的不同的时钟标签频率(可以使用32 MHz XOSC 作为时钟源)。由T1CTL.DIV设置分频器值可以从1、8、32 或128。 因此当32 MHz 晶振用作系统时钟源时,定时器1 可以使用的最低时钟频率是1953.125Hz,最高是32 MHz。28第28页,共84页。可以通过两个8 位的SFR读取16位的计数器值:T1CNTH 和T1CNTL,分别包含在高位字节和低位字节中。当读取T1CNTL 时,计数器的高位字节在那时被缓冲到T1CNTH,以便高位

19、字节可以从T1CNTH 中读出。因此T1CNTL 必须总是在读取T1CNTH 之前首先读取。对T1CNTL 寄存器的所有写入访问将复位16 位计数器。当达到最终计数值(溢出)时,计数器产生一个中断请求。可以用T1CTL 控制寄存器设置启动并停止该计数器。当一个不是00 值的写入到T1CTL.MODE 时,计数器开始运行。如果00 写入到T1CTL.MODE,计数器停止在它现在的值上。一般来说控制寄存器T1CTL 用于控制定时器操作。状态寄存器T1STAT 保存中断标志。定时器T1(2)29第29页,共84页。与定时器1有关的寄存器寄存器名称地址描 述T1CC0L0 xDA通道0捕获/比较值低字

20、节T1CC0H0 xDB通道0捕获/比较值高字节T1CC1L0 xDC通道1捕获/比较值低字节T1CC1H0 xDD通道1捕获/比较值高字节T1CC2L0 xDE通道2捕获/比较值低字节T1CC2H0 xDF通道2捕获/比较值高字节T1CNTL0 xE2计数器低字节T1CNTH0 xE3计数器高字节T1CTL0 xE4控制T1CCTL00 xE5通道0捕获/比较控制T1CCTL10 xE6通道1捕获/比较控制T1CCTL20 xE7通道2捕获/比较控制T1STAT0 xAF状态常用30第30页,共84页。T1CTL 定时器1 的控制和状态位名称复位R/W描 述7:4-0000RO保留3:2DI

21、V1:000R/W分频器划分值。产生主动的时钟边缘用来更新计数器,如下:00:标记频率/101:标记频率/810:标记频率/3211:标记频率/1281:0MODE1:000R/W选择定时器1模式。定时器操作模式通过下列方式选择:00:暂停运行。01:自由运行,从0 x0000到0 xFFFF反复计数10:从0 x0000到T1CC0反复计数。11:正计数/倒计数,从0 x0000到T1CC0反复 计数并且从T1CC0倒计数到0 x000031第31页,共84页。T1STAT定时器1状态寄存器位名称复位R/W描 述7:6-0R0保留5OVFIF0R/W0定时器1计数器溢出中断标志。当计数器在自

22、由运行或模模式下达到最终计数值时设置,当在正/倒计数模式下达到零时倒计数。写1没有影响。4CH4IF0R/W0定时器1通道4中断标志。当通道4中断条件发生时设置。写1没有影响。3CH3IF0R/W0定时器1通道3中断标志。当通道3中断条件发生时设置。写1没有影响。2CH2IF0R/W0定时器1通道2中断标志。当通道2中断条件发生时设置。写1没有影响。1CH1IF0R/W0定时器1通道1中断标志。当通道1中断条件发生时设置。写1没有影响。0CH0IF0R/W0定时器0通道0中断标志。当通道0中断条件发生时设置。写1没有影响。32第32页,共84页。利用定时器中断实现指示灯的闪烁#include

23、#define uint unsigned int#define uchar unsigned char#define RLED P1_0/ 定义LED1为P10口控制#define YLED P1_1/ 定义LED2为P11口控制uint counter=0;/ 统计溢出次数uint LEDFlag;/ 标志是否要闪烁void InitialT1test(void) / T1初始化程序P1DIR = 0 x03; / 初始化LED控制端口P1 ,P10 P11为输出RLED = 0;YLED = 0;T1CTL = 0 x05; / 初始化计数器1 T1STAT= 0 x21; / 通道0,

24、中断有效,8分频 / 自动重装模式(0 x0000-0 xffff) 33第33页,共84页。利用定时器中断实现指示灯的闪烁void main() /主函数InitialT1test(); / 调用初始化函数 while(1) / 查询溢出 if(IRCON 0) /中断标志寄存器,其中bit1为T1IF IRCON = 0; / 清溢出标志 counter+; if(counter=15) / 中断计数,约0.25s counter = 0; LEDFlag = !LEDFlag; if(LEDFlag) YLED = RLED; RLED = !RLED; / 每 1s LED灯闪烁一下

25、LEDFlag = !LEDFlag; / 闪烁标志变量置0 34第34页,共84页。串口0使用(初始化)void initUARTSEND(void) CLKCONCMD &= 0 x40; / 设置系统时钟源为32MHZ晶振 while(CLKCONSTA & 0 x40); / 等待晶振稳定 CLKCONCMD &= 0 x47; / 设置系统主时钟频率为32MHZ PERCFG = 0 x00; / 位置1 P0口 P0SEL = 0 x3c; / P0_2, P0_3, P0_4, P0_5用作串口 P2DIR &= 0XC0; / P0优先作为UART0 U0CSR |= 0 x8

26、0; / UART方式 U0GCR |= 9; U0BAUD |= 59; / 波特率设为19200 UTX0IF = 0; / UART0 TX中断标志初始置位0函数功能: 将系统时钟设为高速晶振,将 P0口设置为串 口0功能引脚,串口0使用UART模式,波特率设为19200,允许接收。该函数在使用串口之前调用。CLKCONCMDCLKCONSTAPERCFGU0CSRU0GCRU0BAUDUTX0IF35第35页,共84页。串口0使用(发送字符串)void UartTX_Send_String(char *Data,int len) int j; for(j=0;jlen;j+) U0DB

27、UF = *Data+; while(UTX0IF = 0); UTX0IF = 0; 函数功能:串口发送数据, *data 为发送缓冲的指针,len 为发送数据的长度该函数在初始化串口后才可以正常调用。36第36页,共84页。#include #include #define RLED P1_0 / 定义控制灯的端口#define GLED P1_1char Txdata25=XWWK Test Data!;void main(void)uchar i; P1DIR = 0 x03; / P1_0, P1_1输出,控制LED RLED = 1; / RLED灭 GLED = 0; / GLE

28、D亮 initUARTSEND(); UartTX_Send_String(Txdata,25); for(i=0;i30;i+) Txdatai = ; strcpy(Txdata,HELLO ); / 将UART0 TX test赋给Txdata;while(1) UartTX_Send_String(Txdata, sizeof(HELLO); / 串口发送数据 Delay(50000); / 延时 GLED = !GLED; / GLED闪烁 Delay(50000); Delay(50000);串口0使用(主函数)37第37页,共84页。通过内置温度传感器实现温度采集(初始化)/*温

29、度传感器初始化函数*/void initTempSensor(void) DISABLE_ALL_INTERRUPTS(); / 关闭所有中断 InitClock(); / 设置系统主时钟为32M *(BYTE _xdata*) 0 x624B) = 0 x01; / 开启温度传感器 *(BYTE _xdata*) 0 x61BD) = 0 x01; / 将温度传感器与 / ADC连接起来void InitClock(void) CLKCONCMD = 0 x28; /设定计数器时钟为1M Hz, 系统时钟为32 MHz while(CLKCONSTA & 0 x40); /等晶振稳定#def

30、ine DISABLE_ALL_INTERRUPTS() (IEN0 = IEN1 = IEN2 = 0 x00)38第38页,共84页。INT8 getTemperature(void) UINT8 i; UINT16 AdcValue; UINT16 value; AdcValue = 0; for( i = 0; i 2; / ADCL寄存器低2位无效 value |= (UINT16)ADCH) 2; / 累加除以4,得到平均值 return ADC14_TO_CELSIUS(value); / 根据AD值,计算出实际的温度通过内置温度传感器实现温度采集(读AD值)#define AD

31、C_SINGLE_CONVERSION(settings) do ADCCON3 = (settings); while(0)#define ADC_SAMPLE_SINGLE() do ADC_STOP(); ADCCON1 |= 0 x40; while (0)00HHHHHHADCHLLLLLLXXADCL0000HHHH00LLLLLLHH0000000000HHHHHHLLLLLL#define ADC14_TO_CELSIUS(ADC_VALUE) ( (ADC_VALUE) 4) - 335)#define ADC_SAMPLE_READY() (ADCCON1 & 0 x80)

32、39第39页,共84页。void main(void)char i; char TempValue10; InitUART0(); / 初始化串口initTempSensor(); / 初始化ADC while(1) AvgTemp = 0; for(i = 0 ; i = 1; / 每次累加后除2. sprintf(TempValue, (char *)%dC , (INT8)AvgTemp); UartTX_Send_String(TempValue, 4); Delay(50000); 通过内置温度传感器实现温度采集(主函数)40第40页,共84页。CC2530 Basic RF(简单无

33、线点对点传输协议)Basic RF 由TI 公司提供,它包含了IEEE 802.15.4 标准的数据包的收发。这个协议只是用来演示无线设备是如何进行数据传输的,不包含完整功能的协议。但是它采用了与802.15.4 MAC兼容的数据包结构及ACK 包结构,其功能限制如下:不提供“多跳”、“设备扫描”及Beacon(信标 )。不提供不同种的网络设备,如协调器、路由器等,所有节点同级,只实现点对点传输。传输时会等待信道空闲,但不按802.15.4 CSMA-CA 要求进行两次CCA 检测。不重传数据。简言之,Basic RF 不适合直接用于产品的开发,但可用来进行无线设备数据传输的入门学习。41第4

34、1页,共84页。Basic RF 工作原理(2)启动创建一个basicRfCfg_t 的数据结构,并初始化其中的成员。调用basicRfInit()函数进行协议的初始化。数据发送1. 创建一个buffer,把payload放入其中。2. 调用basicRfSendPacket()函数发送。数据接收上层通过basicRfPacketIsReady()函数来检查是否收到一个新的数据包,调用basicRfReceive()函数,把收到的数据复制到buffer 中。42第42页,共84页。基于Basic RF的无线灯光控制实验程序功能是一个基本的点对点通信实验,实现了一个节点板上的开关控制另一个节点板

35、上的LED的功能。每一个节点是用来做开关还是用来做灯的控制器,可以通过源程序的不同定义进行选择。可作为一个无线通信的入门级程序。TI例程工程名:cc2530_sw_examples.eww43第43页,共84页。baseRF通信基本流程1. 初始化网络地址,打开接收机。2. 初始化basicRfConfig,确定网络ID、信道。3. 初始化外围设备,如时钟、各个I/O口等。4. 事件的处理,如发送报文或接受报文后的数据处理等。44第44页,共84页。初始化网络(1)void main(void)/ 射频配置 basicRfConfig.panId = PAN_ID; basicRfConfig

36、.channel = RF_CHANNEL; basicRfConfig.ackRequest = TRUE; / 要求接受方应答 / IO初始化 halBoardInit(); / 初始化指示灯和按钮 initUART0(); / 初始化串口 / RF初始化 if(halRfInit()=FAILED) HAL_ASSERT(FALSE); 45第45页,共84页。初始化网络(2)uint8 halRfInit(void) / 上电设置默认参数 FRMCTRL0 |= (AUTO_ACK | AUTO_CRC); / 推荐的RX设置 TXFILTCFG = 0 x09;/TX过滤器配置寄存器

37、 AGCCTRL1 = 0 x15; / AGC控制寄存器 FSCAL1 = 0 x00; / 调整频率校准 halRfEnableRxInterrupt(); / 使能RX中断 return SUCCESS;void halRfEnableRxInterrupt(void) / enable RXPKTDONE interrupt RFIRQM0 |= 1 0) if(pRxData0 = LIGHT_TOGGLE_CMD) UartTX_Send_String(UartData,17); / 向串口发送测试数据 halLedToggle(LED_RED); / 改变状态 Wait(3);

38、halLedToggle(LED_RED); / 改变状态 接收函数(点亮LED)49第49页,共84页。发送数据包函数(1)uint8 basicRfSendPacket(uint16 destAddr, uint8* pPayload, uint8 length) uint8 mpduLength; uint8 status; if(!txState.receiveOn) / 如果没有打开接收机 halRfReceiveOn(); length = min(length, BASIC_RF_MAX_PAYLOAD_SIZE); / 包长度 halRfWaitTransceiverReady

39、(); / 等到收发空闲 halRfDisableRxInterrupt(); /关闭接收帧完成中断避免对SPI接口的干扰 mpduLength = basicRfBuildMpdu(destAddr, pPayload, length); halRfWriteTxBuf(txMpdu, mpduLength); halRfEnableRxInterrupt(); /打开接收帧ACK接收完成中断 if(halRfTransmit() != SUCCESS) /如果发送帧不成功,返回失败 status = FAILED; 50第50页,共84页。发送数据包函数(2)if (pConfig-ack

40、Request) /等待确认被接受 ; /自动进入接收 halMcuWaitUs(12 * BASIC_RF_SYMBOL_DURATION) + (BASIC_RF_ACK_DURATION) + (2 * BASIC_RF_SYMBOL_DURATION) + 10); status = txState.ackReceived ? SUCCESS : FAILED; else status = SUCCESS; if (!txState.receiveOn) halRfReceiveOff(); /关掉接收机 if(status = SUCCESS) txState.txSeqNumber

41、+; return status;51第51页,共84页。Z-Stack协议栈软件层次(1)APP 用户应用程序目录HAL 硬件接口层目录MAC、NWK 底层封装目录(无源码)MT 串口操作工具目录OSAL 操作系统抽象层目录ZMAIN 协议栈入口目录ZDO 设备对象层管理代码目录TOOL 工程配置文件目录(信道、PANID)52第52页,共84页。 整个Z-Stack采用分层的软件结构,硬件抽象层(HAL)提供各种硬件模块的驱动,包括定时器Timer,通用I/O口GPIO,通用异步收发传输器UART,模数转换ADC的应用程序接口API,提供各种服务的扩展集。 操作系统抽象层OSAL实现了一个

42、易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。用户可以调用OSAL提供的相关API进行多任务编程,将自己的应用程序作为一个独立的任务来实现。Z-Stack协议栈软件层次(2)53第53页,共84页。工程的选择设备类型协调器路由器节点设备开发板类型EB54第54页,共84页。工程的配置(1)预编译宏 Z-Stack协议栈的代码采用了大量的预编译宏定义来模块化代码,以此来节省硬件代码空间。用户可以根据具体应用环境适当添加或删除宏定义。 具体编译宏由协议栈相关文档详细解释。Project-Options-C/C+Compiler-Preprocessor中查看55第55页,

43、共84页。配置文件 在f8wConfig.cfg等配置文件中定义了工程相关的网络通讯设置。其中比较重要的是和ZigBee通信相关的信道通道的设置,和PAN ID的设置,用户可以通过更改该文件中的相关宏定义,来控制ZigBee网络的通道和PAN ID。Project- Options-C/C+Compiler-Preprocessor中查看工程的配置(2)56第56页,共84页。如何使用ZStack网络配置(1)1.PAN ID 和Channel(在Toolsf8wConfig.cfg中) ZigBee协议使用一个14位的个域网标志符(PAN ID)来标识一个网络。ZStack允许用两种方式配置

44、PAN ID,当ZDAPP_CONFIG_PAN_ID值不设置为0 xFFFF时,那么设备建立或加入网络的PAN ID由ZDAPP_CONFIG_PAN_ID指定;如果设置ZDAPP_CONFIG_PAN_ID为0 xFFFF,那么设备就将建立或加入一个“最优”的网络。 -DZDAPP_CONFIG_PAN_ID=0 xFFFF/-DZDAPP_CONFIG_PAN_ID=0 x2FFF IEEE 802.15.4/ZIGBEE规范在2.4G频段上规定了16各频道,用户可以通过选择DEFAULT_CHANLIST不同的值选择不同的频道,协议默认频道为0 xB即0 x00000800。 /-DD

45、EFAULT_CHANLIST=0 x04000000 / 26 - 0 x1A/-DDEFAULT_CHANLIST=0 x02000000 / 25 - 0 x19-DDEFAULT_CHANLIST=0 x01000000 / 24 - 0 x18/-DDEFAULT_CHANLIST=0 x00800000 / 23 - 0 x17/-DDEFAULT_CHANLIST=0 x00400000 / 22 - 0 x16/-DDEFAULT_CHANLIST=0 x00200000 / 21 - 0 x15/-DDEFAULT_CHANLIST=0 x00100000 / 20 - 0

46、x14/-DDEFAULT_CHANLIST=0 x00080000 / 19 - 0 x13/-DDEFAULT_CHANLIST=0 x00040000 / 18 - 0 x12/-DDEFAULT_CHANLIST=0 x00020000 / 17 - 0 x11/-DDEFAULT_CHANLIST=0 x00010000 / 16 - 0 x10/-DDEFAULT_CHANLIST=0 x00008000 / 15 - 0 x0F/-DDEFAULT_CHANLIST=0 x00004000 / 14 - 0 x0E/-DDEFAULT_CHANLIST=0 x00002000 /

47、 13 - 0 x0D/-DDEFAULT_CHANLIST=0 x00001000 / 12 - 0 x0C/-DDEFAULT_CHANLIST=0 x00000800 / 11 - 0 x0B57第57页,共84页。2.网络结构(nwk_globals.h,nwk_globals.c) STACK_PROFILE_ID定义为NETWORK_SPECIFIC、 HOME_CONTROLS、BUILDING_AUTOMATION、GENERIC_STAR、GENERIC_TREE中的一个,默认为HOME_CONTROLS,并据此设置MAX_NODE_DEPTH、NWK_MODE等,具体如下:

48、 #define STACK_PROFILE_ID HOME_CONTROLS #if ( STACK_PROFILE_ID = HOME_CONTROLS ) #define MAX_NODE_DEPTH 5 #define NWK_MODE NWK_MODE_MESH #define SECURITY_MODE SECURITY_RESIDENTIAL#if ( SECURE != 0 ) #define USE_NWK_SECURITY 1 / true or false #define SECURITY_LEVEL 5#else #define USE_NWK_SECURITY 0 /

49、 true or false #define SECURITY_LEVEL 0#endif 网络最大设备数设定: #if !defined( NWK_MAX_DEVICE_LIST ) #define NWK_MAX_DEVICE_LIST 20 / Maximum number of devices in the Assoc/Device list. #endif如何使用ZStack网络配置(2)58第58页,共84页。路由器和终端设备数设定:#if defined ( RTR_NWK ) / change this if using a different stack profile. /

50、 Cskip array uint16 *Cskip; #if ( STACK_PROFILE_ID = HOME_CONTROLS ) byte CskipRtrsMAX_NODE_DEPTH+1 = 6,6,6,6,6,0; byte CskipChldrnMAX_NODE_DEPTH+1 = 20,20,20,20,20,0; #elif ( STACK_PROFILE_ID = GENERIC_STAR ) byte CskipRtrsMAX_NODE_DEPTH+1 = 5,5,5,5,5,0; byte CskipChldrnMAX_NODE_DEPTH+1 = 5,5,5,5,5

51、,0; #elif ( STACK_PROFILE_ID = NETWORK_SPECIFIC ) byte CskipRtrsMAX_NODE_DEPTH+1 = 5,5,5,5,5,0; byte CskipChldrnMAX_NODE_DEPTH+1 = 5,5,5,5,5,0; #endif / STACK_PROFILE_ID#endif / RTR_NWK其中CskipRtrs和CskipChldrn分别为每一级的最大路由器数和最大节点数,前者是后者的子集。如何使用ZStack网络配置(3)59第59页,共84页。PAN IDZigBee协议使用一个16位的个域网标志符(PAN I

52、D)来标识一个网络。ZStack允许用两种方式配置PAN ID,当ZDAPP_CONFIG_PAN_ID值不设置为0 xFFFF时,那么设备建立或加入网络的PAN ID由ZDAPP_CONFIG_PAN_ID指定;如果设置ZDAPP_CONFIG_PAN_ID为0 xFFFF,那么设备就将建立或加入一个“最优”的网络。PANID的出现一般是伴随在,确定信道以后的。PANID其全称是Personal Area Network ID,网络的ID(即网络标识符),是针对一个或多个应用的网络,用于区分不同的ZigBee网络,一般是mesh或者cluster tree两种拓扑结构之一。所有节点的panI

53、D唯一,一个网络只有一个PANID,它是由pan协调器生成的,PANID是可选配置项,用来控制 ZigBee路由器和终端节点要加入那个网络。文件f8wConfg.cfg中的 ZDO_CONFIG_PAN_ID 参数可以设置为一个 00 x3FFF 之间的一个值。协调器使用这个值,作为它要启动的网络的 PAN ID。而对于路由器节点和终端节点来说只要加入一个已经用这个参数配置了PAN ID的网络。如果要关闭这个功能,只要将这个参数设置为0 xFFFF。 要更进一步控制加入过程,需要修改 ZDApp.c 文件中的ZDO_NetworkDiscoveryConfirmCB 函数。当然,如果ZDAPP

54、_CONFIG_PAN_ID被定义为0 xFFFF,那么协调器将根据自身的IEEE地址建立一个随机的PANID(00 x3FFF)。60第60页,共84页。Z-Stack协议栈工作流程Z-Stack采用操作系统的思想来构建,采用事件轮循机制,当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。如果同时有几个事件发生,判断优先级,逐次处理事件。整个Z-stack的主要工作流程,大致分为系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段。61第61页,共84页。Z-Stack系统运行流程图62第62页,共84页。主函数例子(即

55、启动程序)ZSEG int main( void ) osal_int_disable( INTS_ALL ); / 关闭中断 HAL_BOARD_INIT(); / 初始化HAL zmain_vdd_check() ; /电压检测 zmain_ram_init(); / 初始化stack存储区 InitBoard( OB_COLD ); /初始化板载IO HalDriverInit(); /初始化HAL驱动 osal_nv_init( NULL ); /初始化NV系统 zmain_ext_addr(); /确定MAC地址 zgInit(); /初始化基本NV条目 ZMacInit(); /初

56、始化MAC afInit(); /初始化AF osal_init_system(); /初始化操作系统 osal_int_enable( INTS_ALL ); / 允许中断 InitBoard( OB_READY ); /初始化开发板 zmain_dev_info(); /显示设备信息 zmain_lcd_init(); /液晶初始化 osal_start_system(); /启动操作系统 63第63页,共84页。应用程序任务Z-stack的任何一个子系统都作为OSAL的一个任务,因此在开发应用层的时候,必须通过创建OSAL任务来运行应用程序。通过osalInitTasks( )函数创建O

57、SAL任务 任何OSAL任务必须分为两步:一是进行任务初始化;二是处理任务事件。64第64页,共84页。OSAL的任务处理 主循环中的两个关键数组*tasksEvents与*tasksArr。tasksEvents存放从序号为0到tasksCnt每个任务在本次循环中是否要被运行, 需要运行的任务其值非0,否则为0。tasksArr数组则存放了对应每个任务的入口地址,只有在tasksEvents中记录的需要运行的任务,在本次循环中才会被调用到。 65第65页,共84页。Sensor发送数据的函数static void sendReport(void) uint8 pDataSENSOR_REPO

58、RT_LENGTH; / 存放数据的数组 static uint8 reportNr = 0; uint8 txOptions; pDataSENSOR_TEMP_OFFSET = readTemp(); / Read and report temperature value pDataSENSOR_VOLTAGE_OFFSET = readVoltage(); / Read and report voltage value pDataSENSOR_PARENT_OFFSET = HI_UINT16(parentShortAddr); pDataSENSOR_PARENT_OFFSET + 1

59、 = LO_UINT16(parentShortAddr); / Set ACK request on each ACK_INTERVAL report / If a report failed, set ACK request on next report if ( +reportNrACK_REQ_INTERVAL & reportFailureNr = 0 ) txOptions = AF_TX_OPTIONS_NONE; else txOptions = AF_MSG_ACK_REQUEST; reportNr = 0; / Destination address 0 xFFFE: D

60、estination address is sent to previously / established binding for the commandId. zb_SendDataRequest( 0 xFFFE, SENSOR_REPORT_CMD_ID, SENSOR_REPORT_LENGTH, pData, 0, txOptions, 0 );66第66页,共84页。Sensor读温度的函数static int8 readTemp(void) static uint16 voltageAtTemp22; static uint8 bCalibrate=TRUE; / Calibr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论