基于嵌入式平台的认知无线电控制协议的研究与实现-毕业设计论文_第1页
基于嵌入式平台的认知无线电控制协议的研究与实现-毕业设计论文_第2页
基于嵌入式平台的认知无线电控制协议的研究与实现-毕业设计论文_第3页
基于嵌入式平台的认知无线电控制协议的研究与实现-毕业设计论文_第4页
基于嵌入式平台的认知无线电控制协议的研究与实现-毕业设计论文_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

浙江大学本科毕业设计摘要随着无线通信技术的发展和人们对无线频谱资源需求的日益增长,认知无线网络以其不需要授权就可以使用频谱、频谱利用率高、使用方式灵活等独有特性越来越受到关注,成为无线移动通信网络的一个重要发展方向。设备驱动程序在Linux内核中扮演着特殊的角色,它们是一个个独立的“黑盒子”,使某个特定的硬件响应一个定理良好的内部编程接口,同时完全隐藏了设备的工作细节。用户操作通过一组标准化的调用完成,而这些调用是和特定的驱动程序无关的。本协议中涉及到的主要是字符设备驱动程序。启动和关闭设备必须调用open和release方法;当PC上的应用程序通过网口发送大批数据到PXA255处理器上时,处理器必须先调用poll和select方法将数据缓存下来,然后通知内核去读取数据,这时使用ioctl方法和write方法;当数据处理完毕后通知内核将数据取出时调用read方法。通过一套完整和连续的驱动方法,有效的将摄像头抛下来的数据通过Socket套接字的方式传递到ARM内核中,然后通过ARM和FPGA的接口处理存入FPGA的RAM中,最后通过无线发送出去。对于MAC层要做的,就是要保证从PC上通过Socket套接字抛下来的二进制数据流完整可靠的从用户空间拷至内核空间,最后放到FPGA的RAM中去,而这整个过程完全可以由Linux设备驱动的方式实现。协议的设计以应用的需求为出发点,Ad-hoc网络的信道接入协议一直是国内外研究的热点,主要是为了解决隐藏终端和暴露终端问题,影响比较大的有MACA协议,即RTS/CTS/ACK方案,控制信道和数据信道分裂的双信道方案和基于定向天线的MAC协议,以及一些改进类的MAC协议。有一些研究则是侧重于将IEEE802.11的MAC协议移植到AdHoc网络中。基于定向天线的MAC协议在理论上性能较为优越,但在技术上实现的难度较大。由于本协议并不需要进行严格的时隙设定;而是在控制信道上通过RTS竞争来获取沟通机会,并在后续的数据传输阶段进行数据传输,数据传输的长度最大值限制以物理帧格式中的限制为准(OFDM1600Byte,QAM750Byte,CPM150Byte),并可以在此范围内随意设定,同时DAT传输阶段甚至可以考虑传输若干个混合波形调制帧来提高整体的传输效率。因此采用RTS/CTS/ACK方案是一种最好的选择。本协议基于AdHoc网络,同时也可以拓宽至AdHoc网络,可以在没有固定基础设施支持的情况下提供灵活方便的通信。在军事领域,或在发生了地震﹑水灾﹑火灾等重大灾难后固定通信网络设备无法正常工作时,依靠AdHoc网络就能够提供通信支持。而且,由于AdHoc网络构建便捷,其应用场景正在不断拓宽。关键词:认知无线电;MAC协议;嵌入式系统;IntelPXA255;Linux设备驱动;Socket通信

