ZigBee协议分析以及MAC层软件实现.doc_第1页
ZigBee协议分析以及MAC层软件实现.doc_第2页
ZigBee协议分析以及MAC层软件实现.doc_第3页
ZigBee协议分析以及MAC层软件实现.doc_第4页
ZigBee协议分析以及MAC层软件实现.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

分类号 TN915.04 UDC D10621-408-(2005)0809-0密 级 公开 编号 2001021332成都信息工程学院学位论文ZigBee协议分析以及MAC层软件实现李珂导师名称(职称) 答辩委员会主席 评阅人 摘要过去若干年以来,无线组网技术发展迅速。但迄今为止,无线组网技术的应用主要集中在高速率和相对长距离方面;研究重点始终放在提高数据速率上,高了还要更高。事实上,低速率应用比高速率应用更贴近我们的日常生活。本文所要介绍的802.15.4标准就是IEEE 802.15工作组为低速率应用专门设计的一种无线组网技术。802.15.4(又称ZigBee)与IEEE的其他短距离无线技术,如蓝牙、WiFi、UWB互为补充,预计它低速率、低成本、自配置和拓扑灵活的特点使ZigBee芯片将像微处理器一样无处不在。本文首先介绍ZigBee标准的产生和应用前景,详细分析了物理层和媒体访问层。从中可以看到IEEE802154标准具有功耗低,数据传输可靠性高,网络容量大,时延小,安全性高等特点,因此,非常适用于无线传感器的设计。Chipcon公司的无线射频收发芯片CC2420对ZigBee标准做出了有力的支持。本文利用该芯片设计通信平台,进而解决MCU对CC2420的读写控制;在此基础之上,进行ZigBee协议MAC层功能的具体研究,在帧格式,应答确认,信道评估等方面完成软件的实现,为网络层和应用层提供支持。最后,针对设计过程中出现的问题,诸如地址的验证、晶振的稳定等,寻找到了适当的解决方法。通过以上的工作,对IEEE 802.15标准有了更为全面和较为准确的理解。目次总页数:33摘要.I目次.II1 ZigBee技术简介.12 ZigBee协议栈1 2.1 应用层.2 2.2 网络层.2 2.3 IEEE 802.15.4.22.3.1 物理层22.3.2 媒体访问层.32.4安全机制.43 ZigBee技术组网研究5 3.1网络拓扑.5 3.2 无线传感器网络.54 ZigBee无线通信设计5 4.1系统方案.54.2软件设计.64.2.1 总体流程64.2.2 通信模块控制74.2.3 MAC层实现.114.2.4 程序设计144.2.5 问题解决175.结束语.18参考文献.19声明20致谢21附录.22ZigBee协议分析以及MAC层软件实现李珂成都信息工程学院摘要 无线组网技术的低速率应用更贴近我们的生活,相关的技术标准802.15.4(又称ZigBee)与IEEE的其他短距离无线技术,它的主要特点是低速率、低功耗、低成本、自配置和拓扑灵活。预计ZigBee芯片将像微处理器一样无处不在。本文首先介绍ZigBee标准,详细分析了物理层和媒体访问层。通过Chipcon公司的无线射频收发芯片CC2420设计通信平台,在此基础上利用C语言完成MAC层的软件实现。关键词 ZigBee;IEEE802.15.4;CC24201 ZigBee技术简介2004年12月14日,ZigBee联盟批准了1.0版的ZigBee规范。该规范是世界上第一个专门为无线传感器和控制系统设计的低数据率、低功耗、低成本的技术标准。同其它的个人域网络(PAN)技术如蓝牙相比,它最初的设计目标就是简单廉价。ZigBee的基础是IEEE 802.15.4标准,而ZigBee是这种技术的商业名称,它来源于被称之为ZigBee原理的蜜蜂之间的通信技术。Zigbee主要应用在短距离范围之内并且数据传输速率不高的各种电子设备之间。根据Zigbee联盟目前的设想,Zigbee的目标市场主要有PC外设(鼠标、键盘、游戏操控杆)、消费类电子设备(TV、VCR、CD、VCD、DVD等设备上的遥控装置)、家庭内智能控制(照明、煤气计量控制及报警等)、玩具(电子宠物)、医护(监视器和传感器)、工控(监视器、传感器和自动控制设备)等。到目前为止,除了Invensys、 三菱电子、摩托罗拉和飞利浦等国际知名的大公司外,ZigBee联盟大约已有25家成员企业,并在迅速发展壮大。其中涵盖了半导体生产商、IP服务提供商、消费类电子厂商及OEM商等。所有这些公司都参加了负责开发Zigbee物理和媒体控制层技术标准的IEEE 802.15.4工作组。技术研究机构In-Stat/MDR预测,802.15.4节点和芯片组的销售量,将由目前的基本为零增加到2010年时的1.65亿只。当然并不是所有这些设备都具有ZigBee功能,但可能大部分都具备。不过,ZigBee进入工业无线传感器市场的速度将很缓慢,让工业客户相信无线传感器系统的可靠性、健壮性和安全性,将需要5到7年时间。2 ZigBee协议栈1ZigBee的协议栈非常精简,全功能协议占用的存储器容量不超过32K字节,而简功能协议占用约6K字节。另外全功能设备还需要额外的RAM存放节点设备的数据库,路由传输表和设备配对表等信息。完整的ZigBee协议栈由高层应用规范,应用支持层,网络层,数据链路和媒体接入层,物理层组成(图2.1)。网络层以上协议由联盟制定,IEEE负责物理层和链路层标准。物理(PHY)层(IEEE 802.15.4)媒体访问控制(MAC)层(IEEE 802.15.4)网络(NWK)层应用(APL)层应用支持(APS)子层Zigbee设备对象(ZDO)安全服务图2.1 ZigBee 协议栈2.1 应用层ZigBee的应用层由应用层支持子层(APS)、ZigBee设备对象(ZDO)和厂家定义的应用对象构成。应用层支持子层负责把不同的应用映射到ZigBee网络上,具体而言包括:(1)安全与鉴权;(2)多个业务数据流的汇聚;(3)设备发现,即发现哪个设备正在其自有空间工作;(4)业务发现;ZDO的功能包括确定网络中设备的作用(例如,是终端设备还是协作者)、发起和响应绑定请求,在网络设备之间建立安全关系。厂家定义的应用对象根据ZigBee的应用描述来实现特定的实际应用对象。2.2 网络层网络层主要采用了基于Ad-hoc技术的网络协议,包含以下功能:(1)通用的网络层功能;建立一个新的网络、加入和离开一个已经存在的网络、配置一个新设备、寻址、同步、安全和路由;(2)与IEEE802154标准一样,非常省电;(3)有自组织、自维护功能,最大程度地减少消费者的开支和维护成本;网络层基于IEEE 802.15.4 MAC,支持扩展覆盖区域,另外的群集也能加入进来,同时也支持网络的合并和分裂。2.3 IEEE 802.15.42.3.1 物理层信道划分物理层提供两类服务,即物理层数据服务和物理层管理服务。物理层数据服务通过无线信道收发物理层协议数据单元(PPDU)。物理层可以使用3个免费的频段,即2.4GHz、915MHz和868MHz。在2.4GHz频段,从2.4GHz到2.4835GHz之间,总共有16个不同的信道可供使用,每个信道间隔5M,最大数据速率可达250kbps;在915MHz频段,从902MHz到928MHz之间,总共有10个信道可供使用,每个信道间隔2M,最高数据速率可达40kbps;而868MHz频段即868到868.6MHz,只有一个信道可供使用,最高数据速率为20kbps,图2.2对信道的划分做了示意。图2.2直接序列扩频频段不同所使用的调制技术也不同,实际上,868和915MHz频段都是使用二元相移键控调制方式;而2.4GHz频段则使用偏移正交相移键控(O-QPSK)调制方式。但是,所有频段都可以使用直接序列扩频技术(DSSS)。直接序列扩频技术使用伪随机码(PN code)对信息比特进行模2加得到扩频序列,然后将扩频序列调制载波发射到空中,此时系统占用功率谱密度也大大降低。PN码由伪随机序列发生器产生,其码速比原始信息码速高得多,每一PN码的长度(Chip)很小。在具体实现扩频时还可以利用软扩频来进一步简化扩频系统的仿真计算,软扩频是一种(N,k)编码,k位信息码由N位长的伪随机序列来表示。用几位信息元对应一条伪随机码,扩展的倍数不大,而且不一定是整数。在室内近距离通信的条件下,软扩频即满足开放频段的系统要求,也能达到很高的速率,实现成本也低。可靠性措施考虑到系统会工作在有较大干扰的非常拥塞的环境中,802.15.4标准使用了多种技术来保证可靠的通信,这些技术包括链路质量评估、接收机能量检测、空信道估计等。采用CSMA(Carrier Sense Multiple Access)载波检测多址访问技术来决定发送时机以避免不必要的碰撞发生。物理层协议数据单元(PPDU)格式物理层协议数据单元包结构的格式图2.3所示,最左边是最低有效位。每个PPDU都由下面几个部分组成,即同步头SHR、物理层头PHR和可变长度的载荷。引导信号由32比特的全零构成,进行比特同步;而帧开始标志(SFD)由8比特组成,即11100101,表示帧的开始。可变长度的载荷用来携带MAC帧。4字节1字节1字节可变长度引导信号SFD帧长度(7比特)保留(1比特)PSDUSHRPHR载荷图2.3 物理层协议数据单元格式2.3.2 媒体访问层LLC子层IEEE802系列标准把数据链路层分成LLC(Logical Link Control,逻辑链路控制)和MAC(Media Access Control,媒介接入控制)两个子层。LLC子层在IEEE8026标准中定义,为802标准系列共用;而MAC子层协议则依赖于各自的物理层。LLC子层的主要功能包括:(1)传输可靠性保障和控制;(2)数据包的分段和重组;(3)数据包的顺序传输。MAC子层IEEE802.15.4的MAC协议包括以下功能:包括产生和同步网络信标、设备间无线链路的建立、维护和结束;确认模式的帧传送与接收;信道接入控制;帧校验;预留时隙管理;广播信息管理。也提供可选的MAC层安全和为需要固定速率和固定延迟的设备提供GTS(Guaranteed Time Slot)机制。MAC帧的通用格式如图2.4所示。帧控制序列号地址字段负载校验(FCS)MAC Header(MHR)MAC载荷MAC Footer(MFR)图2.4帧格式MAC层定义了4种不同的帧格式,分别是信标帧、数据帧、确认帧和MAC命令帧。下面对数据帧和确认帧予以说明:1)数据帧:下图2.5所示为数据帧格式,载荷部分包含高层包。2字节1字节4-20字节可变2字节帧控制序列号地址字段数据载荷FCSMHRMAC载荷MFR图2.5数据帧格式2)确认帧:确认帧是用来确认已经成功地接收到一帧,确认帧的使用是可选的。其帧格式如下图2.6所示。2字节1字节2字节帧控制序列号FCSMHRMFR图2.6确认帧格式超级帧在低速WPAN网络中允许使用一种可选的超级帧,超级帧是专门为网络中的协调接点设计,由网络协调者定义。超级帧前后由网络信标(network beacons)标识,帧内部被分为16个相等的时隙。设备使用信标来同步、识别PAN和描述超级帧结构。任何希望在两个信标之间的竞争访问期间通信的设备,需要使用时隙CSMA-CA机制和其它设备竞争。所有的传输必须在下一个网络信标到来之前完成。2.4安全机制ZigBee使用MAC层的安全机制来加密MAC命令、信标和确认帧。MAC层使用AES(Advanced Encryption Standard)作为其核心加密算法,通过该算法来保证MAC帧的机密性、完整性和真实性。MAC层使用加密方式来发送(或接收)帧时,首先查看帧的目的地址(或源地址),取得与目的(或源)地址相关的密钥,并使用为该密钥指定的安全组合来处理该帧。每个密钥都与单独的安全组合相关。MAC帧的头部有一个比特来指示该帧是否加密。MAC层安全组合基于CTR,CBC-MAC和CCM 3种运行模式。 网络层也利用AES来实现安全传输,但是,不同于MAC层,所有安全组合都基于CCM模式。这样通过去掉CTR和CBC-MAC模式来简化网络层安全实现,使将单个密钥用在不同的网络组合中成为可能。3 ZigBee技术组网研究3.1网络拓扑1为了让设备制造商能够提供最低功耗的产品,IEEE定义了两种设备节点:全功能设备(FFD)和简功能设备(RFD),其中全功能节点可用于任何网络拓扑结构,可作为网络节点的集中组织者、协调者,可以和网络中任何其他节点通信,因此FFD可以工作在3种模式下:即PAN网络协调者、协调者和设备;而简功能节点只能用于星型网络结构。 ZigBee的网络拓扑结构主要有星型,树型和网状网。3.2 无线传感器网络2ZigBee技术是从传感器网络发展而来的,我们从传感器网络的一些组网研究中就可对ZigBee网络加以深入了解。传感器的实现机理是以802.15.4传输模块代替传统的串行通信模块,将采集的数据以无线方式发送出去,其主要包括802.15.4无线通信模块、微控制器模块、传感器模块及接口、直流电源模块以及外部存储器等。802.15.4无线通信模块负责数据的无线收发,主要包括射频和基带两部分,前者提供数据通信的空中接口,后者主要提供链路的物理信道和数据分组。微控制器负责链路管理和控制,执行基带通信协议和相关的处理过程。经过调理的传感器信号由802.15.4无线通信模块通过无线信道发送到主控节点,再进行特征提取、信息融合等高层决策处理。(图3.1)微控制器模块802.15.4无线收发模块RXAnalog / RF基带处理FrequencyGeneratorSPI ControlTXAnalog / RF基带处理Power Management高层协议802.15.4MAC传感器传感器驱动接口图3.1 基于802.15.4标准传感器的实现结构4 ZigBee无线通信设计4.1 系统方案本文的目的是ZigBee协议MAC层的软件实现。这里使用Chipcon公司的CC2420构成开发平台,整个平台分为收发两部分,发送部分由传感器模块、微处理器、通信模块和电源组成,其示意框图如图4.1所示,其中,传感器与微处理器之间通过PS/2接口通信,微处理器与通信模块之间通过SPI总线连接;接收部分由微处理器,通信模块和主机组成,主机与微处理器之间也通过PS/2接口通信,其示意框图如图4.2所示。发送SPIPS/2传感器模块电源(电池)通信模块(CC2420)微控制器模块STC89C516RD+图4.1 发送端示意框图接收SPIPS/2通信模块(CC2420)微控制器模块STC89C516RD+电源(电池)PC机图4.2 接收端示意框图由于是点对点通信,各节点的地位是相同的,所以没有定义网络协调器和设备。下面我们以无线鼠标为例进行设计:(1)传感器模块3传统的鼠标通过PS/2接口与PC机进行通信,这里用802.15.4传输模块代替串行通信模块,将采集的数据以无线方式发送出去。标准的PS/2鼠标发送位移和按键信息给主机采用3字节数据包格式,它将被作为MAC载荷发送。(2)微控制器模块4微处理器主要完成协议、应用软件、通信模块的控制和与传感器模块的通信,这里主要研究协议栈和通信模块相关软件。处理器选用STC89C516RD+,这是一款8051系列单片机,能提供较大的程序和数据存储空间。(3)通信模块5通信模块选用Chipcon公司的CC2420。CC2420是一款针对低功耗的基于IEEE 802.15.4的2.4GHz射频无线收发芯片,它通过内部的数字基带直接序列扩频调制器获得平均9dB的增益和250kbps的数据传输速率。CC2420的成本很低,但为2.4GHz无线通信提供了很完整的解决方案。它在硬件上支持包处理,数据缓冲,编码,空信道评估,时钟提取等等。这些特点减少了微控制器的负担,使CC2420能面向低造价的处理器。由于CC2420使用SPI接口,所以在典型应用中,它很方便和微处理器连接,而且只需要很少的外部器件。4.2软件设计对软件的描述和设计主要是MAC协议层功能的实现,同时,微控制器对CC2420具体操作的实现也将进行阐述。源代码可查看附录。4.2.1 总体流程NNNYYNY初始化有数据?发送程序复位确认帧正确?序列号减1中断?确认帧?中断处理图4.3 主流程图说明:(1)初始化过程包括对51单片机串行通信方式的选择,中断允许,CC2420的复位,开启晶振以及对CC2420的设置和协议地址的写入等。需要注意的是,CC2420在复位后进入低功耗模式,而晶振一旦开启,就要一直保持工作的状态。(2)当没有数据需要传送时,不进行任何操作,CC2420保持待机模式,可减小功耗。(3)收到确认帧或者数据帧时都会引起中断,因此需要进行判断,具体的判断过程在接收程序中有详细描述。当确认帧显示对方接收失败时,重新发送上一帧。(4)中断处理程序完成帧类型的判断,CRC检验,地址验证,数据处理等工作。4.2.2 通信模块控制5读/写操作初始化,发送数据,接收数据过程中,单片机都需要访问CC2420。MCU可通过4线SPI接口(SI,SO,SCLK和CSn管脚)对其进行读写操作,而SPI是同步串行传输,因此让单片机的串行口工作在方式0,即同步移位方式。在hal_51.c文件中,有串口初始化程序:void SPI_INIT() SCON=0x10; 其中,接受控制位REN置1,所以只需要RI=0即可开始接受数据。CC2420有33个16位的状态寄存器,15个命令字寄存器和2个用于访问收 / 发FIFOs的8位寄存器。写寄存器时,需先发送寄存器的地址,地址字段结构如图4.4所示。地址字段完毕后,是16 bits的数据位。RAM / Register位Read / Write位地址位Bit 7Bit 6Bit 5-0图4.4该操作可以通过下面的程序实现:void FASTSPI_SETREG(a,v)SPI_ENABLE();FASTSPI_TX_ADDR(a);FASTSPI_TX(BYTE) (v) 8);FASTSPI_TX(BYTE) (v);SPI_DISABLE();形参a为寄存器地址,v为待写入的值。调用函数SPI_ENABLE()可以使CSn管脚(片选,低电平有效)保持低电平,激活SPI总线。利用SPI总线同样可以读状态寄存器,当然R /W位须置1。CC2420在收到地址信息之后的16个时钟周期内,从指定的寄存器返回数据。数据输出管脚SO此时作为微处理器的输入。休眠模式时,寄存器中的数据不会丢失,但掉电后不保存。在地址字段,命令字,第一个RAM地址字节和数据写入TXFIFO时,CC2420会在SO上返回状态字,共有6种状态,以此根据不同的情况决定下一步的操作。下面的程序用于状态字的读取:void FASTSPI_UPD_STATUS(s) SPI_ENABLE(); SBUF = CC2420_SNOP; SPI_WAITFOREOTx(); s = SBUF; SPI_DISABLE(); s是命令字,在这里发送的是空操作命令(SNOP),只读取命令字而不对寄存器进行任何读写。CC2420的命令字可看作单字节的指令,通过对命令字寄存器的寻址即可实现。用于激活晶振,进入接收模式,允许解码等等。一共有15条指令。void FASTSPI_STROBE(s) SPI_ENABLE(); FASTSPI_TX_ADDR(s); SPI_DISABLE();很明显,这里只发送了寄存器的地址,没有数据的传送,但已经完成了一次指令的传输。晶振没有激活时,只有SXOSCON命令字能被使用,其他所有的命令字将被忽略,没有任何效果。要使其他指令被接受,晶振必须稳定。函数void halRfWaitForCrystalOscillator(void)在读取状态字后,判断晶振是否稳定。经由SPI总线可以访问CC2420内部368byte的RAM。只需要发送一次地址信息(2bytes),就可以读/写一个或者多个字节的数据,这是因为收到地址后,CC2420的硬件会自动进行地址加1的操作。不同于寄存器访问的是一次只读/写1byte的数据,而寄存器则要求2bytes。RAM地址有9位,分为两部分:B1:0 (MSB)选择访问3个存储器组中的某一个,A6:0 (LSB)则在这个存储器组中提供具体的地址。RAM被分为了3个存储器组:TXFIFO(bank 0),RXFIFO(bank 1)和security(bank 2).其中,FIFO均为128bytes,security为112bytes。A6:0在RAM/Register位后发送,接着还要发1byte,第7和6位是B1:0,第5位是R/W bit (0读和写, 1-读)。4至0位可忽略。写RAM时,数据在第二个地址字节后通过SI写入。void FASTSPI_WRITE_RAM_LE(p,a,c,n) SPI_ENABLE(); FASTSPI_TX(0x80 | (a & 0x7F); FASTSPI_TX(a 1) & 0xC0); for (n = 0; n (c); n+) FASTSPI_TX(BYTE*)(p)n); SPI_DISABLE(); 这是一个对RAM写操作的程序,a是RAM地址,p是需写入数据的指针,c为字节的个数。先发送A6:0,然后发送B1:0。TXFIFO和RXFIFO可通过TXFIFO和RXFIFO寄存器访问。TXFIFO只能写,而RXFIFO可写可读。写TXFIFO时,类似于RAM访问,只需要一次操作就能实现多个数据的存取:void FASTSPI_WRITE_FIFO(p,c) SPI_ENABLE();FASTSPI_TX_ADDR(CC2420_TXFIFO);for (UINT8 i = 0; i (c); i+) FASTSPI_TX(BYTE*)(p)i);SPI_DISABLE();p为待写入数组的指针,c是数组的大小。下面这个程序实现了从RXFIFO中读取多个字节的功能,其中形参p是用于存放这多个字节的数组的指针:void FASTSPI_READ_FIFO_NO_WAIT(p,c) SPI_ENABLE(); FASTSPI_RX_ADDR(CC2420_RXFIFO); for (UINT8 spiCnt = 0; spiCnt ackRequest?BASIC_RF_FCF_ACK:BASIC_RF_FCF_NOACK;同样,在接收时也定义了结构体类型BASIC_RF_RX_INFO,typedef struct BYTE seqNumber;WORD srcAddr;WORD srcPanId;INT8 length; BYTE *pPayload;BOOL ackRequest;INT8 rssi; BASIC_RF_RX_INFO;收到数据后,提取到的帧内信息存放在各成员中。seqNumber是收到的帧序列号,length为载荷大小,pPayload指向存储载荷的空间。在接收方,CC2420根据帧控制字段Acknowledge request位自动完成确认帧的发送工作。初始化过程中,定义了结构体变量rfSettings,typedef struct BASIC_RF_RX_INFO *pRxInfo; UINT8 txSeqNumber; volatile BOOL ackReceived; WORD panId; WORD myAddr; BOOL receiveOn; BASIC_RF_SETTINGS;extern volatile BASIC_RF_SETTINGS rfSettings;pRxInfo是指向BASIC_RF_RX_INFO结构体类型数据的指针,ackReceived在收到确认帧后为TRUE,否则为FALSE。将rfSettings声明为外部变量,增加函数间数据联系的渠道,例如,发送程序中,将帧的序列号传给目的节点,直接将rfSettings的成员txSeqNumber发送即可:FASTSPI_WRITE_FIFO(BYTE*)&rfSettings.txSeqNumber, 1);而发送端在判断某一帧是否是确认帧时,也会用到rfSettings.txSeqNumber:if(rfSettings.pRxInfo-seqNumber = rfSettings.txSeqNumber) 确认帧帧控制字段的Acknowledge request位为1时,表明源端希望返回确认帧。确认帧格式为:引导信号SFD帧长度=5帧控制序列号PAN IDFCS4字节1字节1字节2字节1字节2字节2字节图4.9CC2420会根据Acknowledge request位情况自动完成确认帧的发送工作。而在源端引起中断以后,需要对帧的类型进行判断,看是否是确认帧。这要求帧满足3个条件:长度为5,帧类型为确认帧以及确认帧序列号与发送序列号相等:#define BASIC_RF_ACK_PACKET_SIZE5#define BASIC_RF_ACK_FCF 0x0002if(length=BASIC_RF_ACK_PACKET_SIZE)&(frameControlField=BASIC_RF_ACK_FCF)& (rfSettings.pRxInfo-seqNumber = rfSettings.txSeqNumber) 空信道估计(CCA)1空信道估计建立在RSSI的测量之上,用于实现CSMA-CA。空信道估计使用下述方法中的一种来进行估计。一种方法是能量门限,即一旦检测到任何高于ED门限的能量将报告信道处于忙状态;另外一种是载波探测,即一旦检测到具有802.15.4调制和扩频特征的信号,不管是否该信号的能量高于或低于ED门限都将报告信道处于忙状态;最后一种是前两种的综合,即只有检测到具有802.15.4调制和扩频特征的信号,同时该信号的能量高于ED门限值才报告信道处于忙状态。通过对MDMCTRL0.CCA_MODE的设置,可以实现上述3种方式,默认的是第3种。用STXONCCA命令可以轻松地实现CSMA-CA。此时,只有信道为空时传输才会开始,而CCA的结果可以经TX_ACTIVE状态位检测。例如:do FASTSPI_STROBE(CC2420_STXONCCA);FASTSPI_UPD_STATUS(spiStatusByte);halWait(1); while (!(spiStatusByte & BM(CC2420_TX_ACTIVE);/*将需发送内容写入FIFO*/FASTSPI_STROBE(CC2420_STXONCCA);while (!SFD_IS_1);/*等待发送开始*/接收机能量检测(ED)和链路质量指示(LQI)ED和LQI可以通过接收机能量指示(RSSI)来实现。RSSI_VALID状态位用于检测RSSI值是否有效,当其有效时,意味着在至少8 symbol的时间内允许接收。下面的程序用来检测RSSI值是否有效:do FASTSPI_UPD_STATUS(spiStatusByte); while (!(spiStatusByte & BM(CC2420_RSSI_VALID);接收能量检测为网络层的信道选择算法提供支持,它只是用来估计802.15.4信道带宽内信号的功率,并不识别或解调其中的信号。链路质量指示用来表示接收到的包的质量。所指示的结果由网络层或应用层来使用,预测数据包成功到达目的地的可能性。完成CRC校验后,8bits的RSSI值将添加到FCS中,通过下面的函数可将其转换为ED和LQI:#define RSSI_OFFSET -38RSSI_2_ED(BYTE rssi) ed=rssi 63 ? 255 : (ed ackRequest?BASIC_RF_FCF_ACK:BASIC_RF_FCF_NOACK;主函数调用时,实参&rfTxInfo为BASIC_RF_TX_INFO类型结构体变量的指针,它的成员包含了待发送帧各个字段的信息,这里判断rfTxInfo. ackRequest的真假,来决定FCS是否请求确认。FASTSPI_WRITE_FIFO(BYTE*)&rfSettings.txSeqNumber, 1);部分信息存放在结构体变量rfSettings中,所以根据需要使用不同的结构体变量。帧序列号在发送完毕后加一,为下一帧的发送做准备;若返回值success=FALSE(即发送未成功),在主函数中会对序列号进行减一操作,重新发送此帧。FASTSPI_WRITE_FIFO(BYTE*)pRTI-pPayload, pRTI-length);主函数中,rfTxInfo.pPayload = pTxBuffer,因此这里写入FIFO中的实际是数组pTxBuffer的元素的值。接收程序1) 流程图(见图4.11)2) 分析与实现当一个数据包被完全接收之后,FIFOP管脚会变高产生中断。中断服务程序从RXFIFO中提取数据,并将他们放入BASIC_RF_RX_INFO类型的结构体变量中。最后调用basicRfReceivePacket()函数进行数据处理。FIFO溢出和无效帧的处理都可在中断程序中实现。进入中断程序时,必须判断是否是FIFO溢出引起的中断。在溢出时CC2420将FIFO清0,同时FIFOP置位来通知MCU,由此采用这两个管脚的状态来判断溢出情况,由于发生了溢出,必须清除RXFIFO中数据,然后退出中断。if(FIFOP_IS_1) & (!(FIFO_IS_1) FASTSPI_STROBE(CC2420_SFLUSHRX); FASTSPI_STROBE(CC2420_SFLUSHRX); return;YYYNNYYNNN溢出?读取帧长度帧长度过短?读取FCF,序列号确认帧?正确应答?读footer帧无效?读取剩余信息success=TRUE处理数据返回丢弃该帧产生中断图4.11接收流程从FIFO中读出的帧长度包含了FCF,FCS,数据载荷等的总长,但在后面读载荷时需要知道数据负载的大小,所以用rfSettings.pRxInfo-length = length - BASIC_RF_PACKET_OVERHEAD_SIZE来计算出数据长度。判断一个帧是否是确认帧需满足三个条件,即:(1)帧长度是否为5 (length = BASIC_RF_ACK_PACKET_SIZE) ;(2)帧类型是否为确认应答帧 (frameControlField = BASIC_RF_ACK_FCF) ;(3)帧序列号是否与本地发送序列号相等(rfSettings.pRxInfo-seqNumber = rfSettings.txSeqNumber)在通过确认帧的CRC校验之后才可以确定成功地收到了确认帧,success=TRUE。CC2420的硬件完成地址识别,因而读取PAN ID和目的地址后没有存储,接着将读到的源地址和数据存放在rfSettings.pRxInfo-srcAddr和*rfSettings.pRxInfo-pPayload中。接收时,FCS由硬件校验,用户一般只对校验的结果感兴趣,而不在于FCS本身是什么,所以FCS不会写入RXFIFO中,取而代之的是RSSI,相关性评估和CRC标志位(图4.12)15-876-0RSSI(signed)CRC OKCorr

温馨提示

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

评论

0/150

提交评论