《基于WIFI的无线图像传输系统的设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
ByWangJingADissertation/ThesisSubmittedtoUniversityofChineseAcademyofSciencesInpartialfulf'dlmentoftherequirementForthedegreeofMasterOfEngineeringXi’anInstituteofOptics&PrecisionMechnics.ChineseAcademyofSciences5,2013 科研道德声明fIIIHIIIIrllllHIIIrllllrlIIfY2431785秉承研究所严谨的学风与优良的科学道德,本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果。论文中所引用的内容都已给予了明确的注释和致谢。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了致谢。申请学位论文与资料若有不实之处,本人承担_切相关责任。论文作者签名:鎏歪日期:彬.∥知识产权声明本人完全了解中科院西安光学精密机械研究所有关保护知识产权的规定,即:研究生在所攻读学位期间论文工作的知识产权单位系中科院西安光学精密机械研究所。本人保证离所后,发表基于研究生工作的论文或使用本论文工作成果时必须征得产权单位的同意,同意后发表的学术论文署名单位仍然为中科院西安光学精密机械研究所。产权单位有权保留送交论文的复印件,允许论文被查阅和借阅;产权单位可以公布论文的全部或部分内容,可以采用影印、缩印或其它复制手段保存论文。(保密的论文在解密后应遵守此规定)、,互论文作者签名:班)巳日期:2口B5.∥导师签名:盈丝!笙同期:》r;.f./6 致谢短暂的三年转眼间就要过去了,在西安光机所的三年里我不但收获了知识和科研技能,更明白了做人和做事的道理。在三年美好的硕士时光即将过去的时候,我首先要对我的指导老师邱跃洪研究员表示敬意和感激。感谢邱老师在这些年给我的无私的帮助和指导。邱老师严谨的治学态度和科研精神是我一直一来的学习榜样,也是我在以后的科研和职业道路上的精神动力。我还要感谢在我的论文完成过程中给我许多建议和帮助的江宝坦师兄、刘辉和兀颖。你们的许多建议和好的想法都对我有很大的启发,并对最后工作的完成起了很大的作用。感谢三年来一起奋斗在空间室的同学们,没有你们就没有空间室良好的学习和科研氛围。感谢我的两个室友,徐利民和刘寅,你们陪伴我度过了这三年的时光,你们的友谊是我的巨大财富。最后,对含辛茹苦把我抚养大的父母表示感谢,您们对我的恩情早己无法用语言来描述。汪竞2013年5月 摘要网络化是信息技术发展的基本方向,在最近十年里WIFI技术取得了极大的成功,为人们提供了方便和快速的网络接入,其传输速率也可与有线的以太网相比拟。嵌入式技术的发展使得计算机和网络能被嵌入到我们生活中的任何地方,ARM的小型化和低成本给我们带来了方便。与此同时,图像获取技术和人们对图像数据的需求也产生了巨大的增长,随着人们获取图像的手段越来越先进和图像的数据量越来越大,图像的传输问题成了一个亟待解决的瓶颈。本课题背景就是AOTF光谱成像仪的图像传输问题。我们把嵌入式和无线网络结合起来,完成了图像传输的任务。首先大致上讨论了802.1l技术和嵌入式开发的基础知识,然后介绍了具体的硬件设计,我们选用的是一款带ARM核的FPGA作为处理器芯片,无线模块使用Marvell公司的88W8686,并在此基础上完成硬件的设计。软件部分先介绍了嵌入式TCP/IP协议栈LWIP,然后详细描述了其网络接口和驱动移植过程。最后利用LWIP的API构建了一个小型的服务器,它能响应相应客户端的数据请求,并能以无线的方式通过adhoc网络将图像发送到客户端。最后的测试结果表明我们设计的系统能完成图像数据的无线传输,具有一定的实用价值。关键词:WIFI,嵌入式,LWIP,图像传输ⅡI abstractABSTRACTBeingconnectedbynetworkisoneofthemostimportantdirectionsininformationtechnology.Inrecentyears,theWIFItechnologyhaswongreatSuccessandprovidedUSfastaccesstotheintemet.ThetransmissionspeedofWlFIisnotslowerthanthewiredEthemet.Withthedevelopmentoftheembeddedtechnology,thecomputercanbeusedinalmosteveryaspectofourlife.TheARMbringsUSbigconvenienceforitssmallsizeandlowprice.Atthesametime,thetechnologyofobtainanimagegetaprogressandthedemandforimagedataalsoincreasesalot.Withtheimagedataweobtainedbecomingmoreandmorebig,thetransmissionofthemiSabottleneck.OurtaskistOdesignaimagetransmissionsystemfortheAOTFcamera.WecombinedtheembeddedandWLANtechnology.Atfirst,wediscussthebasicknowledgeof802.11andthedevelopmentofARM.Then,weintroducedthedetailedhardware.AnFPGAwiththeARMcoreisselected.Thewirelesschipweusedisthe88W8686fromtheMarvell.Inthesoftwarepart,wechosetheembeddedTCP/IPstackI脚.Thenetworkinterfaceandthetransplantofthedriveraredescribed.Atlast,webuiltasmallserverbytheAPI.Itcanrespondtothecorrespondingclientandsendtheimagedatatoitthroughanadhocnetwork.Theresultshowsthatoursystemisabletotransmittheimageandhasapracticalvalue.KeyWords:WIFI,Embeddedsystem,LWIP,imagetransmitV 目录目习℃致谢⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯I摘要⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯IIIABSTRACT⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.V目录⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯VⅡ第一章绪论⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯11.1课题背景和意义⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯11t2本论文组织结构⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯2第二章WIFI和嵌入式系统概述⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.52.1WIFI技术简介⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.52.1.1无线局域网简介⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯52.1.2IEEE802.11系列协议⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一72.2正交频分复用(OFDM)技术及其信道估计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯102.3嵌入式系统开发⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯142.3.1嵌入式系统简介⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..142.3.2ARMcortexm3及其开发⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..15第三章WIFI无线图像传输系统的硬件设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯193.1WIFI无线图像传输系统的整体设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯193.2主要使用的芯片介绍⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.203.3具体硬件电路设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..253.3.1无线模块外围电路的设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯2533.2系统电源电路的设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.263.3.3无线芯片与FPGA接口电路的设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯273.3.4天线接口与阻抗匹配设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一273.3.5其他电路的设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..283.4PCB{殳计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..293.5本章小结⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯31第四章WIFI无线图像传输系统的软件设计⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.334.1Microsemi公司的集成开发环境简介⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯..334.2软件体系整体结构⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.354.3LWD简介⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一354.4LWIP的移植⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一374.5网络接口与驱动移植⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.394.6API及应用程序⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.46第五章系统测试和展望⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.595.1系统测试⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.595.2本文工作总结和展望⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯.61参考文献⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯63作者简介及在学期间发表的学术论文与研究成果⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯65VII 第一章绪论1.1课题背景和意义在过去的十年里,把计算机和支持计算机的设备连接到网络的需求急剧的增长。随着嵌入式技术的发展,计算机技术嵌入到我们日常生活的设备的趋势越来越明显,而且其价格和成本也在不断下降。与此同时,WIFI或ZIGBEE这样的无线网络技术也在不断涌现[1]。这两种技术的融合使得其在医疗、安全、监控、交通和工业处理等领域的应用越来越广泛。我们可以把传感器和成像设备连接到英特网上,从而可以在能访问到因特网的任何地方监控。网络技术的日新月异使得网络的灵活性、数据速率和误码率等性能不断改善,把现有的其他技术和网络结合起来构建新的应用是互联网发展的一大方向,包括移动互联、云计算和物联网等新兴概念也不断出现。嵌入式设备的一大特点是体积和成本低,其计算能力和资源也一般是很有限的。因此嵌入式网络和开发和一般计算机上的网络开发是不同的,其代码必须严格考虑资源的占用[2】o在通信领域,无线和移动通信以其独特的灵活性和方便性正占据着越来越重要的地位。蜂窝电话技术早已经过了从GSM和CDMA到WCDMA、CDMA2000和TDSCDMA的跨越,并正在向着速率更高,稳定性更好的LTE演进。而在无线局域网领域,各种不同性能的标准也都在不断地制定和成熟中。其中,最重要的有WIFI技术,Zigbee技术和蓝牙技术,还有将来的WiMAX技术[1】。图像获取和成像领域新的技术和方法也在不断地被提出,成像的波段也基本覆盖了电磁频谱的大部分频段。按频段分,从微波领域的合成孔径雷达遥感成像、太赫兹成像到常见的红外和可见光成像。成像技术的进步使人类观察世界的视野和视角变得前所未有的广阔。获取的图像空间和时间分辨率也随着各种物理的和算法的处理而持续提高。图像在遥感、航空航天、生物医学和计算机视觉里起着及其重要的作用。图像己成为人类认识和改造世界的强大武器。但是,随着人们获取图像的手段越来越先进和图像的数据量越来越大, 基于WIFI的无线图像传输系统的设计图像的传输问题成了一个亟待解决的瓶颈。在常见的有线图像传输方式中有USB传输和以太网传输,其中USB3.0协议理论能达到5Gbps传输速率,但是只能是几个点之间的传输,不能满足目前越来越大的组网需求。最新的以太网协议的数据速率早己超过千兆,并能方便地组成局域网,也可以接入国际互联网。但是有线传输固有缺点使得它在物理布线困难或难以布线的地方没法发挥作用。因此,无线局域网成为了众望所归的技术。在几种主要的无线局域网协议之间也存在着竞争。Zigbee是由几十家公司联合提出的一个无线局域网协议,其目的是商用和家居远距离和自动控制应用,也多用在自然环境的检测等无线传感领域。该网络的自组织能力强,控制协议简单。Zigbee的单个节点可以在电池的供电下工作很长的时间,而且成本低。广泛应用于库存管理、产品质量监控、特殊地理环境的监控等【261。但是其数据速率太低,不足以满足图像这样大数据量的传输需求,而且Zigbee是adhoc网络,也不能接入因特网。WIFI技术的数量速率高,最新的802.1ln版本可达600M/s,可组成adhoc网络也可通过无线路由器接入骨干网,支持QoS服务质量保证和多媒体数据传输。因此WIFI是我们最理想的选择。在新的成像技术中,声光可调谐滤波器(AOTF)成像是一种非常有前途的光谱成像技术,它结合了图像处理与光谱分析这两个不同的领域。AOTF偏振成像光谱仪以其结构简单、光谱分辨率高等特点成为国内外研究的热点。通过对目标的不同波段进行成像能获取景物的尽可能多的信息。我们还可以对所成的不同波段的图像进行配准和融合以得到分辨率更高的彩色图像。本课题背景就是AOTF光谱成像仪的图像传输问题。1.2本论文组织结构本论文组织结构如下:第一章概述了通信网技术和嵌入式网络的发展趋势,介绍了图像传输用到的各种通信技术并分析了其优缺点,最终选择了WIFI作为本课题图像传输的技术。第二章是WIFI和嵌入式系统介绍,大体介绍了无线局域网和IEEE802.11协议网络的知识,然后重点介绍了802.119里用到的物理层调制技术OFDM信道估计算法。第三章开始介绍具体的硬件设计。包括芯片的选择,原理图和PCB的设计,最终完成 第一章绪论本设计的硬件系统。第四章是本文的重点,详细介绍了嵌入式TCP/IP协议栈LWIP的移植,描述了LWIP的一些细节及其网络接口部分和驱动的移植。最后实现了传输图像的应用程序。第五章是实验数据,并对全文做了总结,展望了未来的发展方向。 4 第二章WIFI和嵌入式系统概述‘。。。’‘。。。。。。。。。。‘‘‘。-··‘。。。。。。。。。。-_·___·。。。。。。‘-。_-。_’___-_____I_--·____________________··--·__________··______·_一I。___--。’。。__I__________________·-_____________.._---。-_._________.______。-_。·--。__。________________________·一2.1WIFI技术简介WIFI是WirelessFidelity(无线保真)的英文缩写,是一种可以将PC、手机或平板电脑等终端在数十米范围内以无线的方式相互连接起来的技术。它遵循IEEE802.11系列协议,是最主流的的无线局域网技术。我们分别讲解!WEAN技术和802.11系列协议的特点、工作原理、组网方式及其与其他无线技术的比较。2.1.1无线局域网简介无线局域网是指局部区域的无线介质通信网络,其物理距离一般从几十米到几公里,传输速率可达2Mb/s以上。由于无线局域网利用自由空间而不是受限制的电缆进行数据的传输,一般可作为有线网络接入部分。它具有以下优点:1、移动性,通信不再受环境条件的限制,为用户提供无处不在的网络接入。2、灵活性,安装容易,组网灵活,可方便增减、移动和修改终端,既可以接入骨于网也可以自组网。3、经济性,节省了电缆的费用和布线工序,可快速组网。4、使用区域限制小,对予物理布线困难或不能布线的地方也能进行无线网的覆盖。⋯WLAN一般由站(STA)、无线介质(WM)、接入点(AP)和分布式系统(DS)等部分构成。各组成部分的功能和特点分别如下:(1)站STA(station)是连接在无线局域网中的各终端的总称,是具有无线接口的设备。它又包括几部分:终端用户设备、无线网络接口和网络软件。WLAN中的站之间既可以直接通信又能通过接入点通信。(2)无线介质WM(wirelessmedium)是无线局域网中各终端及接入点之间传递信息的媒介。一般指自由空间里电磁波的传播。无线介质的具体细节可参见无线局域网的物理层细节。(3)接入点AP是无线局域网的重要组成部分,包括无线路由器等。它的功能有作为无线局域网和骨干网之间和桥接作用和管理和控制基本服务集内的各站点等,由相关的硬件和软件组成。 基于WIFI的无线图像传输系统的设计(4)分布式系统DS(distributionsystem):一个基本服务集由于受到无线信号覆盖范围和其他条件的限制而覆盖的区域有限。为了让更大区域的工作站都能接入无线局域网,就有必要把很多个基本服务集连起来构成一个大的扩展服务区。分布式系统就是来完成这个工作的,它可以是有线的,也可以是无线的。无线局域网的组网结构有以下两种:自组织网络(adhoc):它是一种独立的网络。在自组织网络里没有像基站那样的中心节点,每个节点的地位平等,因而任何一个节点的故障不会影响整个网络的运行,抗毁性强。任何站点之间都可直接通信,因此每个节点既有终端的作用又有路由的作用。自组织网络不能接入分布式系统和有线网络。它的特点是结构简单,组网迅速。常用于军事或临时组网。其结构如图2-1所示:Cj图2—1adhoc网络的结构基础结构(infrastmcture)l网络:它由分布式系统、无线接入点和站等组成。在这种结构的网络里,各终端通过无线接入点接入有线网。每个站的通信是在AP的控制下完成的。该结构使终端可连入更大范围的网络,是一种有效地接入骨干网的方式。与自组织网络相比,基础结构网络的抗毁性较差,一旦中心节点(AP)遭到破坏,整个网络就会陷入瘫痪,且对AP的功能要求较高。其结构如图2.2: ESS图2-2infrastructure网络结构无线局域网的协议体系工作在OSI七层模型的最下两层,即数据链路层和物理层,如图2.3所示:DataLink’一一一一L—a—ye一一r一一一PhysicaLayer图2-3无线局域网所在的层次常用的无线局域网协议有IEEE802.11体系、Zigbee和蓝牙。其中Zigbee主要用于无线传感网的组网和低速数据传输,而蓝牙的传输距离只有几米。IEEE802.11体系是目前最成功且应用最为广泛的,WIFI就是802.11协议的一种商业认证。本文主要介绍和实现的是IEEE802.11协议。2.1.2IEEE802.11系列协议IEEE802.11系列协议是电子与电气工程师协会制定的无线局域网标准,定义了无线局域网的媒体访问控制层和物理层。从1997年的第一个版本的IEEE802.11协议发布至今已经发展出了多个版本,形成了一系列的协议c体]|。其中比较出名的有IEEE802.1la,IEEE802.1lb,IEEE802.1lg以及比较新的IEEE802.1ln等,除此之外还有其他一系列的补充7 基于WlFI的无线图像传输系统的设计协议。目前市场占有率最高的是2003年发布的IEEE802.1lg协议。其比较如下表所示:协议版本特性802.1la传输距离50m.最大速率54Mbps802.11b传输距离100m,最大速率11Mbps802.1lg传输距离100m.最大速率54Mbps802.1In传输距离150m,最大速率600Mbps802.11c用于改进设备间的互操作802.11d扩充802.11在其他国家的应用802.11e引入服务质量(QualityOfServiceQOS)802.1lf实现不同厂商间的设备的互操作802.1lh增强5GHz的MAC层的规范802.11i引入鉴别和保密机制802.11s实现无线网状网机制表2-1802.11系列协议:MAC层的结构和功能如图2_4所示:望星}⋯⋯⋯.⋯⋯⋯⋯.⋯⋯⋯⋯⋯⋯⋯.!19睑蝮⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯一⋯.⋯⋯⋯i图2-4MAC层功能图802.11协议的MAC层技术主要基于载波监听多路接入/冲突避免(CSMA)【351。CSMA协议在以太网里已经得到了广泛的应用,其基本原理[19]女Ⅱ下:每个站点在发送信号之前先 第二蕈WIFI和嵌入式系统概述。。‘’。1。。。。。‘‘——。1。。。。‘‘‘___-____-。‘—’_·______-_——___________-—__________-_.__-___________—____‘______.-—__-__-________-__—___._-—————.___I———.———————————_——————————————————一一一对无线信道进行监听,如果监听到载波或有其他节点正在发送信号,该站点就推迟一个随机的时间后再监听,直到信道空闲后再发送。但是与线的以太网不同的是,由于每个站点的无线信号的覆盖范围是有限的,一个站点监听到其附近的介质是空闲的并不意味着接收站点附近也是空闲的。无线局域网必须解决所谓的“隐藏节点”和“暴露节点”的问题。因此802.11协议引入了冲突避免(CA)机制和主动确认方案。具体地说:发送端在发送前先监听信道,等信道保持了一段预定的空闲时间(称为DIFS)后再发送。接收端受到发给它的数据后先返回一个确认帧(ACK),发送端收到确认帧之后才确定数据发送成功,否则就要重发该数据帧,直到收到确认帧或到一个指定的发送次数后仍没发送成功就将此数据包丢弃。每个802.11的帧都由帧头、帧体和帧校验序列等部分组成,如图2.5所示:FrameDurationAddress2Address3ControlID1SequenceAddressQosFrameFCSControl4ControlBody帧控制域包括:协议版本,帧类型,重发,!电源管理,保护帧和顺序等字段,详细的描述可参见IEEE802。1l协议文档。持续时间/ID字段根据具体帧的类型不同而不同,在轮询模式下是站点的D,其他可用作网络配置向量(NetworkAllocationVector)的计算。地址域根据帧控制域的不同可能有多达4个地址。可用来指示源地址、目的地址、发送站地址和接收站地址等。序列控制字段用来指示当有多个数据段属于同一个帧时每个数据段的顺序编号。帧体就是帧的数据部分,它的长度根据不同的数据可以变化。帧校验序列在IEEE802.1I协议里定义为32位的循环冗余校验,对整个帧头和帧体都进行性计算。802.1l协议的物理层工作在不需要许可证的2,4GHz和5Ghz频段。采用的调制技术根据具体版本和速率的不同有直接序列扩频,跳频扩频以及正交频分复用。例如802.11a采用 基于WIFI的无线图像传输系统的设计OFDM调制和5GHz的频段,最高传输速率可达54Mb/s;802.1lb采用DSSS和补码键控(ComplementaryCodeKeyingCCK)工作在2.4GHz频段,最高速率能达到llMb/s;802.11工作在2.4GHz频段,根据不同的速率采用不同的调制方式,并支持802.1lb和802.1la的所有速率。2.2正交频分复用(OFDM)技术及其信道估计IEEE802.119及以后的1ln等都采用了正交频分复用(OFDM)技术作为自己的物理层调制技术,有必要对其进行专门的研究。正交频分复用(OFDM)技术因其频谱效率高和抗多径衰落能力强而在下一代移动通信和无线局域网技术中受到广泛的重视,已被接纳成为LTE,IEEE802.11,WiMAX等多个标准的物理层的核心技术。为了获得更好的性能,OFDM系统一般采用相干接收,这就需要精准的信道状态信息,信道估计的精度将直接影响整个系统的性能【271。我们讨论OFDM系统基于导频辅助的信道估计算法。导频辅助的信道估计器的设计主要有三个问题:一是导频信息的选择,依据不同的信道环境有块状导频插入,梳妆导频插入和散状导频插入等方式;二是导频处信道估计准则的确定【281。最小平方(LS)准则算法实现简单,不需要知道先验信道统计信息,但其估计结果受噪声影响较大,估计精度较差。最小均方误差(MMSE)准则算法利用了信道的统计相关性,能得到非常理想的估计结果,但计算复杂度太高,难以实时实现。我们基于DFT的信道估计算法进行了深入的研究,并提出了一种改进的基于DFT和信道估计算法,并且在MATLAB平台上进行了仿真,将其结果与其他几种经典算法进行了比较,结果表明该算法能在计算复杂度和估计性能之间取得更好的折中。一个未经信道编码的有N个子载波的OFDM系统的基带框图[29]如图2-6所示:10 图245OFDM系统示意图OFDM的基本原理就是把高速的数据符号流通过串并转换,分配到传输速率相对较低的若干个互相正交的子载波上传输。串并变换精的并行低速数据流经过插入导频后再由IFFT调制到各子载波上,加入循环前缀的目的是为了消除符号间干扰(ISI)和子载波间干扰(ICI),然后经过一系列处理后发送到信道。接收端经过一系列相反的过程将信号还原出来川。设系统子载波数为N,多径衰落信道的时域冲激响应为L-I办(,2)=∑晓,6(n-r,),2-o⋯1一N-1I=0式中,L为信道多径数,a,为第l径的信道衰落(假设信道为慢衰落瑞利信道,在一个OFDM符号内可认为保持不变),丁l为第l径的时延,信道的冲激响应不超过循环前缀的长度。信道的频率响应为踯):艺叩√玛Nq七=o,1,⋯Ⅳ一1第k个载波上的频域衰落幅度为H(k),这样可以将系统描述为一组平坦的并行高斯信道如图2.7所示: 基于WIFI的无线图像传输系统的设计图2-7OFDM信道利用矩阵的表示形式,OFDM系统可表示为Y=XH+W其中,Y是接收信号,为一N*I的向量,x为一N*N的对角阵,其对角线上的元素为发送的信号,H为信道频域响应向量,W为一独立同分布的高斯噪声向量,其均值为0,方差仃‘。基于DFT的算法以其易于实现且性能良好而备受关注。由于OFDM符号的长度一般比信道冲激响应长很多【301,用IDFT将LS算法得到的信道频域响应向量H变换到时域获得信道冲激响应向量^b(n)=IDFTⅣ{HLs(尼))=h(n)+敢门)其中,觋表示N点的逆离散傅里叶变换,谛(聆)表示高斯白噪声向量。由于吮(,z)的大部分能量将集中在少数几个点上,利用这种特性可以在时域进行降噪处五删叮c,z,={五L。S(,z)。n砌∈Ps瑙ign班c口彤c^口,2,2P,s口明p厶盼然后再将矗D刀∽J变换到频域得到信道频域响应日D玎(k)=DF巧{办D刀(,z))0≤k≤N一1我们给出了一种基于阈值的重要信道系数选择方法。由于并不是所有的循环前缀以内的系数都是重要系数。事实上,在信道很稀疏时,它们中的多数并不对应信道的任何一径,而是只含噪声的。所以通过一定的方法确定关键系数,将其他的噪声样点置零可以提高信道估计的精度。根据我们的新的基于阈值的重要信道样点选择方法,只保留模大于预先设定的阈值的信道系数:12 第二章WIFI和嵌入式系统概述租班伊。必姗煳砌掰图2—8基十DFT算法流栏图第一步,进行Ls信道估计得到信道H£s2X~Y=H+W及时域冲激响应左b(胛)=IDFTN{I?I。s(Ji}))=^(疗)+影(甩)第二步在含噪声的‰(疗)中通过阈值法选择信道系数是本算法的关键。首先,由于前缀的长度£叩大于信道冲激响应的长度而认为长度大于上叩的‰(,2)应全部为噪声,不含任何信道信息,因此把n>三叩的估计值全部置零,其他值不变,可得到初步去噪后的信道估计为石,(,z):』五b(,z)o≤咒≤上甲一10others由于循环前缀以内的信道估计系数仍然有只包含噪声而不含有信道信息的系数,所以有必要设法进一步抑制循环前缀以内的噪声。利用LS估计得到的时域冲激响应%(,z)我们可以求出其总能量‰m=艺胁)12此总能量由信道响应能量和噪声能量之和组成即E饼nlls=Echm∞l|s+E∞ise|s 基于WIFI的无线图像传输系统的设计式中,如一舶为LS估计中信道的能量,巨。。b为LS估计中噪声的能量。令生:rEnobels我们用系统信噪比SNR的先验知识来估计LS信道冲激响应中Ech⋯ells与Eoisels之比,争=SNR由以上两式可得hls中信道响应的能量估计为斧一Etotalls×SNRL一5一—再。丽为了找出能量最大的前M个信道信道系数,我们对初步去噪后的估计忽(n)按模值从大至0,J、{{}序得至0办so露r(,1)我们依次计算ht中最大的前M个点的能量之和M—lEs。。似)=∑k(刀)12M=1⋯2一上印n=OEs.m(M)的值第一次大于毛一,ells时,我们认为这最大的M个点都是信道系数,也就是其他的点都为噪声,选取阈值为此时的最小信道系数thrershold=hs。(M)0用这个门限对循环前缀以内的的信道系数进行阈值处理得到矗p(刀)然后对上式作FFT变换得到日p(七)2觋讧P(,z)j仿真分析得出我们的方法的性价比是最高的,在信道估计性能和复杂度之间取得了很好的折中,具有很好的的实用价值。23嵌入式系统开发23.1嵌入式系统简介嵌入式系统是计算机技术和电子技术发展的产物。随着社会经济的发展,嵌入式系14 第二章WIFI和嵌入式系统概述统在消费电子、工业控制、通信、信号处理等领域起着越来越重要的作用。不像功能全而大的通用计算机系统,嵌入式系统是面向具体应用且软硬件可根据具体需求而裁剪的,因而其对成本,功耗,体积,可靠性一般有着严格的要求【2]。嵌入式系统由硬件和软件两部分构成。目前主流的嵌入式处理器ARM系列都是32位的处理器,一般还要配置有外围的电路如时钟、复位、存储器、中断控制和各种接口电路等。嵌入式软件系统包括应用程序,设备驱动,也可包括linux或uC/OS等嵌入式操作系统,需要实现网络功能的嵌入式应用还要包括通信协议栈。嵌入式的的开发流程一般采用自顶向下的方法.。由于嵌入式系统的资源有限,一般都是在PC上完成程序的开发和调试后再下载到嵌入式系统运行的,这个过程成为交叉编译。2.3.2ARMcortexm3及其开发ARMcortex家族是ARM公司最新的一代ARMv7架构的处理器。ARMy7架构包括三个款式:面向高性能应用的A款,其功能强大而全面,能运行较大型的嵌入式操作系统(例如IOS和安卓),iphone及其他智能手机和平板电脑就是A款的;用于高端实时嵌入式系统的R款,主要强调其快速和实时能力,而且可靠性极高,用于工业控制等领域;用于低成本低功耗,类似单片机的M款[9】。ARM架构的发展图如图2-9所示:ArchitectureArcr,lteclu”v4舳4Tv5ME。v6匹霭f—ARM71D甜lEm删esi怒Stror}gAR村}。.,曩翁,,霸l莎一誊≯。’qARMll36ARM9261{1s167T6..2946.蝴IrileIxScale;mm一_”≈曩v7-A(Appibalon:;v7-R(Real.Time琵嚣薹羹》峨c咖。R4):、1。⋯vT⋯-M,断e,g.,Codex一蛾3,图2-9ARM体系的演进图CortexM3是这一代架构中针对单片机应用而开发的低成本、低功耗的实时系统而设计的。Cortexm3支持最新的Thumb-2指令集,Thumb.2指令集综合了32位和16位指令集的优点,提供高性能的同时也拥有高的代码密度。 基于WIFI的无线图像传输系统的设计Cortexm3拥有存储管理单元,支持小型的uC/OS嵌入式实时操作系统,拥有强大的中断速度和中断处理能力。与在市场上取得广泛成功的ARM7和ARM9相比Cortexm3采用的是哈佛架构,有两套独立的地址和数据总线,提高整体的运行速度[101。Cortex系列的另外一个特点是允许未对齐的数据访问,这个新特性使得内存能更高效的被利用。而且Cortexm3系列处理器支持位绑定操作,即对存储器里的位直接进行访问和写入。这使得省掉了一个完整的布尔处理器来访问寄存器和标识。Cortexm3结构简图如图2.10所示:图2—10Cortexm3结构Cortexm3的CPU里包含了16个32位的寄存器。其中R0到R12为通用寄存器,R13到R15是特殊功能寄存器。特殊功能寄存器的功能分别为R13为堆栈指针;R14为链接寄存器,用来保存调用函数后的返回地址;R15为程序计数器。除了以上几个特殊功能寄存器外,Cortexm3还有一个特殊寄存器程序状态寄存器,存储CPU的状态信息。Cortexm3处理器的而另一个特点是其存储器映射结构是固定的,这点与以前的ARM体系由半导体生产商决定是不同的。它的一共4G的存储空间映射结构如图2.11所示: 第二章W]FI和嵌入式系统概述服务于cM3的私房,}设,包括NⅥa手{事器。MPU寄存嚣以及片E调试缎件主要用于扩展片外的9F殴(像80511iB8255似的)用于片上外设用于片上静态RAM代码区.也可用于存德启动后缺省的中断向盖表图2-11存储空间映射由图可见,存储空间的前1GB空间是分配给代码区和SRAM的,接下来的O.5GB空间是片上外设占用的。特别值得指出的是,在SRAM和外设空间的初始的1MB是前面提到的位绑定区,可以按位或字长操作。在往上就是2GB的外部存储器和外设空间。最高的O.5GB是CPU内部外设和调试组件[9]oCortexm3处理器以其独特的优点在单片机领域、汽车电子、数据通信、工业控制及消费电子等领域都得到的广泛的应用,目前市场上Cortexm3内核的处理器的价格比较低,便宜的才不到l美元,具有很强的市场竞争办。很多FPGA厂商也相应的在自己的FPGA里面嵌入Cortexm系列的内核。比如Actel公司的M1A3P6001里面嵌入了Cortexml软核,用FPGA资源来实现处理器的功能。Actel公司最新的smartfusion系列FPGA里面直接实现了Cortexm3的硬核,将ARM和FPGA集成到一块芯片里,以实现更加强大的功能。17一黑敝淑溉甑妇三熏一0O0Oa旺0 18 第三章WIFI无线图像传输系统的硬件设计第三章wIFI无线图像传输系统的硬件设计自从IEEE802.11第一个版本发布以来,芯片制造商们就开始推出自己的无线芯片。随着WIFI技术的成熟和应用越来越广泛,W砸I芯片的市场也越来越成熟,经过几轮竞争,市场上还剩下几家最主流的大公司,如德州仪器,Marvell,broadcom等。这些公司均提出了自己的WIFI解决方案。经过综合成本、性能等比较,我们选用了Marvell公司的88W8686单芯片解决方案。在这一章里,我们将给出整个系统的硬件设计细节,首先给出整个系统的框图,然后介绍使用的芯片,给出系统的原理图和PCB图,最后简要介绍下射频部分的电路设计。3.1WIFI无线图像传输系统的整体设计本系统是设计用在偏振光谱成像仪上的图像传输接口,综合考虑成本,可靠性和功能扩展性等因素后,我们选用了actel公司的带ARMCortexm3硬核的FPGAA2F500M3。无线芯片选用的是Marvell公司的88W8686。主控制芯片A2F500M3的ARM子系统自己带有512K的Flash和64K的SRAM,对于小型的嵌入式实时操作系统uC/OS和轻量级TCP/IP协议栈LWIP来说已经足够,而且我们选用的PQ208封装的A2F500M3芯片不带外部存储器控制器,因此不用外扩存储器,单芯片也增加了系统的可靠性和降低了硬件的成本[36|。WIFI芯片88W8686提供了复用的SPI接口和SDIO接口和主芯片通信,通过外接电路选择SPI接口。天线选用MAG.LAYERS公司的2.4GHz贴片天线LTA-6025.2G4S3.B1,该天线的数据手册给出了推荐的PCB布局。电源芯片根据系统各芯片的电压和电流要求,选用了一款德州仪器的TPS650243,该芯片是专为智能手机和PDA设计的,可提供5个不同的可调电压。 基于WIFI的无线图像传输系统的设计3.2主要使用的芯片介绍A2F500M3是Actel公司新推出的Smartfusion系列FPGA中的一款。该芯片最大的特点是带有ARMCortexm3硬核和一个可编程模拟计算引擎。该芯片的微控制器子系统模块提供了丰富的资源和高性能的表现。包括100MHz的硬32位Cortexm3核,512K的Flash,64K的SRAM,存储器保护单元,能提供高达16Gbps的片上带宽的AHB总线,以太网MAC控制器,两个12C接口,两个SPI接口,8通道DMA控制器,锁相环和片上振荡器等,PQ208封装的芯片不提供外部存储器控制器。ARMCortexm3是ARM公司的最新一代ARM体系架构删v.7M架构的微控制器,它的设计初衷是面向低的总门数,低功耗,低成本的应用,其竞争对手是16位的单片机,而不是像ARMll和CortexA系列那样面向高端的应用。Cortexm3处理器的特点之一是提供一个嵌套向量中断控制器(NVIC),使其具备了强大的异常处理能力。与ARM7不同的是Cortexm3采用的哈佛架构,拥有独立的数据和地址总线,可实现并行操作,提高运行速度。与Actel的其他FPGA一样,A2F500M3也提供了高性能的基于Flash技术的FPGA,包括500000门和11520的tiles单元以及24个4608位的RAM块,可实现其他的设计。微控制器子系统和FPGA拥有各自独立的丰富的IO资源,FPGA逻辑和微控制器子系统之间也可通过片内总线通信。整个芯片的框图【3q如图3.1所示: 第三章WIFI无线图像传输系统的硬件设计图3—1A2F500M3结构无线模块使用Marvell公司的88W8686芯片,该芯片兼容IEEE802.1la/g/b协议,并在单芯片内高度集成了媒体访问控制模块、基带模块和射频模块的片上系统。根据信号的状况可自适应地改变数据速率,支持6、9、12、18、24、36、48和54Mbps的数据速率。该芯片物理层提802.1lb直接序列扩频和802.1]a/g正交频分复用基带调制、CPU系统,主机接口和直接WLAN射频转换,能工作在2.4GHz和5GHZ频段。同是88W8686也支持802.1li安全标准,实现了AES/CCMP和带有TKIP的WEP安全机制。对于视频、语音和多媒体应用,该芯片支持802.1le的QOS服务质量体系‘381。而且该芯片也支持蓝牙共存接口实现蓝牙功能。整体框图如图3-2所示:图3-288W8686框图88W8686包含一个32位的嵌入式高性能的MarvellFeroceonARMv5TE处理器。该处理器拥有紧密耦合的指令和数据存储器和32位的总线。CPU一共有两种中断模式:快速中断请求(FIQ)和中断请求(IRQ),FIQ用来处理快速,低延迟的中断,IRQ用来处标准的中断。CPU结构如图3.3: 基于WIFI的无线图像传输系统的设计图3-3无线芯片的CPU模块88W8686的媒体访问控制层利用嵌入式的CPU实现了IEEE802.11定义的所有功能,包括:MAC级别帧交换,接收数据过滤和校验(循环冗余校验),自动生成MAC头和尾部信息组成MAC协议数据单元(MPDU),通过分布协调模式(DCF)和点协调模式(PCF)实现对共享媒体的公平接入,以及电源管理,自适应调整数据速率和动态频率选择等。88W8686的MAC模块框图如图3—4所示:"I'Xl洲D姑二P琳娥PiNR硒P?N斟上日j■L^廿¨氧嗍oo∞略眙撇I疆e|哪图3-488W8686的MAC模块该芯片的基带处理单元支持正交频分复用多载波调制和直接序列扩频。为了保证在严重的多径效应和串扰的情况下的通信,基带处理单元采用了先进的数字信号处理技术。在接收端,88W8686实现了软维特比解码,由粗到精的频率偏移调整和信道自适应技术。同时,基带处理单元还包括对于各种调制模式的编码解码模数/数模转换器。 第三章WIFI无线图像传输系统的硬件设计基带处理单元的框图如图3.5所示:图3-58686的基带处理单元88W8686的射频转换模块集成了发射和接收功能所需的全部模块,包括LNA,上下变频器,可调增益放大器,滤波器等。其中LNA和可调增益放大器是由基带功能控制的,信道频率是通过内部串行总线控制的,并且是软件可编程的。其框图如图3-6所示:图3-68686的射频模块88W8686的主机接口单元能把几种不同的主机接口总线连接到芯片的内部总线上,且每个主机接口单元和内部总线的连接时复用的,一次只允许一个主机接口工作。我们使用的是G.SPI接口和嵌入式系统通信。由于有半导体厂商将88W8686芯片组做成了一个SIP模块(systeminpackage),把 基于WlFI的无线图像传输系统的设计无线芯片,时钟,电源以及存储模块集成到一个封装里,不用去考虑无线芯片的具体细节,大大方便了我们的设计,我们直接使用这样的模块。本设计实际上采用的是台湾环隆电气公司生产的模块WM.G.MR.09,其模块框图例如图3.7所示:图3-7WM.G-MR-09示意图直接将WM-G.MR-09与主控芯片通过G.SPI接口相连接,使硬件的设计大为简化,我们可以将主要的精力放在软件的设计中。根据FPGA芯片和WM.G.MR-09模块所需的电压和功耗来选择电源芯片。FPGA芯片的内核电压是1.5V,I/O电压3.3V,无线模块需要1.8V和1.2V的电压供电。为了用尽可能少的电源芯片,我们选用了德州仪器专为智能手机和PDA推出的一款电源芯片TPS650243。该电源芯片是为需要多种电压的场合设计的,它提供三个高效率的电压转换器,可以为基于处理器的系统分别提供内核电压,外设电压和输入输出接口电压。在低负载时这三个转换器都会进入低功耗模式以节省能量,增加电池的使用时间,可提供3.3V,2.8V,2.5V,1.8V,1.2V,1V,0.9V或者其他可调电压。在TPS650243里面还集成有两个通用200mA的LDO电压管理器,并能通过外部输入引脚使能。每个LDO的输入电压范围在1.5V到6.5V之间,可以通过前面三个转换器或直接从电池供电。LDO的输出电压可以通过外部的电阻分压器来设定,具有很大的灵活性。TPS650243采用的是很小的5mmX5mm的32脚QFN封装。此外,由于FPGA芯片内核的电流比较大,对于1.5V的内核供电,我们专门采用一款德州仪器的芯片TPS7A47,该芯片是一款超低噪声的线性稳压器,输入电压范围+3V至+36V,输出电压范围+1.4V至U+20.5V可调,输出电流1A,采用高散热性能封装。 第三章WIFI无线图像传输系统的硬件设计3.3具体硬件电路设计根据所选芯片的数据手册给出的信息结合我们的需要设计电路原理图。由于无线通信需要涉及到射频电路,因此必须考虑射频和天线部分的阻抗匹配。对于模拟和数字部分的电源平面和地平面也需要考虑[3]。3.3.1无线模块外围电路的设计WM—G—MR一09的管脚定义可在环隆电气给出的数据手册中找到。其中G—SPI接口和SDIO接口是共用的,通过IFSELl和IFSEL2脚选择接口模式,这里我们使用G—SPI接口,因此将这两个引脚用100K欧电阻下拉。29脚和33脚是与蓝牙功能相关的引脚,我们这里不用蓝牙功能,不接。6和7脚是选择从哪启动的,将SCLK悬空,ECSn接100K电阻时选择从SPIEEPROM启动,将SCLK和ECSn都不接负载时选择从主机接口总线启动,在这里我们选择从主机接口总线启动,因此SCLK和ECSn都不接负载。10脚和11脚,也即GPIO[5]和GPIO[6]悬空,选择内部的38.4MHz时钟。不用考虑电池使用时间,因此外部32.768KHz的休眠时钟也不需要接。天线接口需要50欧姆的阻抗匹配。系统原理图如图3.8所示:谴p—一L_‘I__-“,图3-8无线模块原理图 基于WlFI的无线图像传输系统的设计3.3.2系统电源电路的设计本设计用到的电源电压有:FPGA芯片内核电压1.5V,FPGAI/O电压3.3V,WM.G.MR-09需要1.8V和1.2V电压。我们使用TPS650243的L1、L2和L3分别输出3.3V,1.8V和1.2V电压,输入都是5V,通过配置使能端和反馈端的电路时输出达到这三个电压[371。输出端分别接3.3uH的电感和22uF的电容滤波。这三个转换器分别输出的电流时1000mA,1000mA和800mA,均满足要求。该芯片的两个LDO不使用。如图3-9所示:图3-9电源芯片1FPGA内核电压1.5V用一块TPS7A47供电,该电源芯片输出电流1A,输出电压也是可配置的,通过对4到10脚的接地还是悬空可以配置为参考电压1.4V加上相应的值,我们需要1.5V的电压,因此将0P1V脚接地,其他全部悬空。按照参考设计NR脚通过luF电容接地。输入电压为5V,并通过10uF电容滤波,将N和EN脚都接到5V上。输出通过47uF的电容去耦,并将输出反馈到SENSE脚上。如图3—10所示:图3.10电源芯片226 第三章WIFI无线图像传输系统的硬件设计3.3.3无线芯片与FPGA接口电路的设计WM.G.MR.09可以由G—SPI和SDIO接口和CPU通信,但是由于A2F500m3的ARM子系统有两个SPI接VI,没有SDIO接口,所以我们选用SPI接VI模式,并使用SPl0。SPI接口有五根信号线定义,分别是SPI片选信号SPICS、SPI时钟信号SPICLK、SPI数据输入SPIDI、SPI数据输出SPIDO和SPI中断信号SPIINT。将FPGA的SPI引脚和无线模块的对应引脚连接起来。并在WM.G.MR.09的外围电路配置选择使用SPI接口。3.3.4天线接口与阻抗匹配设计我们知道当电路中频率很高时将出现很多不同于低频时的现象,必须进行专门考虑,其中最重要的工作就是阻抗匹配了。在高频电路中为了实现最大功率传输,减小反射,会在负载和源网络之间插入一个无源的阻抗变换网络以实现阻抗变换,使负载和源的阻抗达到匹配,可以使用分立元件构成的网络和传输线。在射频电路中,当信号的波长与元器件的大小差不多时,电路中传输的电压和电流应该作为传输的波来处理[51,而不是像低频电路那样分析,传输线理论就是在高频场合下的应用,具体的理论分析需要设计到复杂的电磁学理论,我们不做分析。在工程上,包括安捷伦在内的大公司都推出了自己的仿真软件,可以通过输入参数方便的计算传输线参数。微带线是传输线的一种,由于我们的电路是以印刷电路板作为载体的。微带线是在PCB板表面的一块铜箔。根据WM—G—MR.09和天线的要求,我们需要实现在2.4GHz频率下50欧姆的阻抗匹配。根据印刷电路板的实际情况,我们使PCB的第一层介质厚度为lmm,介电常数为4.7。使用软件模拟仿真,我们计算出微带线的参数如图3.11所示: 基于WIFI的无线图像传输系统的设计图3—11微带线计算模拟软件为了更好的实现阻抗匹配,我们在天线和无线芯片之间预留了一个Ⅱ型匹配网络【13】如图3.12所示:|l-GND⋯GI',ID图3.12Ⅱ型匹配网络具体地电感和电容参数需要根据对实际电路用网络分析仪测试后来确定。3.3.5其他电路的设计A2F500需要三个不同的时钟电路:供给FPGA逻辑的50MHz,我们使用一款有源振荡器来实现;ARM子系统需要两个不同的时钟电路,20MHz的CPU主时钟和32.768KHz的RTC时钟,用两个晶振来实现,并在晶振的两端接上两个电容。由于A2F500m3内部有微控制器子系统和FPGA逻辑两部分组成,所以其JTAG部分有一个JTAG选择信号JTAGSEL,该引脚接高电平时JTAG电路选择ARM子系统,接低28 第三章WIFI无线图像传输系统的硬件设计电平时选择FPGA逻辑,我们用一个三个头的HEADER来实现,用跳线帽选择高低电平,具体如图3.13所示:3.4PCB设计图3.13JTAG选择电路原理图的设计完成只是保证电路电气连接的正确性,要使我们的系统能够稳定、正确的工作,更重要的是PCB的设计工作。随着电路的频率越来越高,PCB设计的每一个细节都对整个产品的性能至关重要。减小噪声水平和数字和模拟域的充分隔离对PCB的可靠和高质量是不可或缺的。本节我们重点讨论模拟和数字地的隔离,锁相环电源的去耦方案设计,天线及射频部分的注意事项,以及其他一些需要注意的地方。由于我们的设计里既有模拟部分也有数字部分,因此需要不同的模拟和数字的电源和地平面。为了避免噪声从一个平面传递到另一个平面,模拟地GNDA和数字地平面GND必须互相充分的隔离。如果数字信号的回流路径经过了PCB板上的模拟地面上方,GNDA就会很容易地受到数字信号引入的噪声的影响。所以在布局和布线时,应尽量把数字器件和数字线放在一整块,数字域下方对应着整块的数字地;把模拟器件和模拟线放在另外一块,模拟域的下方对应着模拟地。而且GND和GNDA互相使通过单点连接起来的。对于电源平面的分割一样要遵循不要跨区走线和布局的原则[36I。电源和地平面的分割对于减小噪声的影响起着关键作用,因此能增加系统性能的精度。地平面的连接如图3.14所示: 基于WIFI的无线图像传输系统的设计PCB:S的培PantC∽№c晒1图3-14地平面不意图PLL核必须在数据手册指定的PLL电源噪声水平范围内工作,才能满足输出指定的性能。当噪声水平超过容忍限度时,我们就必须采用去耦方案来抑制PLL电源的噪声。VCCPLx和VCOMPLx脚分别对应PLL模拟电源和模拟地。我们采用两块lOnF和lOOnF并联的瓷片电容,并且这两块电容必须被放在距离电源脚很近的地方,不要超过1英寸。同时,为了抑制低频噪声,使用一个lOuF的电解电容,这个电解电容由于其体积太大而被放在远的地方。Microsemi的数据手册里还推荐在电源和去耦电容之间接一个6.8uH的电感来过滤各种频率的噪声。天线部分使用的是2.4GHz的贴片天线u'A.6025.2GS3-B1,MAG.LAYERS官方推荐的PCB如图3.15:卜19叫下_|j一一’磐麓砸d,/,1-————一|{;{穆荔黪参。i,£ANT43。菇jii。誉≯一j薹Matching鬟誓50ohm艳ed、Ine慧雾Tuningtrace燃Landl鬟lGroundU嘣:mm 第三章WIFI无线图像传输系统的硬件设计图3-15天线layout示意图为了更好地接收信号,天线应放置在PCB板的角上,而且在天线附近不要其他放置高的器件,以免挡住信号。天线PCB局部图如图3。16所示:图3—16天线PCB图最后我们给出整个系统的PCB图如图3一17所示:3.5本章小结图3.17整个PCB图在这一章里,我们首先介绍了WIFI无线图像传输系统硬件的总体框架设计和选用的具体处理器芯片和无线模块芯片。对Actel的FPGAA2F500m3及其Cortexm3内核和无线芯片wM—G—MR.09做了详细的介绍。然后分别给出了具体的无线模块配置电路,电源电路,无线芯片与主芯片之间的接口电路,天线及其匹配电路等的原理图设计。最后,我们讨论了PCB板设计需要注意的一些事项。至此,我们的硬件设计己基本完成,经过制板,焊接和硬件调试后,剩下的工作就是软件的设计了,将在下一章详细介绍,包括驱动程序, 基于WIFI的无线图像传输系统的设计TCP/IP协议栈和操作系统的移植等工作。32 第四章WIFI无线图像传输系统的软件设计在上一章里我们完成了嵌入式无线图像传输系统的硬件设计,但是光有硬件系统还不能正常工作。对嵌入式系统开发来说,软件的设计是更大的任务,也在整个工程中占得时间和工作量最大。在这一章里我们将详细介绍WIFI无线图像传输系统的软件设计。首先介绍Micmsemi公司的软件集成开发环境LiberoSoC和soficonsole。然后介绍整个软件系统的架构,并详细介绍每一层的具体细节,从驱动程序到TCP/IP协议栈和操作系统的移植,最后介绍的传输图像的应用程序的开发。在硬件和软件都设计并调试成功后,下一章将给出实验结果,验证我们的系统的功能。4.1Microsemi公司的集成开发环境简介由于我们使用的是嵌入在FPGA里面的ARMCortexm3内核,为了便于FPGA的ARM软件和开发,我们没有使用一般ARMCortex的开发环境Keil或IAR,而是使用了Microsemi提供的集成开发环境LibemSoC10.1。该集成开发环境里带有ARM软件开发环境Softconsole。LiberoSoC是Microsemi推出的最新版FPGA和固件集成开发环境。它是一个综合而且强大的FPGA设计和开发环境,提供了从设计开始到结束的整个设计流程向导和支持,LiberoSoC结合了Actel公司(该公司后来被Microsemi公司收购)的开发工具和其他第三方EDA厂商的强大的工具比如SynplifyAE,ModelSimAE和ViewDrawAE等。这些厂商都为Libero开发的相应的定制版的工具,我们可以利用环境里集成的定制版工具,也可以单独使用通用版的。整个设计流程非常方便,设计输入、仿真、综合、编译、布局布线、时序验证,生产下载文件整条流水线依次完成。Microsemi还免费提供大量的P核和固件方便实现更多功能,也可以在该集成开发环境里配置微处理器子系统。LiberoSoC简化了从FPGA设计到嵌入式固件设计的转换,这两者可以在一个环境下完成。LiberoSoC里集成了特定的软件开发环境soffconsole,包括C/C++编译器,链接和调试 基于WIFI的无线图像传输系统的设计等工具。Libero为FPGA的硬件的固件开发提供了:处理器要求的固件硬件抽象层;在FPGA设计中使用的处理器外设的固件驱动;简单的应用工程来阐述API函数的应用。开发者可以在FirmwareView一栏中查看跟你的设计硬件相兼容的固件驱动版本。同时也能够改变固件的配置,阅读驱动文档和生成相应的工程等。LiberoSoC能整合之前用其他软件开发环境比如Keil,IAREmbeddedWorkbench等开发的固件。之前所使用的工程和工作空间能自动地在LiberoSoC里面生成相应的设置,开发者可以立即开始应用程序的开发。在完成FPGA设计后开始软件开发前必须选择相应的工具设置,如图4.1:图4-1选择开发软件工具然后之前的根设计会自动生成相应的固件驱动和softwareIDE工作空间。根据选择的软件工具链会创建两个两个工程。当在Libero的设计流程中选择wdteApplicationCode工具时,softwareIDE会自动打开包含这两个工程的工作空间。这两个工程分别是:硬件平台工程和应用工程。硬件平台工程包含对应于硬件设计的所有固件和硬件抽象层,这个工程是作为应用程序工程的一个库来配置的。应用程序工程产生应用程序并生成最后的二迸制文件,它和硬件平台工程链接在一起,在应用程序工程里,开发者可以引用任何硬件平台工程里的硬件外设头文件,我们在这个工程里写自己的main.c函数和其他应用代码,也可以添加用户的驱动和文件。把这两个工程分开组织的好处是使我们能更好的管理LiberoSoC自动生成的文件和自己编写的固件和应用代码。当我们打开软件开发工具链时,LiberoSoC就成为了一个单独的微处理器配置器,这样当在开发嵌入式应用代码的时候非常有用和方便。在此之前,所有的FPGA的开发工作必须在通用的LiberoSoC工具流程里完成,打开软件开发工具后,LiberoSoC就只能进行微 第四章WIFI无线图像传输系统的软件设计控制器的开发,而不能进行FPGA的开发了。Libero还提供了微控制器外设的配置工作,包括ACE、GPIO和外部存储器控制器以及微控制器外设和FPGA的接口。上面我们介绍了芯片和开发环境,接下来的工作就是具体的软件的实现了。4.2软件体系整体结构系统整体软件结构如图4—2所示:Ett,嘲-netDriver802.11Ex[ens如ns1/\岫蛐引眦柏舢慨‘/\。..9剿㈣W“鬈’。8、1;”。《瓣g⋯。“+’“一⋯“o麓i辩。,铺∞詈。。.∞#。o%∞37。,三瓣K$±c≈m‘x,m1;{1.|,。飞量莹Hatdware{nterfaoeDriver子宁弋7c鲫惭“D。懈‘“瞬僦8’<=7DataSer*∞el(T#RxBufferMamgefnen々802.”MACMae口cjementWLANDr艚,HAL图4-2无线图像传输系统软件结构图由图可见,本系统软件主要包括两部分:主机驱动和无线网卡固件。主机里实现了应用层,TCP/IP协议,网络接口层由主机和无线芯片共同实现,物理层在无线模块实现。4.3LWIP简介TCP/IP协议是所有设备连入Intemet必须遵从的通信协议‘71,它包括传输层和网络层的 基于WIFI的无线图像传输系统的设计一系列协议。其中使用最多和最出名的协议就是TCP传输控制协议和P网际协议了。它的前身可追述到上世纪七十年代,美国五角大楼高级研究规划署的ARPAnet项目。后来随着科学家和工程师们的不断改进直到1980年,TCP/IP协议终于成为标准,并开始在商业上取得巨大的成功。它包括传输层的TCP协议和UDP协议以及网际层的P协议,ICMP协议,IGMP协议和ARP协议等。Internet的技术标准是开放的,且被一种称之为RFC的文档保存14]。RFC文档由因特网任务组(IETF)管理,我们在h!堑;丛盟盟煎:星鱼垃娶Q型煎二i堕亟垡:塾!堕!里下载这个文档【341。而且TCP/IP协议的软件实现有加州大学伯克利分校计算机系发布的BSD版本,该版本功能强大且是开源的,得到的广泛的应用。对于嵌入式系统来说,著名的嵌入式Linux操作系统里提供了完整的TCP/口协议栈,但是对于低成本的应用比如Cortexm3来说,嵌入式Linux系统仍然过于庞大,对系统的CPU处理速度和各种资源的要求太高,只适用在ARM9及更高的处理器版本上。因此,对于嵌入式网络应用,有许多国际组织开发了很多占用资源少且开源免费的小型TCP/IP协议栈,比较出名的有以下几种:ulP。它是专为8位和16位单片机量身定做的小型TCP/IP协议栈,用C语言编写所有的代码,便于移植。其运行起来只需要几K的ROM加上几百B的RAM[32】。但是uIP的功能不够完善和强大,在一些要求高的场合不能满足通信的传输要求。uC/IP。它是针对其嵌入式操作系统uC/OS开发的一个TCP/IP协议栈,也是完全开源的。其代码主要是从加州大学伯克利分校的BSD版本上移植过来的。其缺点是管理混乱,文档支持不够,而且在uC/OS以外的操作系统上移植时难度比较大。LWIP。是本文介绍的主角,我们在本设计中就是采用LwIP的协议栈。它的全称是轻量级IP协议栈‘331,是由瑞典计算机科学院一位年轻的专家开发的。它可以在有操作系统的支持下工作也可运行没有操作系统环境下。是目前市场占有率最高的,其代码量和资源需求少,功能强大。在http://sics.se/~sdam/1wip一可以找到相关的信息。LWIP设计的主要考虑是在消耗资源尽可能少的同时尽可能多的实现TCP/IP的功能,其独特的内存管理机制和编码思路使得仅靠几十KB的RAM和ROM就足以支持其运行了。其代码也是用C语言编写的,所有代码也是开源的。我们将研究如何移植和配置LWIP协议栈,并在其上构建自己的应用。36 第四章WIFI无线图像传输系统的软件设计LWIP是TCP/IP协议栈的一个实现。LWIP协议栈设计的中心思想是减小内存占用和代码容量,使得LWIP很适合用在只有有限资源的小的终端上。为了减小CPU处理和内存要求,LWIP的设计者通过裁减使得其API不需要复制数据。下面我们具体讲解LWIP协议栈的移植细节,内部机制和代码实现。先介绍其动态内存管理和网络接口结构和应用程序需要的API。4.4LWIP的移植LWIP的设计者为像我们提供了详细的移植说明文档,开发者只要做很少的工作就可以使其运行起来。考察整个移植工作,移植者需要做的工作主要有:首先是定义LWIP协议内部使用的数据类型。由于所移植平台处理器的不同和使用的编译器的不同,这些数据类型必须重新定义。因为一个int型数据在64位处理器上其长度为8个字节,在32位处理器上为4个字节,而在16位处理器上就只有两个字节。因此这部分需要使用者根据处理器位数和和使用的编译器的特点来编写。我们的ARMCortexm3处理器是32位的处理器。其次是实现与信号量和邮箱操作相关的函数,比如建立、删除、等待、释放等。如果使用无操作系统的LWIP,使用者就必须自己去建立一套信号量和邮箱相关的机制。而在有操作系统的支持LWIP的嵌入式系统中,信号量和邮箱往往是操作性最基本的进程通信机制。UC/OSII是最简单的嵌入式操作系统了之一,它也能够提供信号量和邮箱机制,只要我们将UC/OSII中的相关函数做相应的封装,就可满足LWIP的需求[61。LWIP使用邮箱和信号量来实现上层应用与协议栈间、下层硬件驱动与协议栈间的信息交互【’¨。LWIP协议模拟了TCP/IP协议的分层思想,但从实现上看,LWIP只在一个进程内实现了各个层次的所有工作。具体如下:LWIP完成相关初始化后,会阻塞在一个邮箱上,等待接收数据进行处理。这个邮箱内的数据可能来自底层硬件驱动接收到的数据包,也可能来自应用程序。当在该邮箱内取得数据后,LWIP会对数据进行解析,然后再依次调用协议栈内部上层相关处理函数处理数据。处理结束后,LWIP继续阻塞在邮箱上等待下一批数据。当然LWIP还有一大串的内存管理机制用以避免在各层间交互数据时大量的时间和内存开销。信号量也 基于WIFI的无线图像传输系统的设计可以用在应用程序与协议栈的互相通信中。当应用程序要发送数据,它先把数据发到LWIP阻塞的邮箱上,然后它挂起在一个信号量上;LWIP从邮箱上取得数据处理后,释放一个信号量,告诉应用程序,已经准备就绪;此后,应用程序得到信号量继续运行,而LWIP继续阻塞在邮箱上等待下一批处理数据。其次,就是与等待超时相关的函数。LWIP协议栈会阻塞在邮箱上等待接收数据的到来。在初始化LWIP进程的时候,都会同时的初始化一些超时事件,即当某些事件等待超时后,它们会自动调用一些超时处理函数做相关处理,以满足TCP/IP协议栈的需求。当LWIP协议栈阻塞等待邮箱之前,它会计算到底应该等待多久,如果LWIP进程中没有初始化任何超时事件,就挂起进程。如果LWIP进程中有初始化的超时事件,这时就不能一直等了,因为这样超时事件没有任何被执行的机会。LWIP会等待邮箱的时间设置为第一个超时事件的时间长度,如果时间到了,还没等到数据,就直接跳出邮箱等待转而执行超时事件,当执行完成超时事件后,再按照上述的方法继续阻塞邮箱。因此,对一个LWIP进程,需要用一个链表来管理这些超时事件。这个链表的大部分工作已经被LWIP的设计者完成了,使用者只需要实现的仅有一个函数:该函数能够返回当前进程个超时事件链表的首地址。LWIP内部协议要利用该首地址来查找完成相关超时事件。再次,要实现创建一个新线程的函数。UC/OSII是支持多线程的。这样一个典型的LWIP应用系统包括这样的三个进程:首先启动的是上层应用程序进程,然后是LWIP协议栈进程,最后是底层硬件数据包接收发送进程。通常LWIP协议栈进程是在应用程序中调用LWIP协议栈初始化函数来创建的。LWIP协议栈进程一般具有最高的优先级,以便实时正确的对数据进行响应。最后就是底层网络驱动函数的实现。这取决于所使用的网络接口芯片,也就是网卡芯片,常见的有RTL8201BL、88W8686、88W8686等。厂商一般都会提供的驱动函数。我们的工作室将这些发函数进行封装。至少我们需要实现发送一个数据包函数和接收一个数据包函数。在本设计中,我们采用的是88W8686无线芯片,根据官方提供的数据手册和文档,我们实现其驱动的移植。对于88W8686无线芯片,在以前已做过较详细的介绍。从开发者编程的角度来看,对88W8686操作就是对其内部寄存器进行操作,以实现网卡初始化,数据发送与接收【11】等。发送数据时,CPU将数据写入到无线网卡芯片的SRAM中,并发送一个控制命令到芯片的寄存器,88W8686就会自动将数据转换成物理帧格式并发送到信道 第四章WIFI无线图像传输系统的软件设计中‘1’】。接收时,在收到网络传来的数据后,88W8686会将其转换成相应的格式,放在其SRAM中,CPU以查询或中断的方式读取数据。4.5网络接口与驱动移植接下来讨论LWIP是怎样来处理与底层硬件,即网卡芯片间的关系的。与许多其他的TCP/IP实现一样,LWIP也是以分层的协议为参照来设计实现TCP/口的。LWIP从逻辑上看分为四层:链路层、网络层、传输层和应用层。注意,虽然LWIP也采用了分层机制,但它没有在各层之间进行严格的划分,各层协议之间可以进行或多或少的交叉存取,即上层和下层协议的缓存处理机制是互相知道的。因此缓冲区能被协议各层共同使用。而且,应用程序和协议栈的内存是相同的,内部缓存能被两者直接访问,从而不需要进行复制‘161。我们将从LWIP的最底层链路层起步,开始介绍整个LWIP内部协议。在LWIP中,是通过一个叫做netif的网络结构体来描述一个硬件网络接口的。这个接口结构比较简单,下面我们从源代码结构口21来分析分析这个结构:structnetif{structnetif*next;//指向下一个netif结构的指针err—t(木linkoutput)(structnetif木netif,structpbuf木p);//ARP模块调用这个函数向网//卡发送一个数据包void*state;//用户可以独立发挥该指针,用于指向用户关心的网卡信息u8thwaddrlen;//硬件地址长度,对于以太网就是MAC地址长度,为6各字节u8_thwaddr[NETIF_MAX_HWADDR。LEN];//MAC地址u16tmtu;//一次可以传送的最大字节数,对于以太网一般设为1500u8tflags;//网卡状态信息标志位charname[2];//网络接口使用的设备驱动类型的种类u8tnum;//用来标示使用同种驱动类型的不同网络接VI);next字段是指向下一个netif结构的指针。我们的一个产品可能会有多个网卡芯片, 基于WIFI的无线图像传输系统的设计LWIP会把所有网卡芯片的结构体链成一个链表进行管理,有一个netiflist的全局变量指向该链表的头部。next字段就是用于链表用。ipaddr、netmask、gw三个字段用于发送和处理数据包用,分别表示IP地址、子网掩码和网关地址。前两个字段在数据包发送时有重要作用,第三个字段似乎没什么用。口地址和网卡设备必须一一对应。input字段指向一个函数,这个函数将网卡设备接收到的数据包提交给口层,使用时将input指针指向该函数即可,后面将详细讨论这个问题。该函数的两个参数是pbuf类型和netif类型的,返回参数是errt类型。其中pbuf代表接收到的数据包。output字段向一个函数,这个函数和具体网络接口设备驱动密切相关,它用于P层将一个数据包发送到网络接口上。用户需要根据实际网卡编写该函数,并将output字段指向该函数。该函数的三个参数是pbuf类型、netif类型和ipaddr类型,返回参数是errt类型。其中pbuf代表要发送的数据包。ipaddr代表网卡需要将该数据包发送到的地址,即为实际链路层主机的IP地址,而不一定为数据包最终需要到达的地址。当口地址不在本网络上时就将路由器的地址赋给output函数,因此P数据被转发到路由器上[23】。linkoutput字段和上面的output基本上是起相同的作用。注意这个函数只有两个参数。实际上output字段函数的实现最终还是调用linkoutput字段函数将数据包发送出去的。state字段可以指向用户关心的关于设备的一些信息,用户可以自由配置,也可以不用。hwaddrlen和hwaddr[]表示MAC地址长度和MAC地址,一般MAC地址长度为6。mtu字段表示该网络一次可以传送的最大字节数,一般设为1500。flags字段是网卡状态信息标志位,是很重要的控制字段,它包括网卡功能使能、广播使能、ARP使能等等重要控制位。name[]字段用于保存网络网络接口的标识。包括标识驱动种类两个字符。其名字直接表示了该网络接口硬件的类型。设置什么名字并不影响用户对网络接口的使用。如果两个网络接口具有相同的网络名字,我们就用num字段来区分相同类别的不同网络接口。我们来看看一个网卡接口结构是这样被初始化,还有数据包是如何接收和发送的。先来看初始化过程,源码:staticstructnetif88W8686;(1)structip_addripaddr,netmask,gw;(2) 第四章WIFI无线图像传输系统的软件设计IP4_ADDR(&gw,192,168,0,1);(3)IP4_ADDR(&ipaddr,192,168,0,60);(4)IP4_ADDR(&netmask,255,255255,0);(5)netif_initO;(6)netif_add(&88W8686,&ipaddr,&netmask,&gw,NULL,ethemetif_init,tcpipinput);(7)netif—set—default(&88W8686);(8)netif—setup(&88W8686);(9)上面的(1)声明了一个netif结构的变量88W8686。(2)声明了三个分别用于暂存IP地址、子网掩码和网关地址的变量,它们是32位长度的。(3)-(5)分别是对上述三个地址值的初始化。(6)只需初始化上面所述的全局变量netif—list即可:netif—list=NULL。(7)调用netif—add函数初始化变量88W8686,其中比较重要的两个参数是ethemetif—init和tcpip_input,前者是用户自己定义的底层接口初始化函数,tcpip_input函数是向P层递交数据包的函数,从前面的讲述中可以很明显的看出,该值会被传递给88W8686的input字段。structnetif木netif_add(structnetif幸netif,structip_addr木ipaddr,structip_addr木netmask.structip—addr木gw,void宰state,err—t(木init)(structnetif木netif),err—t(木input)(structpbuf丰P,structnetif丰netif)){staticu8一tnetifiaum=O;netif->ip_addr.addr=0://复位变量88W8686中各字段的值netif->netmask.addr=O:netif->gw.addr=0:netif->flags=0://该网卡不允许任何功能使能netif->state=state;//指向用户关心的信息,这里为NULLnetif->num=netifiaum++;//设置num字段,netif->input=input;//如前所诉,input函数被赋值4l 基于WIFI的无线图像传输系统的设计netif—set—addr(netif,ipaddr,netmask,gw);∥设置变量88W8686的三个地址if(init(netit)!=ERR_OK){/imp自己的底层接口初始化函数retumNULL;)netif->next=netif_list;//将初始化后的节点插入链表netif—listnetiflist=netif;Nnetiflist指向链表头retumnetif;)err_tethemetif_init(structnetif木netif){netif->name[0】_IFNAME0;//初始化变量88W8686的name字段netif->name[1]-IFNAMEl;//IFNAME在文件外定义的,这里不必关心它的具体值netif->output=etharp_output;netif->linkoutput=low_level_output;IIIIARP模块发送数据包函数low_level_init(netiO;//底层硬件初始化函数retumERR_OK;}lowlevelinit函数是与我们使用的与硬件密切相关初始化函数:staticvoidlow_level_init(structnetif木netif){netif->hwaddr—len=ETHARP_HWADDR_LEN;//设置变量88W8686的hwaddr—len字段netif->hwaddr[0]_’F’;//初始化变量88W8686的MAC地址netif->hwaddr[1】=’n’O;//设什么地址用户自由发挥吧,但是不要与其他netif->hwaddr[2]-~R;//网络设备的MAC地址重复。netif->hwaddr[3】_一E;netif->hwaddr[4]_’S’;netif->hwaddr[5】_⋯T;netif->mtu=1500;//最大允许传输单元∥允许该网卡广播和ARP功能,并且该网卡允许有硬件链路连接42 第四章WIFI无线图像传输系统的软件设计netif->flags2NETIF—FLAG—BROADCASTI\NETIF——FLAG——ETHARPNETIF——FLAG_LINK_UP;88W8686init(netif->hwaddr);//与底层驱动硬件驱动程序密切相关的硬件初始化函数}至此,变量88W8686被初始化好了,而且它描述的网卡芯片88W8686也被初始化好了,而且变量88W8686也被链入链表netiflist。语句(8)调用netifsetdefault函数初始化缺省网络接[21。协议栈除了有个netiflist全局变量指向netif网络接El结构的链表,还有个全局变量netifdefault全局变量指向缺省的网络接口结构。当IP层有数据发送时,它首先会以netiflist为索引选择满足某个条件的网络接口发送数据包,但是,当找不到这样的接口时,协议栈就会调用缺省的网络接口直接发送数据包,所以(8)中的意思是把变量88W8686描述的网络接口设置为缺省的网络接口。(9)调用函数netifsetup使能网络接口,这通过一个简单语句来实现:netif->flagsFNETIF—FLAG_UP;至此,网卡初始化完成,能正常接收和发送数据包了。下面我们来讨论讨论关于网卡数据包的接收和发送。LWIP中实现了接收一个数据包和发送一个数据包函数的框架,这两个函数分别是lowlevelinput和lowleveloutput,用户需要使用实际网卡驱动程序完成这两个函数。一个典型的LWIP应用系统包括这样的三个进程:首先是上层应用程序进程,然后是LWIP协议栈进程,最后是底层硬件数据包接收进程。这里我们就来讲讲第三个进程,看看数据包是怎样被接收并往上层传递的㈣。LWIP使用了一个ethhdr的数据结构来描述数据包包头的14个字节。如下,PACK——STRUCT——BEGINstructeth—hdr{PACKSTRUCTFIELD(structethaddrdest);//目标MAC地址PACK_STRUCTFIELD(structeth—addrsrc);∥源MAC地址PACKSTRUCT_FIrELD(u16_ttype);//类型)PACK_STRUCT_STRUCT;PACKSTRUCTEND43 基于WlFI的无线图像传输系统的设计其中PACK—STRUCT一)()(x都是与编译器字对齐相关的宏定义。上面的dest、src和type三个字段分别和上图中的目的MAC地址、源MAC地址和类型域字段对应。在上面讨论的基础上,我们来看看这个数据包接收进程,源代码如下:voidethemetif_input(void木arg)//创建该进程时,要将某个网络接口结构的netif结构指{//针作为参数传入structeth—hdr木ethhdr;structpbuf幸p;structnetif木netif=fstructnetif木)arg;while(1){P=low_level_input(neti0;//接收一个数据包if(p==NULL)//如果数据包为空,continue;//则循环结束,启动下次接收过程ethhdr=p->payload;//取得数据包内数据switch(htons(ethhdr->type))//判断数据包类型f//只对P数据包和ARP数据包进行处理caseETHTYPEIP://IP数据包caseETHTYPEARP://ARP数据包if(netif->input(p,netiO!=ERR-OK)//将数据包发送到上层应用函数{pbuf_free(p);P=NULL;)break;default:pbuf_free(p);P=NULL;break;)//switch 第四章WIFI无线图像传输系统的软件设计}//while}//main函数在数据包接收进程中,有三个需要注意的地方。一是数据包接收的方法是查询方式,即处理器不断向网卡芯片中读取数据,如果读不到数据,则控制器会重新启动一个读取时序;如果能够成功读取到数据,则将数据通过网卡注册的input函数交往上层进行处理。使用查询方式实现的数据包接收进程其优先级必须低于系统中其他进程的优先级,否则它会阻塞比它优先级低的进程的运行。上面的程序有个可以改进的地方,即在读取到的数据包为空时,接收进程调用系统函数将自己延时一段时间再启动下一个读取过程,这样可以使其不能阻止优先级更低的进程的运行,缺点是数据包的接收得不到及时的响应。其实数据包的接收可以采用中断的方式来实现,这种方式是一种比较好的方式。一般的网卡芯片都有中断功能,即当网卡接收到一个数据包后,它可以产生中断信号告诉控制器自己接收到一个数据包。控制器此时启动一个读取数据包时序,就能有效的读取到非空数据包。所以可以这样来实现一个接收数据包进程:在无数据包收到时,数据包接收进程阻塞在一个信号量下,当有数据包到来时,网卡芯片产生一个中断信号,处理器进入中断处理,并释放一个信号量。中断退出后,数据包接收进程得到信号量,并从网卡芯片中读取数据包,并将数据包递交给上层进行处理。第二个需要注意的地方是htons(ethhdr->type)函数的使用,htons函数的功能是将一个半字长的数据从网络字节顺序转换到我们的处理器支持的字节顺序。解释一下,在计算机体系结构和计算机通信领域中,对于半字、字等的存储机制有可能不同。目前通常采用的存储机制主要有两种:big.endian和little-endian,即大端和小端。对于大端模式,某个半字或字数据的高位字节被在内存的低地址端,低位字节排放在内存的高地址端。对于小端模式,则恰好相反。由于我们使用的ARM处理器使用的是小端模式,而接收到的网络字节数据用的是大端模式,所以这里调用函数htons实现大端与小端的转换,实际就是将两个字节交换顺序即可。这样调用htons(ethhdr->type)后,ethhdr->type的值就为Ox0800或0x0806等。最后需要注意的地方,netif->input在结构88W8686初始化时已经被设置为指向tcpip—input函数,所以实际上上面是调用tcpip_input函数往上层递交数据包。tcpip—input属于P层函数,从这里我们可以看出LWIP的一个很大的特点,即各层之间没有明显的界限划分。像前面所讲的那样,LWIP协议栈进程完成初始化相关工作后,会阻塞在一个邮箱45 基于WIFI的无线图像传输系统的设计上等待数据包的输入,这就对了,tcpip函数就是向这个邮箱发送一条消息,且该消_input息中包含了收到的数据包存储的地址。LWIP协议栈进程从邮箱中取到该地址后就可以对数据包进行处理了。至此,数据包的接收已经完成。数据包的发送相对很简单,因为它不必像数据包接收那样要使用一个专门的进程来实现,而是这样的:当上层有数据包要发送时,直接调用netif->linkoutput发送数据包就可以了。netif->linkoutput在结构88W8686初始化时已经被设置为指向lowleveloutput函数,该函数和底层硬件驱动密切相关,用于实现发送一个数据包的功能。用户应该结合具体网卡驱动实现该函数[141。4.6API及应用程序接下来我们介绍应用程序与LwIP之间的结构问题,即应用程序如何使用协议栈内部提供的各种服务。应用程序可以通过两种方式与协议栈交互:一是直接调用协议栈各个模块函数,二是利用LwIP提供的API函数。直接调用协议栈内部各模块函数,即要创建一个TCP控制块时则调用函数tcpnew,进行TCP连接时则调用tcp,要接收数据则要向控制块中注册相关的回调函数,等.connect等。通过这种方式的交互最大的缺点就是代码编写难度大,且代码常常是晦涩难懂,代码的调试也会异常艰辛。使用得更多是第二种方式:LwlP的API函数。用户程序通过简单的API函数调用就可以享用协议栈提供的服务了,这使得应用程序的编写更加容易。LwIP的API相比BSD实现的API有个明显的特点,即数据在协议栈与应用程序中交互时不用拷贝,这点可以为我们节省大量的时间和内存开销,也说明LwIP更适用于嵌入式这种系统资源受限的系统。但有个关键是,必须有个好的内存管理机制,因为协议栈和应用程序都会对同一片数据进行操作。LwIP的API的实现主要有两部分组成:一部分驻留在用户进程中,一部分驻留在TCP/IP协议栈进程中。这两个部分间通过操作系统模拟层提供的进程通信机制(ⅢC)进行通信,从而完成用户进程与协议栈间的通信,]PC包括共享内存、消息传递和信号量【241。通 第四章WIFI无线图像传输系统的软件设计常尽可能多的工作在用户进程内的API部分实现,例如运算量及时间开销大的工作;TCP/IP协议栈进程中的API部分只完成少量的工作,主要是完成进程间的通讯工作。两部分API之间通过共享内存传递数据,对于共享内存区的描述是采用和pbuf类似的结构来实现。综上,可以用简单的一段话来描述这种API实现的机制:API函数库中处理网络连接的函数驻留在TCP/IP进程中。位于应用程序进程中的API函数使用邮箱这种通讯协议向驻留在TCP/IP进程中的API函数传递消息。这个消息包括需要协议栈执行的操作类型及相关参数。驻留在TCP/IP进程中的API函数执行这个操作并通过消息传递向应用程序返回操作结果。结构pbuf是协议栈内部用来描述数据包的一种方式。数据结构netbuf是API用来描述4数据的一种方式。netbuf是基于pbuf来实现的,其结构如下所示,很明显,它就是包含了几个典型结构的指针。netbuf,pbuf木P,ptr,ip—addr木addr,和u16_tport;注意,这里的netbuf只是相当于一个数据头,而真正保存数据的还是字段P指向的pbuf链表。字段ptr也是指向该netbuf的pbuf链表,但与P的区别在于:P一直指向pbuf链表中的第一个pbuf结构,而p仃则可能指向链表中的其他位置,源文档里面把它描述为fragmentpionter,与该指针调整密切相关的函数是netbufnext和netbuffirst。还有两个字段addr和port分别表示发出netbuf数据端的P地址和端ISl号,这两个字段实际用处不大,API定义了宏netbuffromaddr和netbuffromport分别用于返回某个netbuf结构中这两个字段的值。与netbuf相关的处理函数很多,在源文档15.2节中对每个函数也有了详细的说明,这里说说比较重要的几个。netbufnew用于分配一个新的netbuf结构,注意这里只是一个头部结构,而真正需要的存储数据区域是在函数netbufalloc中分配的,同理函数netbufdelete用于删除一个netbuf结构,同时函数pbuffree会被调用,用以删除数据区域的空间。以上这几个函数使用的简单例子如下:structnetbuf木bu£//申明指针buf=netbufnew();//申请新的netbufnetbuf_alloc(buf,200);//为netbuf分配200字节的空间//使用buf做相关事情netbufdelete(buf);//删除buf讲过了API的内存管理,再来讲具体的API函数。与前面的对应,API函数由两部分47 基于W/FI的无线图像传输系统的设计组成,分别在文件api_lib.C和api_msg.C中。前者包括了用户程序直接调用的API接13函数,后者包括了与协议栈进程通信的API函数,用户程序不可直接调用。这两部分API函数之间通过邮箱传递的消息进行通信。这里又要涉及到两个重要的数据结构:API应用接[51部分提供给上层应用以描述一个网络连接的数据结构netconn,以及描述两部分API函数间传递的消息结构的api_msg。应用程序要使用API函数建立一个连接连接,首先应该建立一个netconn的结构来描述这个连接的各种属性。netconn结构如下,其中去掉了不必要的编译选项和注释。structnetconn{enumnetconn_typetype;//连接的类型,包括TCP,UDP等enumnetconnstatestate;//连接的状态union{//共用体,内核用来描述某个连接structip__pcb木ip;structtcp_pcb木tcp;structudp_pcb木udp;structraw__pcb宰raw;)pcb;errterr;//该连接最近一次发生错误的编码sys_sem_top_completed;//用于两部分API间同步的信号量sys_mbox_trecvmbox;//接收数据的邮箱sys—mbox_tacceptmbox;//服务器用来接受外部连接的邮箱intsocket;//该字段只在socket实现中使用u16_trecv_avail;//structapi_msg_msg木write_msg;//对数据不能正常处理时,保存信息intwriteoffset;//同上,表示已经处理数据的多少netconncallbackcallback;//回调函数,在发生与该netconn相关的事件时可以调用);write_msg是api_msg_msg类型的指针,该结构后续讲到;netconn—callback是API定义的一种函数指针类型,其定义为:typedefvoid(木netconn_callback)(structnetconn木,enumnetconn_evt,u16_tlen); 第四章WIFI无线图像传输系统的软件设计关键字typedefl拘1功能是定义新的类型。这里它用于定义一种netconn—callback的类型,这种类型为指向某种函数的指针,且这种函数有三个类型的输入参数,返回类型为void。在这定义以后就可以像使用int,char一样使用netconncallback,也即它也表示一种数据类型了。所以上面的callback字段表示一个函数指针,当把某个函数名赋给该字段后,该字段就记录了这个函数的起始地址。接下来看看两部分API函数间传递的消息结构的api_msg:structapi_msg{void(木function)(structapi_msg_msg木msg);//函数指针structapi_msg_msgmsg;//函数执行时需要的参数)字段function是一个函数指针,通常当消息被构造时,该字段被填充为api_msg.C中的某个与协议栈接口的API函数,然后该消息被投递到协议栈进程中进行处理,协议栈进程解析出并执行该函数,这样应用程序与协议栈之间的通信就完成了。字段msg中包含了这个函数执行时需要的所有参数,api_msg_msg是个枚举类型,所以对于不同的function,msg有着不同的结构。api_msg_msg结构如下所示:structapi__msg_msg{structnetconn*corm;//与消息相关的某个连接union{stmctnetbuf木b://函数dosend的参数struct{//函数do—newcorm的参数u8——tproto;)n;struct{∥函数dobind和doconnect的参数structip_addr木ipaddr;u16tport;}bc;struct{//函数do_getaddr的参数structip_addr木ipaddr;ul6~t木port;49 基于WIFI的无线图像传输系统的设计u8jlocal;)ad;stlllct{∥函数do_write的参数constvoid幸dataptr;intlen;u8japiflags;}w;struct{∥函数dorecv的参数u16-tlen;}r;)msg;);这个结构体只包含了两个字段:描述连接信息的COILrl和枚举类型msg。在api_msg_msg中保存conn字段是必须的,因为conn结构中包含了与该连接相关的信箱和信号量等信息,协议栈进程要用这些信息来完成与应用进程间的同步与通信。枚举类型msg的各个成员与调用它的函数密切相关。因此在构建一个消息时,API应首先填充消息的function字段,并针对特定的function种类往api_msg_msg的枚举字段写入参数,函数function被协议栈解析执行时,直接按照自己已定的格式取参数。现在来看看前面一直提到的内核协议栈进程是什么样子的。这个函数叫tcpipthread,其源码如下,其中去掉了不相关的编译选项和非重点讨论部分。staticvoidtcpip_thread(void母arg){structtcpip_msg木msg;sys_timeout(IP-TMR_INTERVAL,ip_reass_timer,NULL);//仓J建IP分片重装超时事件sys_timeout(ARP_TMR_INTERVAL,arp_timer,NULL);//创建ARP超时事件while(1){∥进程循环sys—mbox_fetch(mbox,(void木)&msg);//阻塞在邮箱上接收要处理的消息switch(msg->type){//判断消息类型caseTCPIPMSGAPI://若是API消息,调用消息内部的function函数 第四章WIFI无线图像传输系统的软件设计msg一>msg.apimsg一>function(&(msg->msg.apimsg->msg));break;caseTCPIPMSGINPKTY/若是接收到P层递交的数据包if(msg一>msg.inp.netif->flags&NETIF—FLAG_ETHARP)//支持ARPethemeCmput(msg一>msg.inp.P,msg->msg.inp.netiO;//先进行ARP处//理,再判断是否递交IP层处理else//否则直接递交给口层ip_input(msg->msg.inp.P,msg->msg.inp.netiO;memp_ffee(MEMP_TCP口一MSG_INKT,msg);break;default:break;}//switch)//while、|l邮箱mbox是协议栈初始化时建立的用于tcpip_thread接收消息的邮箱,该函数能够识别的消息类型是tcpip_msg结构的,所以不管是API部分还是IP数据包输入部分,都必须将自己的信息封装成tcpip_msg结构。structtcpip_msg{enumtcpip_msg_typetype;//枚举结构,消息类型sys—sem_t*sem;//信号量指针,该字段似乎没怎么被用到union{∥共用体,不同消息类型使用不同的结构structapi_msg*apimsg;//API消息指针structnetifapi_msg丰netifapimsg;//不讨论structf∥接收到IP层数据包相关指针structpbuf木p;structnetif木netif;)inp;structl{}不讨论voidr木f)(void木ctx); 基于WlFI的无线图像传输系统的设计void军ctx;}cb;structf∥不讨论u32jmsecs;sys—timeout_handlerh;void木arg;)tmo;'msg;//枚举类型的名字);这个结构和上节讨论的api_msg_msg有着很相似,api_msg_msg里面也包含了一个叫做的msg的结构体。枚举型tcpip_msg_type的内部成员就是在函数tcpip_thread中看到的TCPIPMSGAPI和TCPIPMSGINPKT等,这里只讨论这两种类型。API函数内部调用来向内核进程发送消息的函数叫tcpip_apimsg,该函数填充一个TCPIP_MSG_API类型的tcpip_msg结构,并把该结构投递到协议栈阻塞的邮箱mbox:err_ttcpip_apimsg(structapi_msg木apimsg){structtcpipmsgmsg;//定义一个消息变量if(mbox!=SYS_MBOXNULL){msg.type=TCPIP_MSGAPI;//消息类型msg.msg.apimsg=apimsg;//使用tcpip_msg中的msg.apimsg字段记录相关信息sys—mbox_post(mbox,&ms曲;//投递消息sys—arch_sem_wait(apimsg.>msg.conn一>op_completed,0);∥阻塞,等待内核处理完毕retumERR_OK;)retumERRVAL;)底层向内核进程递交接收到的IP数据包是通过调用网络接口结构netif中指针input指向的函数来实现的(参见前面netif描述的部分)。通常这个函数是tcpip_input。err—ttcpip_input(structpbuf木P,stmctnetif木inp)52 第四章WIFI无线图像传输系统的软件设计{structtcpip_msg木msg;//定义了一个消息指针if(mbox!=SYS_MBOX_NULL){msg2memp_malloc(MEMUCPIP~MSG_INPKT);//为新的消息申请空间if(msg—NULL){retumERR_MEM;)msg->type2TCPIP—MSG_INPKT;//消息类型msg->msg.inp.P=p;//使用tcpip_msg中的msg.inp字段记录相关信息msg->msg.inp.netif=inp;if(sys_mbox_trypost(mbox,msg)!=ERR_OK){//投递一次消息memp_free(MEMP_TCPIPMSG_rNPKT,msg);//投递不成功则删除消息returnEI吣MEM;)returnERR_OK;)returnERR_VAL;)这个过程用图4—3表示。这里函数tcpip_thread还是只处理TCPIPMSGAPI和TCPIP—MSG—INPKT这两种类型的消息。图4-3API与内核的交互过程从上面的图中可以清晰的看出两部分API函数之间的交互过程,以及应用程序和内核53 基于WIFI的无线图像传输系统的设计函数之间的交互过程。API函数netconnXXX在文件apilib.C中,而API实现的另一部分函数doXXX在apiC函数netconnnew用来创建一个新的连接结构。连接结构的类型可以选择为TCP或UDP等。函数结构原型如下所示,参数type描述了连接的类型,可以为NETCONNTCP或NETCONNUDP等,这里都以TCP作为讨论的对象。structnetconn幸netconn_new(enumnetconn_typetype)该函数首先调用netconnalloc函数分配并初始化一个netconn结构。初始化的过程包括设置netconn结构类型字段,同时为该结构的opcompleted创建一个信号量、recvmbox字段创建一个接收邮箱。接下来函数netconnnew会构建一个印imsg消息,该消息要求内核执行函数do—newconn,最后函数tcpip—apimsg用来将消息包装成tcpip_msg结构并发送出去。tcpipthread函数解析该消息并调用函数donewconn,donewconn根据参数的类型最终调用函数tcp_new创建一个TCP控制块。tcpip_apimsg会阻塞在一个信号量上,直至donewconn释放该信号量。函数netconndelete用来删除一个连接结构netconn。与前面的流程相同,它通过消息告诉内核执行dodelconn,调用tcp函数关闭连接。而后调用.closeTCPnetconndeletenetconnfree函数释放netconn结构的空间【251。注意这里的netconnfree函数netconnalloc函数一样,也不是在文件api_lib.C文件中,而是在apimsg.C中,尽管他们都是netconn_xxx结构。netconnbind用于将一个D地址及端口号与结构netconn绑定。事实上,内核是通过函数do—bind调用tcpbind完成相应TCP控制块得绑定工作的。netconnconnect函数一般在客户端调用,用以将服务器端的p地址和端口号与本地的netconn结构绑定。该函数与内核tcpconnect函数对应。netconnlisten函数一般在服务器端调用,用于将某个TCP控制块置为LISTEN状态。类似的函数dolisten会被调用,该函数有两个重要的工作:为结构netconn字段acceptmbox创建邮箱,该邮箱用于接受外部连接:向相应TCP的PCB控制块中accept字段注册一个回调函数acceptfunction,当该PCB上有新连接出现时,回调函数会被调用,以向上面的acceptmbox邮箱中发送消息,告诉应用程序有新的连接到来,新连接的信息以netconn结构形式被保存在了邮箱中。 第四章WIFI无线图像传输系统的软件设计netconnaccept函数在服务器上使用,用于接收远端的连接,该函数主要在阻塞在上面所述的acceptmbox邮箱上,当接收到新的连接后,在该邮箱上取下连接的netconn结构并返回。netconnrecv函数用于接收数据,接收到得数据被封装为netbuf结构。这里内核函数tcp会被协议栈调用,以通知内核数据被正常接收,内核因此调整发送窗结构,返回.recvedACK确认等。函数netconnwrite用于向相应的TCP连接上发送数据,主要这个函数只用于发送TCP数据,用于发送UDP数据的函数叫netconnsend,这里先不讨论。netconnwrite函数原型如下,它用于将dataptr指向的size个数据放到连接conn的发送队列上,apiflags用于描述err_tnetconnwrite(structnetconn木conn,constvoid木dataptr,intsize,u8japiflags)对该数据的操作,包括是否拷贝,是否立即发送两种选择。最后netconnclose函数用于主动关闭连接。接下来就是应用层的程序开发了,具体在应用层通过无线网络传输数据。这里就涉及到网络套接字编程了【8】o出了LWIP的API之外LWIP用自身的API实现了BSDSocketAPI函数,以使得编程更加简单。我们可以使用LWIP的API构建一个服务器程序,然后用PC端构建客户端程序。以客户端服务器的模式构建整个应用。因为我们要传输的是图像数据,因此采用的面向连接TCP,而不是UDP。具体来说整个程序流程图如图44所示: 基于WIFI的无线图像传输系统的设计图4-4应用程序工作示意图在上方已经建立连接后,应用程序的工作流程如图所示。函数netconnnew用来创建一个新的连接结构。连接结构的类型我们选择为TCP。函数结构原型如下所示,参数type描述了连接的类型,可以为NETCONNTCP或NETCONNUDP等。structnetconn木netconnnew(enumnetconn_typetype)该函数首先调用netconnalloc函数分配并初始化一个netconn结构。初始化的过程包括设置netconn结构类型字段,同时为该结构的op创建一个信号量、_completedrecvmbox字段创建一个接收邮箱。接下来函数netconnnew会构建一个api消息,该消息要求.msg内核执行函数do—newconn,最后函数tcpip_apimsg用来将消息包装成tcpip_msg结构并发送出去。tcpip函数解析该消息并调用函数,根据参数的类_threaddonewconndonewconn 第四章WIFI无线图像传输系统的软件设计型最终调用函数tcp_new创建一个TCP控制块。tcpip_apimsg会阻塞在一个信号量上,直至donewconn释放该信号量。函数netconndelete用来删除一个连接结构netconn。与前面的流程相同,它通过消息告诉内核执行dodelconn,调用tcpclose函数关闭TCP连接。而后netconndelete调用netconnfree函数释放netconn结构的空间。netconnbind用于将一个D地址及端口号与结构netconn绑定。事实上,内核是通过函数dobind调用tcp完成相应控制块得.bindTCP绑定工作的。netconnconnect函数一般在客户端调用,用以将服务器端的IP地址和端口号与本地的netconn结构绑定。该函数与内核tcpconnect函数对应。netconnlisten函数一般在服务器端调用,用于将某个TCP控制块置为LISTEN状态。类似的函数dolisten会被调用,该函数有两个重要的工作:为结构netconn字段acceptmbox创建邮箱,该邮箱用于接受外部连接;向相应TCP的PCB控制块中accept字段注册一个回调函数acceptfunction,当该PCB上有新连接出现时,回调函数会被调用,以向上面的acceptmbox邮箱中发送消息,告诉应用程序有新的连接到来,新连接的信息以netconn结构形式被保存在了邮箱中。netcormaccept函数在服务器上使用,用于接收远端的连接,该函数主要在阻塞在上面所述的acceptmbox邮箱上,当接收到新的连接后,在该邮箱上取下连接的netconn结构并返回。netconnrecv函数用于接收数据,接收到得数据被封装为netbuf结构。这里内核函数tcp会被协议栈调用,以通知内核数据被正常接收,内核因此调整发送窗结构,返回.recvedACK确认等。函数netconnwrite用于向相应的TCP连接上发送数据,主要这个函数只用于发送TCP数据,用于发送UDP数据的函数叫netconnsend,这里先不讨论。netconnwrite函数原型如下,它用于将dataptr指向的size个数据放到连接conn的发送队列上,apiflags用于描述err_tnetconn_write(structnetconn半conn,constvoid术dataptr,intsize,u8japiflags)对该数据的操作,包括是否拷贝,是否立即发送两种选择。最后netconnclose函数用于主动关闭连接。 58 第五章系统测试和展望本章首先对我们设计的整个WIFI无线图像传输系统软硬件联合起来进行测试,并验证了本设计的实用性。然后对本文所作的工作进行了总结和归纳。最后对未来的研究方向进行了展望。5.1系统测试我们用所设计的系统建立一个adhoe网络,并用一台笔记本电脑的无线网卡与之无线连接起来,最后实现了图像数据到笔记本之间的传输。具体参数设置如图5-I所示:charmarvelmOde2’i。:charmarveIssid[32】={”imagewifi”};charmarveIke?[32]={”123456789i011”);charwirelessip[4]={192,168,i0,i0);i:charwirelessmask[q]={255,255,255,0);-charwirelessgw[q】={192,i68,i0,i);charwirelessdns[哇]={202,99,96,68);charwirelessmac[6]={Ox00,OxID,Ox2f,Ox00,Ox4e,Ox2d);图5-IWIFI相关配置在板子上简历以上所示的网络后,我们打开笔记本电脑的无线网卡,能搜索到我们刚建立的网络imagewifi,输入密码后就能连接上。乏菇溺缝莛茎妾^im誊譬gw溺FAST738120,捌T≯一L!N《匹;7鱼6i图5-2连接成功示意图我们plug一下板子的IP地址得到如下的图5-3:59翅鬟,J黪i 基于WIFI的无线图像传输系统的设计图5-3Ping板子得到结果我们生成一副图像并发送,最后接收的结果如下:震霾图5_4传输图像然后,我们对-N实际的自然图像进行传输试验。该图像是试验台上鼠标的图像,客 第五章系统测试和展望户端得到的结果如图5-5所示:蔷imagewifi豳5.2本文工作总结和展望图5-5传输实际的图像本文根据课题要求的图像传输背景设计了一个WIFI无线图像传输系统。首先比较了各种无线传输技术的特点,选择的IEEE802.1l的WIFI作为我们使用的无线网络技术。然后具体设计了图像传输系统的软硬件,包括原理图和PCB的绘制以及芯片的焊接和调试,软件主要介绍了嵌入式TCP/IP协议栈LWIP和无线网卡芯片驱动的移植。最后实现了本设计的板子和笔记本的无线连接并传输了一幅图片。本设计的板子是独立的,未来第一步的工作是把WIFI系统和成像设备在一起实现。这样拍摄的图片就能及时地传输出来,如果允许的话可以接入互联网,在世界上任何地方都可以实时监控。其次是无线系统由于其开放性,安全和保密是一个亟待解决的问题。下一步必须研究如何加强无线传输系统的保密性。然后,我们使用的IEEE802.1lg的通信速率只有54Mbps,对于高分辨率的图像传输时延是不小的,下一步可采用最新的802.1In或WiMAX来实现实时的视频流传输。 62 参考文献[1]刘乃安.无线局域网(WLAN)一原理、技术与应用[M].西安:西安电子科技大学出版社,2007[2】段群杰等.零基础学ARM9嵌入式Linux系统开发[~q.北京:机械工业出版社,2010[3]周润景.AlfiumDesigner原理图与PCB设计口川.北京:电子工业出版社,2011[4】GaryR.wri曲t’W.RichardStevens著,陆雪莹等译.TCP/IP详解[M].北京:机械工业出版社,2009[5]ReinholdLudwig,PavelBretchko著,王子宇等译.射频电路设计一理论与应用阻q北京:电子工业出版社,2叭1[6]朱升林.LWIP协议深度剖析与实战演练[M].北京:中国水利水电出版社,2012[7】SergioScaglia著,潘琢金等译.嵌入式IntemetTCP/IP基础、实现及应用[I咽.北京:北京航空航天大学出版社,2009[8]W.RichardStevens著,杨继张等译.UNIX网络编程[M]第一卷.北京:清华大学出版社,2006[9]JeanJ.Labrosse著,何小庆等译.嵌入式实时操作系统uC/os应用开发:基于STM32微控制器[M].北京:北京航空航天大学出版社,2012[10]JosephYiu著,宋岩等译.ARMCortex.M3权威指南[M].北京:北京航空航天大学出版社,2009[11]罗娜.基于88W8686的手持终端WIFI功能的设计与实现[D】.武汉:武汉理工大学,2010[12】刘芳华.基于ARM的WIFI无线通信终端的研宄与实现[D】.武汉:武汉科技大学,2010【13]张艳.2.4GHzWIFI手机射频模块的研究与设计[D].上海:华东师范大学,2007[14]赵一夔.基于ARMCortexM3的嵌入式系统设计与实现[D】.西安:西安电子科技大学,2010[15]董向样.基于ARM的LWIP协议栈研究与移植[D】.哈尔滨:哈尔滨理工大学,2009[16]杨玉佳.LWIP在uC/OS平台上的移植与应用[D].成都:电子科技大学,2009[17]张来君.基于LWIP平台的无线TCP性能研究[D】.北京:北京邮电大学,2006[18】董巍.IEEE802.1l无线局域网性能表现[D].北京:北京邮电大学,2009[19]许博.无线局域网安全分析及其攻击方法研究[D】.西安:西安电子科技大学硕士论文,2010[20]任天鹏.OFDM通信系统若干问题研究及发射端基带调制实现[D].长沙:国防科学技术大学.2007[21]朱升林,张红雨.88W8686和AS3990的网络UHF读写器设计[J].单片机与嵌入式系统应用,2011.12.0l[22]程明,余中华,苏艳苹,郭小飞.pC/OSII下LwlP协议栈的移植和测试[J].微计算机信息,2008.08—15[23】高新立.LWIP在OS20操作系统中移植的研究[D】.天津大学,2009[24]胡俐蕊,王则林,胡传志.基于LwP的pC/OS—II网络应用程序设计方法[J].计算机应用与软件,2010.04.15[25]张晋.嵌入式Web服务器的研究与实现[J].青岛科技大学学报,2010[26]GeorgiyPekhteryev,ZaferSahinoglu,PhilipOflik,andGhulamBhatti.ImageTransmissionoverIEEE802.15.4andZigbeeNetworks[J].MITSUBISHIELECTRICRESEARCHLABORATORIES.2005[27]J.一J.vandeBeek,O.Edfors,M.Sandell,S.K.Wilson,andP.O.B6r-jesson,OnchannelestimationinOFDMsystems[C].Proc.IEEE45thVehicularTechnologyCone,Chicago,IL,1995.PP.815-819.[28]OveEdfors,MagnusSandellandJan—JppVanDeBeek,AnalysisofDFT-BasedChannelEstimatorsforOFDM[J],WirelessPersonalCommunications12:55—70,2000[29]You—SeokLee,Hyun—ChoolShin,andHyotmg—NamKim,ChannelEStimationBasedonaTime—DomainThresholdforOFDMSystems[J],IEEETrans.Broadcasting,v01.55,NO.3,200963 基于WIFI的无线图像传输系统的设计『301Y.Kang,K.KimandH.Park,EfficientDFT_baSedchannelestimationforOFDMsysternsonmultipathchannels[J1,IETCommunications,v01.1,N.2,PP.197.202,2007.[31]NajjaLL,SparsechannelsstructuredestimationinOFDMsystems[C】,Proc.ofVTCSpring201l,Budapest,Hungary,2011『321ADAMDUNKELS,TheUIPEmbeddedTCP/IPStackhtto://www.sics.se/-adam/uip/[EB/OL].f331http://sics.se/~sdam/1wip[EB/OLl『341http://www.rfc.editor.org/rfc.index.html[EB/OLl『351正EEcomputersociety.IEEEStandardforInformationtechnology—叮elecommunicationsandinformationexchangebetweensystems_Localandmetropolitanareanetworks--SpecificrequirementsPart11:WirelessLANMediumAccessControl(MAC)andPhysicalLayer(PHy)SpecificationsfS],2007f361Microsemismartfusiondatasheet[EB/OLl『371TITPS650243datasheet[EB/OLl『381Marvell88W8686datasheet阻B/OLl[391WM—G—MR.09productspecifications[EB/OLl 作者简介及在学期间发表的学术论文与研究成果作者简历:1988年11月27日出生于湖北省荆州市。2006年9月一010年6月,在天津科技大学大学电子信息与自动化学院获得学士学位。2010年9月-2013年5月,在中国科学院西安光学精密机械研究所攻读硕士学位。已发表的学术论文:JingWang,YuehongQiu.AnewDFTbasedchannelestimationmethodforOFDMsystemsovermultipathchannels[C].ProceedingsofCITCS一12.Atlantispress,2012[EI收录】65
此文档下载收益归作者所有