ABSTRACTAsthedevelopmentofwirelesscommunicationstechnologyandthepeople'sgrowingdemandforwirelessspectrumresources,cognitivewirelessnetworksnothavingbeenauthorizedwhenitcanusethespectrum.Forhighspectralefficiency,theflexiblemethodanduniquegettingmoreandmoreconcern,wirelessspectrumhasbecomeanimportantdevelopmentdirectionofwirelessmobilecommunicationsnetwork.DevicedriversplayaspecialroleinLinuxkernel.Theyareseparate"blackbox",whichcanmakeaparticularhardwareinresponsetointernalprogramminginterfaceswhosetheoremisgood.Atthesametime,thedevicedrivershidethedetailsoftheworkequipment.Theuserscompletetheoperationkthroughasetofstandardizedcalls,whichisnothingtodowiththespecialthedevicedrivers.Theagreementismainlyrelatedtothecharacterdevicedriver.Start-upandshutdowntheequipmentmustcalltheopenandreleasemethods;whentheapplicationsinPCsentalargenumberofdatatoPXA255processorthroughthenetworkI,theprocessormustcallthepollandselectmethodsatfirstinordertocachethedata,andthennotifythekerneltoreaddata,thenuseioctlandwritemethods;corewillbenotifiedtoretrievethedatabyreadmethodafterthedataprocessingfinish.Throughasetofcomprehensiveandcontinuousdrivemethods,thedatathrewfromthecamerapasstotheARMcoreeffectivelythroughthesocketway,andthendepositedthedataintotheRAMandFPGAthroughtheirinterfaces’processing,andfinallysentthroughWireless.WhattheMACshoulddoistoensurecopyingthebinarydatastreamwhichisthrewfromPCthroughtheSocketmethodfromtheuserspacetothekernelspacecompletelyandreliably,andfinallyputthemintotheRAMandFPGA,whilethewholeprocesscanberealizedbytheLinuxdevicedrivers.HowtheAgreementdesignisstartedwiththeneedsoftheapplication,thechannelofAd-hocnetworkaccessprotocolhasbeenahotresearch,whichismainlytosolvetheproblemsofhiddenterminalandexposedterminal.TheMACAagreementisimpactedgreatly,thatisRTS/CTS/ACKprogram,theprogramofthecontrolchannelanddataseparationandtheMACprotocolbasedonthedirectionalantenna,aswellassomeimprovedMACprotocol.AnumberofstudieshavefocusedontransplantingtheMACprotocolofIEEE802.11totheAd-Hocnetwork.TheperformanceoftheMACprotocolwhichisbasedontheDirectionalantennaissuperiorintheory,butmoredifficulttoachieveintechnique.Sincetheagreementdoesnotneedsetstricttimeslot;butobtainopportunitiesofcommunicationinthecontrolchannelthroughRTScompetition,andtransmitdatainthefollow-upphaseofdatatransmission,themaxlimitlengthofdatatransmissionisthemaximumofthephysicalframeformat(OFDM1600Byte,QAM750Byte,CPM150Byte),andcanbesetarbitrarilyinthiscontext,andatthesametimethestageofDATtransmissioncanevenconsideranumberofthemixedwaveformofmodulationframetoimprovetheoverallefficiencyofthetransmission.ThereforetheuseofRTS/CTS/ACKisthebestchoice.ThisAgreementisnotonlybasedontheAd-Hocnetwork,butcanalsobebroadenedtotheAd-Hocnetwork,itcanprovideaflexibleandconvenientcommunicationwhenitcannotsupportedbyFixedinfrastructure.Inthemilitaryfield,orthefixedcommunicationsnetworkequipmentdoesnotworknormallyaftertheeventoftheearthquake,flood,fireandsoon,relyingontheAd-Hocnetworkcanprovidecommunicationssupport.Moreover,sincetheconstructionofAd-Hocnetworkisconvenient,theapplicationofthesceneisexpandingconstantly.Keywords:cognitiveradio;MACprotocol;embeddedsystem;IntelPXA255;LinuxDeviceDriver;socketcommunication目录1绪论 11.1认知无线电技术发展概况 11.2嵌入式系统简介 11.3本章小结 12IntelXscalePXA255处理器简介 22.1IntelPXA255处理器简介 22.2静态存储接口 32.3GPIO口 42.4中断控制器 42.5本章小结 53嵌入式Linux设备驱动程序原理 63.1嵌入式Linux设备驱动程序简介 63.2字符设备驱动程序 93.3本章小结 124硬件方案介绍 134.1器件选择 134.2硬件实现平台 144.3本章小结 145MAC层接口协议的具体设计与实现 155.1MAC层协议基本框架 155.2FPGA与XScale接口 165.3数据包结构定义 195.4协议具体流程及实现细节 225.5频谱感知和SNR算法 285.6本章小结 296演示场景与测试 306.1对于演示场景的说明 306.2调试过程划分及说明 316.3本章小结 347抓包实现摄像头对协议的自适应 357.1抓包过程及交互包的分析 357.2测试过程及问题解决方案 377.3本章小结 388Socket编程与VC++界面开发 398.1Socket编程 398.2基于对话框窗口的创建 418.3本章小结 43致谢 44参考文献 45PAGE141绪论1.1认知无线电技术发展概况认知无线电(CognitiveRadio)[1]概念最初是由瑞典皇家技术学院的J.Mitola于2021年在软件无线电(SDR)基础上提出的。在其博士论文中这样描述认知无线电:无线数字设备和相关的网络在无线电资源和通信方面具有充分的计算机智能来探测用户通信需求,并根据这些需求来提供最适合的无线电资源和无线业务。在Mitola的认知无线电定义中,认知无线电将连续不断地感知外部环境的各种信息(频率、调制方式、信噪比、网络流量甚至用户数据内容等),对这些信息进行分析、学习和判断,然后通过一种称作“无线电知识表达语言”(RKRL)[2]的新语言与其他认知终端智能交流,以选择合适的工作频率、调制方式、发射功率以及路由协议等,保证整个通信网络可靠运行,并达到最佳频谱资源利用率。该定义中无线节点和网络观察到的每一个可能的参数都被考虑到了,因此也被成为“全认知无线电”。上述是对认知无线电的最初定义,功能大而全但却难以实现,因此业界开始寻求易于实现的认知无线电技术。1.2嵌入式系统简介嵌入式系统[3]是继计算机网络技术之后,IT领域又一个新的技术热点和发展方向。嵌入式系统目前己经广泛地应用于网络通信、消费电子、工业控制、国防等各个领域。随着计算机技术与通信技术的发展,嵌入式系统的研究与开发也有着越来越重要的实际意义。ARM公司是业界领先的16/32位嵌入式处理器技术提供商,占约75%的RISC处理器市场。ARM处理器核具有性能高、成本低和功耗省的特点,已经成为便携式通信设备、手持计算、多媒体数字消费等嵌入式解决方案中事实上的标准。什么是“嵌入式系统”?关于这个定义目前仍在争论中,普遍接受的定义有以下两种:国际电气和电子工程师协会(IEEE)的定义,嵌入式系统是“控制、监视或者辅助设备、机器和车间运行的装置”(devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants)。国内业界流行定义为“嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统”[4]。1.3本章小结本章主要介绍了认知无线电技术和嵌入式技术在当今的发展状况以及以后的发展前景。

2IntelXscalePXA255处理器简介2.1IntelPXA255处理器简介IntelXScalePXA255[5]处理器运算速度高达400MHz,,外围控制器众多,是一款高集成度高性能的优秀嵌入式处理器。功耗更低,系统伸缩性更好,同时核心频率也得到了提高,目前400MHz的产品已经进入市场,而600、800Mhz的Xscale处理器也将很快面世。同时,这种处理器还支持高效通讯指令,可以和同样架构处理器之间达到高速传输。其中一个主要的扩展就是无线MMX,这是一种64位的SIMD指令集,在新款的Xscale处理器中集成有SIMD协处理器。这些指令集可以有效的加快视频、3D图像、音频以及其他SIMD传统元素处理[5]。IntelXScalePXA255处理器的内部结构示意图如图2-1所示:图2-1PXA255处理器的内部结构IntelXScalePXA255处理器的配置如下:32位XscaleRISC核心,兼容ARMV5TE指令;工作频率200、300、400MHz;0.18微米制程;超标量执行;特殊40位存储器,16位SIMD指令(视频、音频处理);IntelStrata闪存高速同步接口;性能提高和功耗降低模式;32KB指令缓存,32KB数据缓存;多媒体流数据专用2KB缓存;内存控制器:4bank(最大256MB),工作频率100MHz,支持2.5和3.3VSDRAM、SRAM、ROM、闪存等,16、32位总线带宽;双通道PCMCIA、CF卡控制器;MMC/SD存储卡控制器;15个单Bit通用输入/输出接口,支持中断;集成可编程频率合成器、计时器;16条DMA通道;LCD显示控制器,支持填充、矩形单元变换硬件加速AC97音频;USB接口;UART(一个用于内部设备,一个提供全功能硬件传输控制);蓝牙、红外接口;I2C和I2S总线;SSP接口;256针PBGA封装,核心大小17×17mm;工作温度范围广[5]。2.2静态存储接口静态存储器接口由6个分区组成,可以通过nCS[5:0]进行选择。每个分区都可以配置成下列的类型:非突发的ROM和Flashmemory;突发的ROM或Flash;突发和非突发的SRAM;可变反应时间的I/O。可变反应时间的I/O接口与SRAM的区别在于前者的数据准备好信号RDY允许插入一些可变数量的等待状态。每个选择分区的数据总线宽度可以配置成16位或32位。nCS[3:0]也可以为同步静态存储配置。在可变反应时间I/O接口写的过程中,nPWE代替了nWE的使用,从而SDRAM刷新可在VLIO口传输时执行。nOE,nWE和nPWE的使用归结如下:nOE是所有读的使能信号;nWE是Flash和SRAM写的使能信号;nPWE是VLIO写的使能信号。对于SRAM和VLIO实现,DQM[3:0]信号被用于写的字节使能,其中DQM[3]为MSB。处理器支持26位的字节地址,对于每一个分区都可以访问64MByte的空间。这些字节地址通过26个外部引脚送出。对于32位的系统MA[1:0]无效,同理16位的系统MA[0]无效。对于32位系统的读,DQM[3:0]和MA[1:0]都为0;对于16为系统的读,DQM[1:0]和MA[0]为0。MSCx寄存器的ET域指明了存储区域的类型,非突发的ROM或Flash;VLIO;突发长度为4的ROM或Flash;突发长度为8的ROM或Flash。RBW域指明了nCS[5:0]选择的分区的总线宽度。16位宽总线上的传输使用MD[15:0]。BOOL_SEL引脚和SXCNFG寄存器必须被用来为SMROM或其他类型的同步静态存储配置nCS[3:0]。当处理器reset后,它的取指和执行的起始地址都是0x00,这和用nCS[0]选择区域是相对应的。BootROM也必须定位在这个地址上,BOOT_SEL管脚决定bootmemory的类型。2.3GPIO口IntelXScalePXA255处理器有85个GPIO口,可以通过使用GPSR、GPCR、GPDR、GRER、GFER、GEDR、GAFR等寄存器来控制,实际上每个寄存器都有三个,每个寄存器有32位,总共加起来就可以控制85个GPIO口[6]。几个比较重要的寄存器的作用如下:GPDR:包括GPDR0,GPDR1,GPDR2;GPDR0控制0~31GPIO口,GPDR1控制32~63GPIO口,GPDR2控制64~84GPIO口;将GPDRx的某一位设置为0,就代表将对应的GPIO口设置为输入口;将GPDRx的某一位设置为1,就代表将对应的GPIO口设置为输出口;保留位必须清零,且读操作无效;GPSR:包括GPSR0,GPSR1,GPSR2;GPSR0控制0~31GPIO口,GPSR1控制32~63GPIO口,GPSR2控制64~84GPIO口;将GPSRx的某一位设置为0,对对应的GPIO口电平没有影响;将GPSRx的某一位设置为1,如果对应的GPIO口被设置为输出口,则将该GPIO口置为高电平;保留位必须清零,且读操作无效;GPCR:包括GPCR0,GPCR1,GPCR2;GPCR0控制0~31GPIO口,GPCR1控制32~63GPIO口,GPCR2控制64~84GPIO口;将GPCRx的某一位设置为0,对对应的GPIO口电平没有影响;将GPCRx的某一位设置为1,如果对应的GPIO口被设置为输出口,则将该GPIO口置为低电平;保留位必须清零,且读操作无效;GRER:包括GRER0,GRER1,GRER2;GRER0控制0~31GPIO口,GRER1控制32~63GPIO口,GRER2控制64~84GPIO口;将GRERx的某一位设置为0,取消对应的GPIO口的上升沿检测;将GRERx的某一位设置为1,将对应的GPIO口设置为上升沿检测,即有上升沿到达时,GEDR中的对应位将被置为1;保留位必须清零,且读操作无效;GFER:包括GFER0,GFER1,GFER2;GFER0控制0~31GPIO口,GFER1控制32~63GPIO口,GFER2控制64~84GPIO口;将GFERx的某一位设置为0,取消对应的GPIO口的下降沿检测;将GFERx的某一位设置为1,将对应的GPIO口设置为下降沿检测,即有下降沿到达时,GEDR中的对应位将被置为1;保留位必须清零,且读操作无效;2.4中断控制器中断控制器控制处理器支持的中断源,同时也包含所有中断源的优先级。控制器决定中断是否引起IRQ或FIQ发生。中断寄存器只支持一种优先级,但是中断可以被指向IRQ或FIQ,其中FIQ的优先级比IRQ的高。中断控制器包含下列这些寄存器:中断控制器IRQ未处理寄存器,ICIP;中断控制器FIQ未处理寄存器,ICFP;中断控制器未处理寄存器,ICPR;中断控制器掩码寄存器,ICMR;中断控制器级别寄存器,ICLR;中断控制器控制寄存器,ICCR。在大多数场合,一个中断的根本原因可以通过读两个场合下的寄存器:产生IRQ中断的ICIP或产生FIQ中断的ICIP来决定产生中断的器件。然后通过读该器件的状态寄存器就可以准确的找出是哪个函数在要求服务。如果ICCR[DIM]位为0,则在空闲模式时中断掩码寄存器ICMR将被忽略,即所有使能的中断都可以导致处理器退出空闲模式。否则,只有未被屏蔽的中断才能导致处理器退出空闲模式。ICCR[DIM]的reset值为0。2.5本章小结 本章主要介绍了IntelPXA255ARM9处理芯片的一些相关知识。主要针对本论文具体涉及到的几个方面,包括外部存储接口和相关寄存器,GPIO口,中断控制器等内容。

3嵌入式Linux设备驱动程序原理设备驱动程序[7,8]在Linux内核中扮演着特殊的角色,它们是一个个独立的“黑盒子”,使某个特定的硬件响应一个定理良好的内部编程接口,同时完全隐藏了设备的工作细节。用户操作通过一组标准化的调用完成,而这些调用是和特定的驱动程序无关的[8]。将这些调用映射到作用于实际硬件的设备特定的操作上,则是设备驱动程序的任务。这个编程接口能够使得驱动程序独立于内核的其他部分而建立,在需要的时候,可在运行时“插入”内核。这种模块化的特点,使得Linux驱动程序的编写非常简单,目前已有几百个驱动程序可用。3.1嵌入式Linux设备驱动程序简介3.1.1设备驱动程序组成在UNIX系统里,对用户程序而言,设备驱动程序隐藏了设备的具体细节,对各种不同设备提供了一致的接口,一般来说是把设备映射为一个特殊的设备文件,用户程序可以像对其它文件一样对此设备文件进行操作[9]。UNIX对硬件设备支持两个标准接口:块特别设备文件和字符特别设备文件,通过块(字符)特别设备文件存取的设备称为块(字符)设备或具有块(字符)设备接口。块设备接口仅支持面向块的I/O操作,所有I/O操作都通过在内核地址空间中的I/O缓冲区进行,它可以支持几乎任意长度和任意位置上的I/O请求,即提供随机存取的功能[10]。设备驱动程序可以分为三个主要组成部分:自动配置和初始化子程序,负责检测所要驱动的硬件设备是否存在和是否能正常工作。如果该设备正常,则对这个设备及其相关的、设备驱动程序需要的软件状态进行初始化。这部分驱动程序仅在初始化的时候被调用一次。服务于I/O请求的子程序,又称为驱动程序的上半部分。调用这部分是由于系统调用的结果。这部分程序在执行的时候,系统仍认为是和进行调用的进程属于同一个进程,只是由用户态变成了核心态,具有进行此系统调用的用户程序的运行环境,因此可以在其中调用sleep()等与进程运行环境有关的函数。中断服务子程序,又称为驱动程序的下半部分。在UNIX系统中,并不是直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由UNIX系统来接收硬件中断,再由系统调用中断服务子程序。中断可以产生在任何一个进程运行的时候,因此在中断服务程序被调用的时候,不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数。因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序的时候,都带有一个或多个参数,以唯一标识请求服务的设备。3.1.2内核功能划分Unix系统支持多进程的并发运行,每个进程都请求系统资源,比如处理能力、内存、网络连接和其他一些资源。内核(Kernel)作为大的可执行代码,负责处理所有这些请求[10]。根据内核完成任务的不同,可将内核功能分成如下几部分:进程管理:进程管理功能负责创建和撤销进程以及处理它们和外部世界的连接(输入和输出)。不同进程之间的通信是整个系统的基本功能,因此也由内核处理。除此之外,控制进程如何共享CPU的调度程序也是进程管理的一部分。概括的说,内核的进程管理活动就是在单个或多个CPU上实现对多个进程的抽象。内存管理:内存是计算机的主要资源之一,用来管理内存的策略是决定系统性能的一个关键因素。内核在有限的可用资源上为每个进程都创建了一个虚拟寻址空间。内核的不同部分在和内存管理子系统交互时使用一套相同的系统调用,包括从简单的malloc/free到其他一些不常用的系统调用。文件系统:Unix在很大程度上依赖于文件系统的概念,Unix中的每个对象几乎都可以被看作文件。内核在没有结构的硬件上构造结构化的文件系统,所构造的文件系统抽象在整个系统中广泛使用。另外Linux支持多种文件系统类型,即在物理介质上组织数据的不同方式。例如,可以把磁盘格式化为符合Linux标准的ext2文件系统,也可格式化为常用的FAT文件系统。设备控制:几乎每个系统操作最终都会映射到物理设备上。除了处理器、内存以及其他很有限的几个实体之外,所有设备控制操作都由与被控制设备相关的代码来完成。这段代码就叫做设备驱动程序(devicedriver),内核必须为系统中的每件外设嵌入相应的驱动程序,包括硬盘驱动器、磁盘和磁带。网络功能:网络功能也必须由操作系统来管理,因为大部分网络操作都和具体进程无关-数据包的传入是异步事件。在某个进程处理这些数据包之前,数据包必须已经被收集、标识和分发。系统负责在应用程序和网络接口之间传递数据包,并根据网络活动控制程序的执行。另外,所有的路由和地址解析问题都由内核处理。图3-1内核功能的划分3.1.3设备和模块分类Unix系统将设备分成三种类型:字符设备、块设备和网络接口。每个模块通常实现其中一种类型,相应的,模块可分为字符模块(charmodule)、块模块(blockmodule)和网络模块(networkmodule)三种。三种类型的设备如下:字符设备(characterdevice):字符设备是能够像字节流,如文件,一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少需要实现open、close、read和write系统调用。字符终端(/dev/console)和串口(/dev/ttyS0以及类似设备)就是字符设备的两个例子,它们能够用流抽象很好的表示。字符设备可以通过文件系统节点(如/dev/tty1和/dev/lp0等)来访问,它和普通文件之间的唯一差别在于,对普通文件的访问可以前后移动访问指针,而大多数字符设备是只能顺序访问的数据通道。然而也存在和数据区特性类似的字符设备,访问它们时可前后移动访问指针。块设备(blockdevice):和字符设备一样,块设备也是通过/dev目录下的文件系统节点被访问的。块设备上能够容纳文件系统。在大多数Unix操作系统中,块设备包含整数个块,而每块包含1KB或2的几次幂字节的数据。Linux允许应用程序像字符设备那样读写块设备,可以一次传递任意多字节的数据。因而,块设备和字符设备的区别仅仅在于内核内部管理数据的方好似,也就是内核和驱动程序的接口不同。像字符设备一样,块设备也是通过文件系统节点被访问的,它们之间的差异对用户来说是透明的。块驱动程序除了给内核提供和字符驱动程序一样的接口以外,还提供了专门面向块设备的接口,不过这些接口对于那些从/dev目录下某个目录项打开块设备的用户和应用程序都是不可见的。另外,块设备的接口必须支持挂装(mount)文件系统。网络接口(networkinterface):任何网络事务都要经过一个网络接口,即一个能够和其他主机交换数据的设备。通常接口是一个硬件设备,但也可能是一个纯软件设备,如回环接口(loopback)。网络接口由内核中的网络子系统驱动,负责发送和接收数据包,它无须了解每项事务是如何映射到实际传送的数据包的。尽管Telnet和FTP连接都是面向流的,它们都使用了同一个设备,但这个设备看到的只是数据包,而不是独立的流。由于不是面向流的因此将网络接口映射到文件系统中的节点,如/dev/tty1,比较困难。Unix式的访问网络接口的方法是给它们分配一个唯一的名字,但这个名字在文件系统中不存在对应的几点项。内核和网络驱动程序间的通信完全不同于块设备驱动程序之间的通信,内核调用一套和数据包传输相关的函数,而不是read、write等。3.2字符设备驱动程序本论文中涉及到的主要是字符设备驱动程序。启动和关闭设备必须调用open和release方法;当PC上的应用程序通过网口发送大批数据到PXA255处理器上时,处理器必须先调用poll和select方法将数据缓存下来,然后通知内核去读取数据,这就要使用到ioctl方法和write方法;当数据处理完毕后通知内核将数据取出时要调用read方法。驱动程序是PXA255处理器正常工作的基础,对于本论文的具体应用将会在第五章中给出。字符设备接口支持面向字符的I/O操作,它不经过系统的快速缓存,所以它们负责管理自己的缓冲区结构。字符设备接口只支持顺序存取的功能,一般不能进行任意长度的I/O请求,而是限制I/O请求的长度必须是设备要求的基本块长的倍数。设备由一个主设备号和一个次设备号标识。主设备号唯一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。次设备号仅由设备驱动程序解释,一般用于识别在若干可能的硬件设备中,I/O请求所涉及到的那个设备。3.2.1字符设备驱动原理scull(SimpleCharacterUtilityforLoadingLocalities)[11]是一个操作内存区域的字符设备驱动程序,这片内存区域被当作一个设备。scull的优点在于它不和硬件相关,因为每台计算机都有内存。scull只是操作某些内存,通过kmalloc分配。Scull源代码实现了下列设备,将由模块实现的每种设备称作一种“类型(type)”:scull0-scull3:4个设备保护了4片内存区,都是全局性的和持久性的。“全局性”是指,如果打开设备多次,所有打开它的文件描述符共享其中的数据。“持久性”是指,如果设备关闭后再次打开,数据不丢失。由于可以使用常用命令访问这个设备,如cp,cat以及shellI/O重定向等。scullpipe0-scullpipe3:4个“FIFO”设备,操作起来有点像管道。一个进程读取另一个进程写入的数据。如果有多个进程读同一个设备,他们彼此间竞争数据。通过scullpipe的内部结构可以了解阻塞型和非阻塞型读/写是如何实现的;没有中断也会出现这样的情况。尽管真实的驱动程序利用中断与它们的设备同步,但阻塞型和非阻塞型操作是非常重要的内容,从概念上讲与中断处理无关。scullsingle、scullpriv、sculluid、scullwuid:这些设备与scull0相似,但在何时允许open操作时都不同方式的限制。第一个(scullsingle)只允许一次一个进程使用驱动程序,而scullpriv对每个虚拟控制台是私有的(每个设备对虚拟控制台是私有的)。sculluid和scullwuid可以多次打开,但每次只能有一个用户;如果另一个用户锁住了设备,前者返回-EBUSY,而后者则实现为阻塞型open。通过这些可以展示如何实现不同的访问策略。主设备号标识设备对应的驱动程序,内核利用主设备号将设备与相应的驱动程序对应起来。次设备号只由设备驱动程序使用;内核的其他部分不使用它,仅将它传递给驱动程序。一个驱动程序控制若干个设备并不为奇(如上面的例子所示)次设备号提供了一种区分它们的方法。3.2.2open和release方法open方法提高给驱动程序以初始化的能力,从而为以后的操作做准备[11,12]。此外,open一般还会递增设备的使用计数,防止在文件关闭前模块被卸载出内核。这个计数值在release方法中被递减。在驱动程序中open应完成如下工作:递增使用计数。检查设备特定的错误,如设备未就绪或类似的硬件问题。如果设备是首次打开,则对其进行初始化。识别次设备号,并且如果有必要,更新f_op指针。分配并填写被置于filp->private_data里的数据结构。release方法的作用正好与open相反,在驱动程序中应完成如下工作:释放由open分配的、保存在filp->private_data中的所有内容。在最后一次关闭操作时关闭设备。使用计数减1。3.2.3read和write方法读/写方法完成的任务是相似的,拷贝数据到应用程序空间或从应用程序空间拷贝数据。因此它们的原型很像:ssize_tread(structfile*filp,char*buff,size_tcount,loff_t*offp),ssize_tread(structfile*filp,char*buff,size_tcount,loff_t*offp)。对于这两个方法,参数filp是文件指针,参数count是请求传输的数据长度,参数buff是指向用户空间的缓冲区,这个缓冲区或者保存将写入的数据,或者是一个存放新读入数据的空缓冲区,最后的offp是一个指向“longoffsettype”对象的指针,这个对象指明用户在文件中进行存取操作的位置,返回值是“signedsizetype”。关于数据传输,和这两个设备方法相关的主要问题是,需要在内核地址空间和用户地址空间传输数据,不能用通常的办法利用指针或memcpy来完成这样的操作。内核空间和用户空间地址之间很大的一个差异就是,用户空间的内存是可被换出的。当内核访问用户空间指针时,向对应的页面可能已不在内存中了,这样就会产生一个页面失效。scull的read和write代码要做的工作,就时在用户地址空间和内核地址空间之间进行整段数据的拷贝,这种能力是由下面的内核函数提供的,也是每个read和write方法实现的核心部分:unsignedlongcopy_to_user(void*to,constvoid*from,unsignedlongcount),unsignedlongcopy_from_user(void*to,constvoid*from,unsignedlongcount)。这两个函数的作用并不限于在内核空间和用户空间之间拷贝数据,它们还检查用户空间的指针是否有效。如果指针无效,就不会进行拷贝;另一方面,如果在拷贝过程中遇到无效地址,则仅仅会赋值部分数据。在这两种情况下,返回值是还未拷贝完的内存的数量值。scull代码如果发现这样的错误返回,就会在返回值不为0时,返回-EFAULT给用户。3.2.4poll和select方法使用非阻塞型I/O的应用程序也经常使用poll和select系统调用。poll和select的功能本质上是一样的:都允许进程决定是否可以对一个或多个打开的文件做非阻塞的读或写。因此它们常常用于那些要使用多个输入或输出流而又不会阻塞于其中任何一个流的应用程序中。同一功能之所以要由两个单独的函数分别提供,是因为它们几乎是同时在两个不同的Unix团体中分别实现的:select由BSDUnix实现,而poll由SystemV实现。poll方法可用来实现poll和select系统调用,它的原型如下:unsignedint(*poll)(structfile*,poll_table*):该驱动方法在用户空间程序执行poll或select系统调用时被调用,包括传递一个与设备相关的文件描述符。设备方法分两步处理:一是在一个或多个指明了poll状态变化的等待队列上调用poll_wait;二是返回一个用来描述操作是否可以立即无阻塞执行的位掩码。传递给poll方法的第二个参数,poll_table结构,用于在内核中实现poll和select系统调用。它在<linux/poll.h>中声明,驱动程序代码必须包含这个头文件。它被传递给驱动程序方法,以使每个可以唤醒进程和修改poll操作状态的事件队列都可以被加入poll_table结构中,这通过调用函数poll_wait来完成:voidpoll_wait(structfile*,wait_queue_head_t*,poll_table*)poll和select与read、write的交互:poll和select调用的目的是事先判断是否有I/O操作会阻塞。从这个方面说,它时对read和write的补充。poll和select的更重要的用途是可以让驱动程序同时等待多个数据流,poll和select在这方面也时很有用途的。3.2.5ioctl方法在用户空间内调用ioctl函数的原型大致如下:intioctl(intfd,intcmd,…):由于使用了一连串的“.”的缘故,该原型在Unix系统调用列表之中非常突出,这些点代表可变数目参数。但是在实际系统中,系统调用实际上不会有可变数目个参数。因此,ioctl的第3个参数事实上只是一个可选参数,这里用点只是为了在编译时防止编译器进行类型检查。第3个参数的具体情况与要完成的控制命令(第2个参数)有关。某些命令不需要参数,某些需要一个整数做参数,而某些则需要一个指针参数。使用指针通常是可以用来向ioctl传递任意数目数据;设备可以从用户空间接收任意大小的数据。另一方面,设备驱动程序得ioctl方法的原型如下:int(*ioctl)(structinode*inode,structfile*filp,unsignedintcmd,unsignedlongarg):inode和filp指针是根据应用程序传递的文件描述符fd计算而得的,与read和write的用法一致。参数cmd不经修改地传递给驱动程序,可选的arg参数无论是指针还是整数值,它都以unsignedlong的形式传递给驱动程序。如果调用程序没有传递第3个参数,驱动程序所接收的arg没有任何意义。3.3本章小结本章的主要内容是嵌入式Linux设备驱动原理[13],首先介绍了嵌入式设备驱动程序的组成和硬件支持的标准接口,然后讲解了Linux内核功能的划分,然后介绍了内核的设备和模块分类,其中字符设备是本文所用到的设备驱动的重点。最后一小节详细的介绍了字符设备驱动程序,从字符设备驱动原理开始介绍,接下来分别介绍了open和release方法、read和write方法、poll和select方法以及ioctl方法。这些方法是驱动程序的基础。最后介绍了本论文中处理器的驱动函数的流程图。

4硬件方案介绍综合项目设计要求,硬件方案设计如图4-1所示。硬件平台包括CPU(X-SCALE)及其相关外设包括(Flash、SDRAM和Ethernet)、FPGA(StratixII系列)、DA和AD以及晶图4-1硬件方案图振和电源装置。对应前面功能要求,基带信号收发处理算法在FPGA[14]中实现,频谱感知算法在FPGA和X-SCALE中联合实现[15,16],组网控制在X-SCALE实现。这里需要提出的是,我们的协议是基于现有的硬件平台的,而我们的设计与实现工作主要集中在MAC层的接口协议上,所以这里对硬件的设计方案仅是做一个简单的介绍。4.1器件选择FPGA采用ALTERA公司StratixII系列高性能FPGAEP2S90F1020/EP2S180F1020,容量达600万门内部自带12个高性能PLL;CPU采用Intel公司PXA255AOC400,X-SCALE芯片其主频达到400MHz;ADC采用AnalogDevice公司AD9238,位宽12位、最高速度65MSPS;DAC采用AnalogDevice公司AD9767,位宽14位、最高速度125MSPS;晶振采用高精度温度补偿晶振,其误差在1ppm之内;电源采用MAX1623,它是一款高效开关电源,降低硬件平台功耗;射频部分工作频段:336~344MHz,一共8MHz,间隔2MHz为1个频段,实行动态频谱接入,工作过程中可以通过FPGA的测试口对其进行配置,实现灵活的频点切换。4.2硬件实现平台根据以上设计方案,经过PCB制版,焊接和调试得到硬件实现的通用软件无线电平台(GeneralSoftwareRadioPlatform1GSRP),如下图4-2所示。该平台使用了StratixII,EP2S180F1020C图4-2通用软件无线电平台这一平台可以作为认知无线电网络中的单个接入单位,后续频谱感知和自适应混合调制解调算法均在该平台上实现。4.3本章小结本章主要讨论了硬件方案的设计与实现,包括设计要求并给出设计方案,选择器件最后制版调试实现硬件平台。

5MAC层接口协议的具体设计与实现5.1MAC层协议基本框架5.1.1演示场景和实现目标在演示的过程中,将以点对点传输作为测试的基本场景,以实时视频流作为演示的主要业务载体。为了表现多模式混合波形调制认知无线电平台(以下简称平台)的多模式混合波形调制特性,以及认知无线电特性,在点对点的传输过程中,将以一个信号发生器作为干扰源,在平台所支持的频段上随机的发送干扰信号。平台必须能够对外部的干扰情况进行实时分析,并立即做出相应的调整策略,而策略的目标值主要是各节点所工作的中频位置f,所占用的带宽w,以及传输模式m,这三个值所组成的集合简称为传输参数[17,18]。而在平台对上述目标值进行动态调整的时候,还必须保证上层业务能够持续传输,尽量不受干扰。尤其对于实时的视频流,可以通过改变帧率的方式来达到改变传输速率的效果,从而和底层的传输能力相匹配。例如,在平台上,当采用CPM模式,以几十Kbps的速率进行传输时,可以指导上层将帧率调整为2,而当采用OFDM或者QAM模式,在数百Kbps的速率下进行传输时,则可以指导上层将帧率调整为20甚至更高。总之,为了满足以上的演示需求,MAC层达到以下的实现目标[18]:a.能够实时的从FPGA获得信噪比(S)以及频谱感知结果(C)等信息,并根据这些信息选取最合适的传输参数,来指导物理层的调制解调过程。为此必须在物理层和MAC层之间建立合理的接口,并在MAC层建立合理的信息反馈机制。b.必须始终保持收发节点的载波同步,同时还要体现出收端决策的特点。c.必须能够和上层建立合理的接口并设计相应的处理流程来自适应底层传输能力的变化。5.1.2MAC层基本工作原理为了实现上文所制定的目标,并考虑到平台的处理能力以及各种机制的实现复杂度,在本平台上将建立一个公共信道(fc)作为传输参数的沟通信道,同时该信道也能够保证各节点能够始终保持传输同步(此时必须保证该信道在实现的过程中始终不受干扰,即该频道为授权的)[18]。节点间的数据传输分为同步和传输两个阶段。在同步阶段,各节点在fc上通过RTS1-CTS1-ACK1的方式进行沟通,这些数据都将采用直扩的方式作为调制方式,以保证传输的稳定性。节点A在需要发送数据包之前,首先必须在fc上向目标节点B发送RTS1数据包,该数据包中包含了节点A当前所获得的频谱感知结果C;接收节点B在收到RTS1后,将其中的C与本节点的C信息进行合并,并根据该结果决定本次传输所使用的中频f,以及带宽w,同时将这两个信息通过CTS1包反馈给A;A在收到该信息后,对该结果进行确认,如果觉得可以支持该中频及带宽,则在反馈的ACK信息中确认开始传输,否则拒绝连接,并重新开始同步过程。当节点A,B完成同步以后,则可以在预定的中频f上开始数据传输。此时,节点A、B都将中频设为f。节点A向节点B发送RTS2数据包(该数据包由于较短,依然调制在直扩头中),节点B回应CTS2数据包(直扩调制),节点A接着就可以发送数据包DAT,最终节点B传输确认数据包ACK2。DAT数据包的调制方式在一开始的时候采用默认值,一般为比较稳定的CPM方式或者BPSK方式。当节点B根据接收的数据统计出接收信噪比S以后,则B点根据该值来选定比较合适的传输模式,并将模式信息通过ACK2数据包或者下次同步过程时的CTS1数据包反馈给A,A由此来设定自身在传输DAT数据包时所采用的模式。当节点A在一定时间(T1)内未收到CTS2数据包,或者B在T1内未收到RTS2数据包,则在T1超时后返回到公共信道fc,重新等待进行同步。当节点A未收到ACK2数据包,或者ACK2数据包告知数据错误时,要对刚才的DAT信息进行重传。而由于传输模式、传输带宽等参数会随着外界环境的不同而不断变化,因此为了保证对上层的业务传输不产生影响,MAC层还必须和上层建立一个接口来指导上层的传输流量。在本平台上,将主要通过反馈传输模式以及拒绝访问这两个途径达到目标。反馈传输模式是指MAC层为应用层提供IOCTL接口来告知当前的传输参数,上层由此确定当前的传输能力,并由此来控制业务的平均速率。而拒绝访问则是指MAC层将根据当前发送缓冲区的长度来决定是否继续接受发送数据,如果长度超过一定门限,则拒绝上层继续发送数据,上层在收到该拒绝访问信息后,则必须考虑来控制自身的平均速率。一般来讲,拒绝访问机制可以逐步降低上层的传输速率;而反馈传输模式机制则可以使上层快速的改变传输模式(无论使得传输速率变大或者变小)。5.2FPGA与XScale接口5.2.1收发端与XScale的接口与地址FPGA与XScale的GPIO接口说明表5-1FPGA与Xscale接口说明代码中函数所用GPIO功能描述备注ResetFPGA()(GPIO22)FPGA复位信号inform_FPGA_read()(GPIO21)CPU通知FPGA开始读数据信号保证FPGA上次数据已处理完,即进入send_irq中断inform_FPGA_change_if()(GPIO23)通知FPGA切换中频中频信息(32bits)要提前写入ADDR_INTER_FREQsend_irq(中断脚)(GPIO19)FPGA通知CPU数据已发送注意:此两个中断的意义read_irq(中断脚)(GPIO20)FPGA接收到数据,通知CPU处理start_FPGA_sense()(GPIO70)CPU通知FPGA开始感知RAM2中的数据信息感知期间发射机不工作,所需时间约为10ms,结果为1024bitsRAM地址说明表5-2RAM地址说明代码中宏定义RAM地址功能描述备注ADDR_SEND_RAM_MODE0xf4000000配置FPGA发送模式ADDR_SEND_RAM_DATA0xf400000cFPGA发送数据地址ADDR_READ_RAM1_START0xf4010000FPGA读取RAM1中72bit的模式信息头24*3=72bit为控制信号,ADDR_READ_RAM1_DATA0xf401000cFPGA读取RAM1中的数据信息ADDR_READ_RAM2_START0xf4020210FPGA读取RAM2中72bit的模式信息24*3=72bitADDR_READ_RAM2_DATA0xf402021cFPGA读取RAM2中的数据信息ADDR_SENSING_RESULT 0xf4030400FPGA存放感知结果ADDR_INTER_FREQ0xf4040000FPGA存放中频ADDR_SNR0xf4040010FPGA存放SNR5.2.2收发端帧格式与字段说明send_ram与Xscale的接口:data:发送的控制信号和数据,头24*3=72bit为控制信号,每一种模式各24bit,24bit中的数据长度字段以bit为单位。中间补24bit的0以便于对齐(建议去掉以提高传输效率)。后面则是要发送的数据。send_all_over:发送结束信号,为脉冲信号。 (GPIO19)每一种模式的24bit帧信息格式如图5-1所示: 图5-124bit帧信息格式其中各字段的意义分别为:MOD(1:2): 00::OFDM01:QAM10:CPM11:Preamble(PN)其他:下一模式为空,结束接收MOD_H(1:2): QAM中,00:BPSK,01:QPSK,10:16QAMOFDM中,00:16QAM映射,01:QPSK映射CPM中,00:4CP,01:8CPRATE(1:4):表示三种模式中的五种速率MPDU_LENGTH(1:16):表示下一种传输模式发送数据的比特数。发送短帧时,数据长度信息和数据存储在发送的数据段内,数据长度为8bit,单位为byte。单独增加一个RAM24bit,第一个比特为长短帧模式指示信号,0为短帧,1为长帧;第二个比特指示选择公共信号或是数据信道,0为公共信道,1为数据信道;6bit指示中频信号,数据范围为0-63,其中31对应10.7Mhz,步进为90Khz;后16比特保留。Channel_mod:公共信道数据信道状态指示,低电平为公共信道,高电平为数据信道,当为数据信道时,需要配置中频信号。(GPIO23,必须确认该io口是否可用)recv_ram与XScale的接口:recv_all_over:一整帧接收完成信号(GPIO20)。ram_recv_rden:读取RAM的使能信号; count_recving:读取RAM的地址信号; 起始地址: 0xf4010000 0xf4020210ram_rd_data:RAM输出的数据。增加一个信号来指示捕获到直扩头,以减少碰撞概率:0xf4030004(最低位)头上加2byte的数据长度信息,以byte为单位。图5-2recv_ram与Xscale接口使能信号SNR和频谱感知的接口:SNR为5bit数,在一帧结束时输出:实际为8bit的后5bit。用RAM来读。 0xf4040010(低5位) 图5-3SNR信息谱感知结果sensing_result:谱感知结果sensing_result为1024bit,也在一帧结束时输出:起始地址:0xf4030400用RAM来读。每bit表示相应频道是否处于空闲状态。1表示被占用,0表示空闲。 图5-4sensing_result信息5.3数据包结构定义由于演示中仅需进行点对点的传输,因此在协议上相对简单,仅需要RTS1、CTS1、ACK1、RTS2、CTS2、DAT、ACK2这7种数据包即可,同时不需要引入地址概念。数据包结构包括:前导头(固定为0x157e)、包类型(type4bit)、包长(len14bit)、数据部分(Data)以及校验位(checksum16bit)。数据包分成DATA包(DAT和RTS1),和非DATA包的两类,根据两类包的区别,采用了不一样的包结构。DATA包,主要的信息包含在Payload段,数据长度也会达到1600Byte的长度。而非DATA包来说,所包含的信息主要是为了同步、消息的传递的作用,所以长度比较短。在采用校验方式时,利用checksum()来对重要信息进行校验,防止数据在传输过程中的误码。DATA包时,因为数据长度比较长,所以从效率上考虑,对前32bits进行了校验和运算。非DATA包时,对整个信息进行了校验和运算。5.3.1控制包RTS1(0x1):传输频谱感知信息,payload部分共1024bits。双方交互此消息后,能够得出传输模式。和射频信道的值。Type=0x1;Len=128+6+2;因为CPU与FPGA的连接方式,只能以4Byte的方式往FPGA的RAM里边拷贝数据,所以会多出Resvered这两个字节的多余。CTS1(0x2):主要传输频率信息(8bit),模式信息(8bits)以及带宽信息(16bits)。此消息由接收端来发出,接收端根据发送端的RTS1信息,并且和自己感知结果对比,而得出这三个参数。接收端收到CTS1后,根据这些参数来发送数据,如图5-5所示。ACK1(0x3):主要传输发送节点是否接受接收节点所设定的传输参数。共16bit,前8bit表示是否同意传输,后8bit作为传输失败原因使用,暂时保留;考虑到可能有误码存在,定义当且仅当大于等于4bit信息为1时表示同意传输,否则表示不同意传输,如图5-6所示。RTS2(0x4):主要传输用于同步,没有实际的传输字段。RTS2的发送是在切换的频率信道上的,目的是为了验证此信道能正常收发数据。字段HaveDataSend表示发送端是否有数据要发送,当HaveDataSend=1时,表示有数据要发送,对方收到后也返回CTS2(1),接着就开始传送DAT包。当HaveDataSend=1时,表示此包只是用于保持连接,对方发送CTS2(0),双方继续传输RTS2(0)->CTS2(0)->RTS2(0)->CTS2(0)…(前提是不考虑能量的消耗),如图5-7所示。CTS2(0x5):主要用于应答RTS2,不包含传输模式信息,如图5-8所示。ACK2(0x7):主要用于判断节点是否正确收到数据,共16bit,正确接收与否同ACK1的表示方式;后8bit包含下次传输的接收或发送状态信息,BS优先级高于SS,当BS有控制信息需要发送时,将在ACK2的后8bit中包含信息通知SS,在下一次发送时BS优先发送,如图5-9所示。图5-5CTS1控制包图5-6ACK1控制包图5-7RTS2控制包图5-8CTS2控制包 图5-9ACK2控制包5.3.2数据包DAT(0x6):主要用于传输数据,其长度信息以及需要的数据已经包含在直扩头的前96bit当中,如图5-10所示。图5-10 DAT数据包5.4协议具体流程及实现细节MAC层传输协议的数据传输流程示意图和MAC层协议保持连接流程示意图分别如图5-11和图5-12所示:图5-11MAC层协议数据传输流程示意图图5-12MAC层协议保持连接流程示意图节点间数据传输的基本原理已经在第二部分中进行了介绍。本节主要就协议流程中的一些细节进行介绍:5.4.1传输时隙划分由于采用RTS-CTS握手的方式进行传输,因此并不需要进行严格的时隙设定;而是在控制信道上通过RTS竞争来获取沟通机会,并在后续的数据传输阶段进行数据传输,数据传输的长度最大值限制以物理帧格式中的限制为准,并可以随意设定,同时DAT传输阶段甚至可以考虑传输若干个混合波形调制帧[21,22]来提高整体的传输效率(尤其在仅存在点对点传输的场景下,可以着重对该情况进行考虑)。而当一次传输过程(包含同步及数据传输阶段)完成以后,A、B节点可以根据自己发送队列内是否有数据需要传输,来选择是否在下一个数据阶段进行数据传输。由此引入了竞争的问题,可通过退避算法来解决,但这样会使得进入下一个传输阶段的同步过程前有较大的冲突解决等待时间。而为了提高传输效率,在点对点传输的情况下,接收端B可以在数据传输阶段的CTS2信息中向A提出要求,要求在下一个传输阶段能够发送数据,A可以在DAT包中对此信息进行回应,而节点B则在ACK2数据包中做最后的确认。5.4.2节点状态每个节点可以分为发送(TRANS),接收及感知(RECV&SENGSING),以及感知(SENSING)这三个状态。TRANS态主要用来发送数据。节点进入TRANS态后,将进行数据传输,对于DAT以及除DAT以外的数据包,分两种情况进行传输:传输DAT数据包时,MAC层根据当前所支持的传输模式、符号率,来决定当前帧所能传输的最大长度(由物理层各模式所支持的最大传输长度所决定)。我们在代码中定义节点状态机(StateMachine),为#defineSTATE_IDLE 0#defineSTATE_RECV_RTS1 2#defineSTATE_RECV_CTS1 4#defineSTATE_RECV_ACK1 6#defineSTATE_RECV_RTS2 8#defineSTATE_RECV_CTS2 10#defineSTATE_RECV_DAT 12#defineSTATE_RECV_ACK2 14软件实现中,将STATE_IDLE、STATE_RECV_RTS1、及感知状态合并成一个状态,并且将“发送状态”都作为了“过渡态”,直接进入下一个RECV状态。对于一个物理帧中的三种模式,在一般情况下可以采用同一种模式来进行传输;而当DAT包中有部分数据对传输质量的要求比较高时,则根据其数据量,将其中的一种甚至三种模式设置为SNR要求更低的传输模式。最后则将所选择的三种模式的相关信息填入到三个模式字段中。当需要传输的数据量较少时,则可以将相应的数据长度缩短即可(目前的做法)。当考虑到传输开销时,建议在传输数据较少时,只利用一种模式进行传输,如图5-13所示。图5-13DAT包传输

温馨提示

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

评论

0/150

提交评论