版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
浙江大學(xué)本科畢業(yè)設(shè)計(jì)摘要隨著無(wú)線(xiàn)通信技術(shù)的發(fā)展和人們對(duì)無(wú)線(xiàn)頻譜資源需求的日益增長(zhǎng),認(rèn)知無(wú)線(xiàn)網(wǎng)絡(luò)以其不需要授權(quán)就可以使用頻譜、頻譜利用率高、使用方式靈活等獨(dú)有特性越來(lái)越受到關(guān)注,成為無(wú)線(xiàn)移動(dòng)通信網(wǎng)絡(luò)的一個(gè)重要發(fā)展方向。設(shè)備驅(qū)動(dòng)程序在Linux內(nèi)核中扮演著特殊的角色,它們是一個(gè)個(gè)獨(dú)立的“黑盒子”,使某個(gè)特定的硬件響應(yīng)一個(gè)定理良好的內(nèi)部編程接口,同時(shí)完全隱藏了設(shè)備的工作細(xì)節(jié)。用戶(hù)操作通過(guò)一組標(biāo)準(zhǔn)化的調(diào)用完成,而這些調(diào)用是和特定的驅(qū)動(dòng)程序無(wú)關(guān)的。本協(xié)議中涉及到的主要是字符設(shè)備驅(qū)動(dòng)程序。啟動(dòng)和關(guān)閉設(shè)備必須調(diào)用open和release方法;當(dāng)PC上的應(yīng)用程序通過(guò)網(wǎng)口發(fā)送大批數(shù)據(jù)到PXA255處理器上時(shí),處理器必須先調(diào)用poll和select方法將數(shù)據(jù)緩存下來(lái),然后通知內(nèi)核去讀取數(shù)據(jù),這時(shí)使用ioctl方法和write方法;當(dāng)數(shù)據(jù)處理完畢后通知內(nèi)核將數(shù)據(jù)取出時(shí)調(diào)用read方法。通過(guò)一套完整和連續(xù)的驅(qū)動(dòng)方法,有效的將攝像頭拋下來(lái)的數(shù)據(jù)通過(guò)Socket套接字的方式傳遞到ARM內(nèi)核中,然后通過(guò)ARM和FPGA的接口處理存入FPGA的RAM中,最后通過(guò)無(wú)線(xiàn)發(fā)送出去。對(duì)于MAC層要做的,就是要保證從PC上通過(guò)Socket套接字拋下來(lái)的二進(jìn)制數(shù)據(jù)流完整可靠的從用戶(hù)空間拷至內(nèi)核空間,最后放到FPGA的RAM中去,而這整個(gè)過(guò)程完全可以由Linux設(shè)備驅(qū)動(dòng)的方式實(shí)現(xiàn)。協(xié)議的設(shè)計(jì)以應(yīng)用的需求為出發(fā)點(diǎn),Ad-hoc網(wǎng)絡(luò)的信道接入?yún)f(xié)議一直是國(guó)內(nèi)外研究的熱點(diǎn),主要是為了解決隱藏終端和暴露終端問(wèn)題,影響比較大的有MACA協(xié)議,即RTS/CTS/ACK方案,控制信道和數(shù)據(jù)信道分裂的雙信道方案和基于定向天線(xiàn)的MAC協(xié)議,以及一些改進(jìn)類(lèi)的MAC協(xié)議。有一些研究則是側(cè)重于將IEEE802.11的MAC協(xié)議移植到AdHoc網(wǎng)絡(luò)中?;诙ㄏ蛱炀€(xiàn)的MAC協(xié)議在理論上性能較為優(yōu)越,但在技術(shù)上實(shí)現(xiàn)的難度較大。由于本協(xié)議并不需要進(jìn)行嚴(yán)格的時(shí)隙設(shè)定;而是在控制信道上通過(guò)RTS競(jìng)爭(zhēng)來(lái)獲取溝通機(jī)會(huì),并在后續(xù)的數(shù)據(jù)傳輸階段進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)傳輸?shù)拈L(zhǎng)度最大值限制以物理幀格式中的限制為準(zhǔn)(OFDM1600Byte,QAM750Byte,CPM150Byte),并可以在此范圍內(nèi)隨意設(shè)定,同時(shí)DAT傳輸階段甚至可以考慮傳輸若干個(gè)混合波形調(diào)制幀來(lái)提高整體的傳輸效率。因此采用RTS/CTS/ACK方案是一種最好的選擇。本協(xié)議基于AdHoc網(wǎng)絡(luò),同時(shí)也可以拓寬至AdHoc網(wǎng)絡(luò),可以在沒(méi)有固定基礎(chǔ)設(shè)施支持的情況下提供靈活方便的通信。在軍事領(lǐng)域,或在發(fā)生了地震﹑水災(zāi)﹑火災(zāi)等重大災(zāi)難后固定通信網(wǎng)絡(luò)設(shè)備無(wú)法正常工作時(shí),依靠AdHoc網(wǎng)絡(luò)就能夠提供通信支持。而且,由于AdHoc網(wǎng)絡(luò)構(gòu)建便捷,其應(yīng)用場(chǎng)景正在不斷拓寬。關(guān)鍵詞:認(rèn)知無(wú)線(xiàn)電;MAC協(xié)議;嵌入式系統(tǒng);IntelPXA255;Linux設(shè)備驅(qū)動(dòng);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認(rèn)知無(wú)線(xiàn)電技術(shù)發(fā)展概況 11.2嵌入式系統(tǒng)簡(jiǎn)介 11.3本章小結(jié) 12IntelXscalePXA255處理器簡(jiǎn)介 22.1IntelPXA255處理器簡(jiǎn)介 22.2靜態(tài)存儲(chǔ)接口 32.3GPIO口 42.4中斷控制器 42.5本章小結(jié) 53嵌入式Linux設(shè)備驅(qū)動(dòng)程序原理 63.1嵌入式Linux設(shè)備驅(qū)動(dòng)程序簡(jiǎn)介 63.2字符設(shè)備驅(qū)動(dòng)程序 93.3本章小結(jié) 124硬件方案介紹 134.1器件選擇 134.2硬件實(shí)現(xiàn)平臺(tái) 144.3本章小結(jié) 145MAC層接口協(xié)議的具體設(shè)計(jì)與實(shí)現(xiàn) 155.1MAC層協(xié)議基本框架 155.2FPGA與XScale接口 165.3數(shù)據(jù)包結(jié)構(gòu)定義 195.4協(xié)議具體流程及實(shí)現(xiàn)細(xì)節(jié) 225.5頻譜感知和SNR算法 285.6本章小結(jié) 296演示場(chǎng)景與測(cè)試 306.1對(duì)于演示場(chǎng)景的說(shuō)明 306.2調(diào)試過(guò)程劃分及說(shuō)明 316.3本章小結(jié) 347抓包實(shí)現(xiàn)攝像頭對(duì)協(xié)議的自適應(yīng) 357.1抓包過(guò)程及交互包的分析 357.2測(cè)試過(guò)程及問(wèn)題解決方案 377.3本章小結(jié) 388Socket編程與VC++界面開(kāi)發(fā) 398.1Socket編程 398.2基于對(duì)話(huà)框窗口的創(chuàng)建 418.3本章小結(jié) 43致謝 44參考文獻(xiàn) 45PAGE141緒論1.1認(rèn)知無(wú)線(xiàn)電技術(shù)發(fā)展概況認(rèn)知無(wú)線(xiàn)電(CognitiveRadio)[1]概念最初是由瑞典皇家技術(shù)學(xué)院的J.Mitola于2021年在軟件無(wú)線(xiàn)電(SDR)基礎(chǔ)上提出的。在其博士論文中這樣描述認(rèn)知無(wú)線(xiàn)電:無(wú)線(xiàn)數(shù)字設(shè)備和相關(guān)的網(wǎng)絡(luò)在無(wú)線(xiàn)電資源和通信方面具有充分的計(jì)算機(jī)智能來(lái)探測(cè)用戶(hù)通信需求,并根據(jù)這些需求來(lái)提供最適合的無(wú)線(xiàn)電資源和無(wú)線(xiàn)業(yè)務(wù)。在Mitola的認(rèn)知無(wú)線(xiàn)電定義中,認(rèn)知無(wú)線(xiàn)電將連續(xù)不斷地感知外部環(huán)境的各種信息(頻率、調(diào)制方式、信噪比、網(wǎng)絡(luò)流量甚至用戶(hù)數(shù)據(jù)內(nèi)容等),對(duì)這些信息進(jìn)行分析、學(xué)習(xí)和判斷,然后通過(guò)一種稱(chēng)作“無(wú)線(xiàn)電知識(shí)表達(dá)語(yǔ)言”(RKRL)[2]的新語(yǔ)言與其他認(rèn)知終端智能交流,以選擇合適的工作頻率、調(diào)制方式、發(fā)射功率以及路由協(xié)議等,保證整個(gè)通信網(wǎng)絡(luò)可靠運(yùn)行,并達(dá)到最佳頻譜資源利用率。該定義中無(wú)線(xiàn)節(jié)點(diǎn)和網(wǎng)絡(luò)觀察到的每一個(gè)可能的參數(shù)都被考慮到了,因此也被成為“全認(rèn)知無(wú)線(xiàn)電”。上述是對(duì)認(rèn)知無(wú)線(xiàn)電的最初定義,功能大而全但卻難以實(shí)現(xiàn),因此業(yè)界開(kāi)始尋求易于實(shí)現(xiàn)的認(rèn)知無(wú)線(xiàn)電技術(shù)。1.2嵌入式系統(tǒng)簡(jiǎn)介嵌入式系統(tǒng)[3]是繼計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)之后,IT領(lǐng)域又一個(gè)新的技術(shù)熱點(diǎn)和發(fā)展方向。嵌入式系統(tǒng)目前己經(jīng)廣泛地應(yīng)用于網(wǎng)絡(luò)通信、消費(fèi)電子、工業(yè)控制、國(guó)防等各個(gè)領(lǐng)域。隨著計(jì)算機(jī)技術(shù)與通信技術(shù)的發(fā)展,嵌入式系統(tǒng)的研究與開(kāi)發(fā)也有著越來(lái)越重要的實(shí)際意義。ARM公司是業(yè)界領(lǐng)先的16/32位嵌入式處理器技術(shù)提供商,占約75%的RISC處理器市場(chǎng)。ARM處理器核具有性能高、成本低和功耗省的特點(diǎn),已經(jīng)成為便攜式通信設(shè)備、手持計(jì)算、多媒體數(shù)字消費(fèi)等嵌入式解決方案中事實(shí)上的標(biāo)準(zhǔn)。什么是“嵌入式系統(tǒng)”?關(guān)于這個(gè)定義目前仍在爭(zhēng)論中,普遍接受的定義有以下兩種:國(guó)際電氣和電子工程師協(xié)會(huì)(IEEE)的定義,嵌入式系統(tǒng)是“控制、監(jiān)視或者輔助設(shè)備、機(jī)器和車(chē)間運(yùn)行的裝置”(devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants)。國(guó)內(nèi)業(yè)界流行定義為“嵌入式系統(tǒng)是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)”[4]。1.3本章小結(jié)本章主要介紹了認(rèn)知無(wú)線(xiàn)電技術(shù)和嵌入式技術(shù)在當(dāng)今的發(fā)展?fàn)顩r以及以后的發(fā)展前景。
2IntelXscalePXA255處理器簡(jiǎn)介2.1IntelPXA255處理器簡(jiǎn)介IntelXScalePXA255[5]處理器運(yùn)算速度高達(dá)400MHz,,外圍控制器眾多,是一款高集成度高性能的優(yōu)秀嵌入式處理器。功耗更低,系統(tǒng)伸縮性更好,同時(shí)核心頻率也得到了提高,目前400MHz的產(chǎn)品已經(jīng)進(jìn)入市場(chǎng),而600、800Mhz的Xscale處理器也將很快面世。同時(shí),這種處理器還支持高效通訊指令,可以和同樣架構(gòu)處理器之間達(dá)到高速傳輸。其中一個(gè)主要的擴(kuò)展就是無(wú)線(xiàn)MMX,這是一種64位的SIMD指令集,在新款的Xscale處理器中集成有SIMD協(xié)處理器。這些指令集可以有效的加快視頻、3D圖像、音頻以及其他SIMD傳統(tǒng)元素處理[5]。IntelXScalePXA255處理器的內(nèi)部結(jié)構(gòu)示意圖如圖2-1所示:圖2-1PXA255處理器的內(nèi)部結(jié)構(gòu)IntelXScalePXA255處理器的配置如下:32位XscaleRISC核心,兼容ARMV5TE指令;工作頻率200、300、400MHz;0.18微米制程;超標(biāo)量執(zhí)行;特殊40位存儲(chǔ)器,16位SIMD指令(視頻、音頻處理);IntelStrata閃存高速同步接口;性能提高和功耗降低模式;32KB指令緩存,32KB數(shù)據(jù)緩存;多媒體流數(shù)據(jù)專(zhuān)用2KB緩存;內(nèi)存控制器:4bank(最大256MB),工作頻率100MHz,支持2.5和3.3VSDRAM、SRAM、ROM、閃存等,16、32位總線(xiàn)帶寬;雙通道PCMCIA、CF卡控制器;MMC/SD存儲(chǔ)卡控制器;15個(gè)單Bit通用輸入/輸出接口,支持中斷;集成可編程頻率合成器、計(jì)時(shí)器;16條DMA通道;LCD顯示控制器,支持填充、矩形單元變換硬件加速AC97音頻;USB接口;UART(一個(gè)用于內(nèi)部設(shè)備,一個(gè)提供全功能硬件傳輸控制);藍(lán)牙、紅外接口;I2C和I2S總線(xiàn);SSP接口;256針PBGA封裝,核心大小17×17mm;工作溫度范圍廣[5]。2.2靜態(tài)存儲(chǔ)接口靜態(tài)存儲(chǔ)器接口由6個(gè)分區(qū)組成,可以通過(guò)nCS[5:0]進(jìn)行選擇。每個(gè)分區(qū)都可以配置成下列的類(lèi)型:非突發(fā)的ROM和Flashmemory;突發(fā)的ROM或Flash;突發(fā)和非突發(fā)的SRAM;可變反應(yīng)時(shí)間的I/O??勺兎磻?yīng)時(shí)間的I/O接口與SRAM的區(qū)別在于前者的數(shù)據(jù)準(zhǔn)備好信號(hào)RDY允許插入一些可變數(shù)量的等待狀態(tài)。每個(gè)選擇分區(qū)的數(shù)據(jù)總線(xiàn)寬度可以配置成16位或32位。nCS[3:0]也可以為同步靜態(tài)存儲(chǔ)配置。在可變反應(yīng)時(shí)間I/O接口寫(xiě)的過(guò)程中,nPWE代替了nWE的使用,從而SDRAM刷新可在VLIO口傳輸時(shí)執(zhí)行。nOE,nWE和nPWE的使用歸結(jié)如下:nOE是所有讀的使能信號(hào);nWE是Flash和SRAM寫(xiě)的使能信號(hào);nPWE是VLIO寫(xiě)的使能信號(hào)。對(duì)于SRAM和VLIO實(shí)現(xiàn),DQM[3:0]信號(hào)被用于寫(xiě)的字節(jié)使能,其中DQM[3]為MSB。處理器支持26位的字節(jié)地址,對(duì)于每一個(gè)分區(qū)都可以訪(fǎng)問(wèn)64MByte的空間。這些字節(jié)地址通過(guò)26個(gè)外部引腳送出。對(duì)于32位的系統(tǒng)MA[1:0]無(wú)效,同理16位的系統(tǒng)MA[0]無(wú)效。對(duì)于32位系統(tǒng)的讀,DQM[3:0]和MA[1:0]都為0;對(duì)于16為系統(tǒng)的讀,DQM[1:0]和MA[0]為0。MSCx寄存器的ET域指明了存儲(chǔ)區(qū)域的類(lèi)型,非突發(fā)的ROM或Flash;VLIO;突發(fā)長(zhǎng)度為4的ROM或Flash;突發(fā)長(zhǎng)度為8的ROM或Flash。RBW域指明了nCS[5:0]選擇的分區(qū)的總線(xiàn)寬度。16位寬總線(xiàn)上的傳輸使用MD[15:0]。BOOL_SEL引腳和SXCNFG寄存器必須被用來(lái)為SMROM或其他類(lèi)型的同步靜態(tài)存儲(chǔ)配置nCS[3:0]。當(dāng)處理器reset后,它的取指和執(zhí)行的起始地址都是0x00,這和用nCS[0]選擇區(qū)域是相對(duì)應(yīng)的。BootROM也必須定位在這個(gè)地址上,BOOT_SEL管腳決定bootmemory的類(lèi)型。2.3GPIO口IntelXScalePXA255處理器有85個(gè)GPIO口,可以通過(guò)使用GPSR、GPCR、GPDR、GRER、GFER、GEDR、GAFR等寄存器來(lái)控制,實(shí)際上每個(gè)寄存器都有三個(gè),每個(gè)寄存器有32位,總共加起來(lái)就可以控制85個(gè)GPIO口[6]。幾個(gè)比較重要的寄存器的作用如下:GPDR:包括GPDR0,GPDR1,GPDR2;GPDR0控制0~31GPIO口,GPDR1控制32~63GPIO口,GPDR2控制64~84GPIO口;將GPDRx的某一位設(shè)置為0,就代表將對(duì)應(yīng)的GPIO口設(shè)置為輸入口;將GPDRx的某一位設(shè)置為1,就代表將對(duì)應(yīng)的GPIO口設(shè)置為輸出口;保留位必須清零,且讀操作無(wú)效;GPSR:包括GPSR0,GPSR1,GPSR2;GPSR0控制0~31GPIO口,GPSR1控制32~63GPIO口,GPSR2控制64~84GPIO口;將GPSRx的某一位設(shè)置為0,對(duì)對(duì)應(yīng)的GPIO口電平?jīng)]有影響;將GPSRx的某一位設(shè)置為1,如果對(duì)應(yīng)的GPIO口被設(shè)置為輸出口,則將該GPIO口置為高電平;保留位必須清零,且讀操作無(wú)效;GPCR:包括GPCR0,GPCR1,GPCR2;GPCR0控制0~31GPIO口,GPCR1控制32~63GPIO口,GPCR2控制64~84GPIO口;將GPCRx的某一位設(shè)置為0,對(duì)對(duì)應(yīng)的GPIO口電平?jīng)]有影響;將GPCRx的某一位設(shè)置為1,如果對(duì)應(yīng)的GPIO口被設(shè)置為輸出口,則將該GPIO口置為低電平;保留位必須清零,且讀操作無(wú)效;GRER:包括GRER0,GRER1,GRER2;GRER0控制0~31GPIO口,GRER1控制32~63GPIO口,GRER2控制64~84GPIO口;將GRERx的某一位設(shè)置為0,取消對(duì)應(yīng)的GPIO口的上升沿檢測(cè);將GRERx的某一位設(shè)置為1,將對(duì)應(yīng)的GPIO口設(shè)置為上升沿檢測(cè),即有上升沿到達(dá)時(shí),GEDR中的對(duì)應(yīng)位將被置為1;保留位必須清零,且讀操作無(wú)效;GFER:包括GFER0,GFER1,GFER2;GFER0控制0~31GPIO口,GFER1控制32~63GPIO口,GFER2控制64~84GPIO口;將GFERx的某一位設(shè)置為0,取消對(duì)應(yīng)的GPIO口的下降沿檢測(cè);將GFERx的某一位設(shè)置為1,將對(duì)應(yīng)的GPIO口設(shè)置為下降沿檢測(cè),即有下降沿到達(dá)時(shí),GEDR中的對(duì)應(yīng)位將被置為1;保留位必須清零,且讀操作無(wú)效;2.4中斷控制器中斷控制器控制處理器支持的中斷源,同時(shí)也包含所有中斷源的優(yōu)先級(jí)。控制器決定中斷是否引起IRQ或FIQ發(fā)生。中斷寄存器只支持一種優(yōu)先級(jí),但是中斷可以被指向IRQ或FIQ,其中FIQ的優(yōu)先級(jí)比IRQ的高。中斷控制器包含下列這些寄存器:中斷控制器IRQ未處理寄存器,ICIP;中斷控制器FIQ未處理寄存器,ICFP;中斷控制器未處理寄存器,ICPR;中斷控制器掩碼寄存器,ICMR;中斷控制器級(jí)別寄存器,ICLR;中斷控制器控制寄存器,ICCR。在大多數(shù)場(chǎng)合,一個(gè)中斷的根本原因可以通過(guò)讀兩個(gè)場(chǎng)合下的寄存器:產(chǎn)生IRQ中斷的ICIP或產(chǎn)生FIQ中斷的ICIP來(lái)決定產(chǎn)生中斷的器件。然后通過(guò)讀該器件的狀態(tài)寄存器就可以準(zhǔn)確的找出是哪個(gè)函數(shù)在要求服務(wù)。如果ICCR[DIM]位為0,則在空閑模式時(shí)中斷掩碼寄存器ICMR將被忽略,即所有使能的中斷都可以導(dǎo)致處理器退出空閑模式。否則,只有未被屏蔽的中斷才能導(dǎo)致處理器退出空閑模式。ICCR[DIM]的reset值為0。2.5本章小結(jié) 本章主要介紹了IntelPXA255ARM9處理芯片的一些相關(guān)知識(shí)。主要針對(duì)本論文具體涉及到的幾個(gè)方面,包括外部存儲(chǔ)接口和相關(guān)寄存器,GPIO口,中斷控制器等內(nèi)容。
3嵌入式Linux設(shè)備驅(qū)動(dòng)程序原理設(shè)備驅(qū)動(dòng)程序[7,8]在Linux內(nèi)核中扮演著特殊的角色,它們是一個(gè)個(gè)獨(dú)立的“黑盒子”,使某個(gè)特定的硬件響應(yīng)一個(gè)定理良好的內(nèi)部編程接口,同時(shí)完全隱藏了設(shè)備的工作細(xì)節(jié)。用戶(hù)操作通過(guò)一組標(biāo)準(zhǔn)化的調(diào)用完成,而這些調(diào)用是和特定的驅(qū)動(dòng)程序無(wú)關(guān)的[8]。將這些調(diào)用映射到作用于實(shí)際硬件的設(shè)備特定的操作上,則是設(shè)備驅(qū)動(dòng)程序的任務(wù)。這個(gè)編程接口能夠使得驅(qū)動(dòng)程序獨(dú)立于內(nèi)核的其他部分而建立,在需要的時(shí)候,可在運(yùn)行時(shí)“插入”內(nèi)核。這種模塊化的特點(diǎn),使得Linux驅(qū)動(dòng)程序的編寫(xiě)非常簡(jiǎn)單,目前已有幾百個(gè)驅(qū)動(dòng)程序可用。3.1嵌入式Linux設(shè)備驅(qū)動(dòng)程序簡(jiǎn)介3.1.1設(shè)備驅(qū)動(dòng)程序組成在UNIX系統(tǒng)里,對(duì)用戶(hù)程序而言,設(shè)備驅(qū)動(dòng)程序隱藏了設(shè)備的具體細(xì)節(jié),對(duì)各種不同設(shè)備提供了一致的接口,一般來(lái)說(shuō)是把設(shè)備映射為一個(gè)特殊的設(shè)備文件,用戶(hù)程序可以像對(duì)其它文件一樣對(duì)此設(shè)備文件進(jìn)行操作[9]。UNIX對(duì)硬件設(shè)備支持兩個(gè)標(biāo)準(zhǔn)接口:塊特別設(shè)備文件和字符特別設(shè)備文件,通過(guò)塊(字符)特別設(shè)備文件存取的設(shè)備稱(chēng)為塊(字符)設(shè)備或具有塊(字符)設(shè)備接口。塊設(shè)備接口僅支持面向塊的I/O操作,所有I/O操作都通過(guò)在內(nèi)核地址空間中的I/O緩沖區(qū)進(jìn)行,它可以支持幾乎任意長(zhǎng)度和任意位置上的I/O請(qǐng)求,即提供隨機(jī)存取的功能[10]。設(shè)備驅(qū)動(dòng)程序可以分為三個(gè)主要組成部分:自動(dòng)配置和初始化子程序,負(fù)責(zé)檢測(cè)所要驅(qū)動(dòng)的硬件設(shè)備是否存在和是否能正常工作。如果該設(shè)備正常,則對(duì)這個(gè)設(shè)備及其相關(guān)的、設(shè)備驅(qū)動(dòng)程序需要的軟件狀態(tài)進(jìn)行初始化。這部分驅(qū)動(dòng)程序僅在初始化的時(shí)候被調(diào)用一次。服務(wù)于I/O請(qǐng)求的子程序,又稱(chēng)為驅(qū)動(dòng)程序的上半部分。調(diào)用這部分是由于系統(tǒng)調(diào)用的結(jié)果。這部分程序在執(zhí)行的時(shí)候,系統(tǒng)仍認(rèn)為是和進(jìn)行調(diào)用的進(jìn)程屬于同一個(gè)進(jìn)程,只是由用戶(hù)態(tài)變成了核心態(tài),具有進(jìn)行此系統(tǒng)調(diào)用的用戶(hù)程序的運(yùn)行環(huán)境,因此可以在其中調(diào)用sleep()等與進(jìn)程運(yùn)行環(huán)境有關(guān)的函數(shù)。中斷服務(wù)子程序,又稱(chēng)為驅(qū)動(dòng)程序的下半部分。在UNIX系統(tǒng)中,并不是直接從中斷向量表中調(diào)用設(shè)備驅(qū)動(dòng)程序的中斷服務(wù)子程序,而是由UNIX系統(tǒng)來(lái)接收硬件中斷,再由系統(tǒng)調(diào)用中斷服務(wù)子程序。中斷可以產(chǎn)生在任何一個(gè)進(jìn)程運(yùn)行的時(shí)候,因此在中斷服務(wù)程序被調(diào)用的時(shí)候,不能依賴(lài)于任何進(jìn)程的狀態(tài),也就不能調(diào)用任何與進(jìn)程運(yùn)行環(huán)境有關(guān)的函數(shù)。因?yàn)樵O(shè)備驅(qū)動(dòng)程序一般支持同一類(lèi)型的若干設(shè)備,所以一般在系統(tǒng)調(diào)用中斷服務(wù)子程序的時(shí)候,都帶有一個(gè)或多個(gè)參數(shù),以唯一標(biāo)識(shí)請(qǐng)求服務(wù)的設(shè)備。3.1.2內(nèi)核功能劃分Unix系統(tǒng)支持多進(jìn)程的并發(fā)運(yùn)行,每個(gè)進(jìn)程都請(qǐng)求系統(tǒng)資源,比如處理能力、內(nèi)存、網(wǎng)絡(luò)連接和其他一些資源。內(nèi)核(Kernel)作為大的可執(zhí)行代碼,負(fù)責(zé)處理所有這些請(qǐng)求[10]。根據(jù)內(nèi)核完成任務(wù)的不同,可將內(nèi)核功能分成如下幾部分:進(jìn)程管理:進(jìn)程管理功能負(fù)責(zé)創(chuàng)建和撤銷(xiāo)進(jìn)程以及處理它們和外部世界的連接(輸入和輸出)。不同進(jìn)程之間的通信是整個(gè)系統(tǒng)的基本功能,因此也由內(nèi)核處理。除此之外,控制進(jìn)程如何共享CPU的調(diào)度程序也是進(jìn)程管理的一部分。概括的說(shuō),內(nèi)核的進(jìn)程管理活動(dòng)就是在單個(gè)或多個(gè)CPU上實(shí)現(xiàn)對(duì)多個(gè)進(jìn)程的抽象。內(nèi)存管理:內(nèi)存是計(jì)算機(jī)的主要資源之一,用來(lái)管理內(nèi)存的策略是決定系統(tǒng)性能的一個(gè)關(guān)鍵因素。內(nèi)核在有限的可用資源上為每個(gè)進(jìn)程都創(chuàng)建了一個(gè)虛擬尋址空間。內(nèi)核的不同部分在和內(nèi)存管理子系統(tǒng)交互時(shí)使用一套相同的系統(tǒng)調(diào)用,包括從簡(jiǎn)單的malloc/free到其他一些不常用的系統(tǒng)調(diào)用。文件系統(tǒng):Unix在很大程度上依賴(lài)于文件系統(tǒng)的概念,Unix中的每個(gè)對(duì)象幾乎都可以被看作文件。內(nèi)核在沒(méi)有結(jié)構(gòu)的硬件上構(gòu)造結(jié)構(gòu)化的文件系統(tǒng),所構(gòu)造的文件系統(tǒng)抽象在整個(gè)系統(tǒng)中廣泛使用。另外Linux支持多種文件系統(tǒng)類(lèi)型,即在物理介質(zhì)上組織數(shù)據(jù)的不同方式。例如,可以把磁盤(pán)格式化為符合Linux標(biāo)準(zhǔn)的ext2文件系統(tǒng),也可格式化為常用的FAT文件系統(tǒng)。設(shè)備控制:幾乎每個(gè)系統(tǒng)操作最終都會(huì)映射到物理設(shè)備上。除了處理器、內(nèi)存以及其他很有限的幾個(gè)實(shí)體之外,所有設(shè)備控制操作都由與被控制設(shè)備相關(guān)的代碼來(lái)完成。這段代碼就叫做設(shè)備驅(qū)動(dòng)程序(devicedriver),內(nèi)核必須為系統(tǒng)中的每件外設(shè)嵌入相應(yīng)的驅(qū)動(dòng)程序,包括硬盤(pán)驅(qū)動(dòng)器、磁盤(pán)和磁帶。網(wǎng)絡(luò)功能:網(wǎng)絡(luò)功能也必須由操作系統(tǒng)來(lái)管理,因?yàn)榇蟛糠志W(wǎng)絡(luò)操作都和具體進(jìn)程無(wú)關(guān)-數(shù)據(jù)包的傳入是異步事件。在某個(gè)進(jìn)程處理這些數(shù)據(jù)包之前,數(shù)據(jù)包必須已經(jīng)被收集、標(biāo)識(shí)和分發(fā)。系統(tǒng)負(fù)責(zé)在應(yīng)用程序和網(wǎng)絡(luò)接口之間傳遞數(shù)據(jù)包,并根據(jù)網(wǎng)絡(luò)活動(dòng)控制程序的執(zhí)行。另外,所有的路由和地址解析問(wèn)題都由內(nèi)核處理。圖3-1內(nèi)核功能的劃分3.1.3設(shè)備和模塊分類(lèi)Unix系統(tǒng)將設(shè)備分成三種類(lèi)型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)接口。每個(gè)模塊通常實(shí)現(xiàn)其中一種類(lèi)型,相應(yīng)的,模塊可分為字符模塊(charmodule)、塊模塊(blockmodule)和網(wǎng)絡(luò)模塊(networkmodule)三種。三種類(lèi)型的設(shè)備如下:字符設(shè)備(characterdevice):字符設(shè)備是能夠像字節(jié)流,如文件,一樣被訪(fǎng)問(wèn)的設(shè)備,由字符設(shè)備驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)這種特性。字符設(shè)備驅(qū)動(dòng)程序通常至少需要實(shí)現(xiàn)open、close、read和write系統(tǒng)調(diào)用。字符終端(/dev/console)和串口(/dev/ttyS0以及類(lèi)似設(shè)備)就是字符設(shè)備的兩個(gè)例子,它們能夠用流抽象很好的表示。字符設(shè)備可以通過(guò)文件系統(tǒng)節(jié)點(diǎn)(如/dev/tty1和/dev/lp0等)來(lái)訪(fǎng)問(wèn),它和普通文件之間的唯一差別在于,對(duì)普通文件的訪(fǎng)問(wèn)可以前后移動(dòng)訪(fǎng)問(wèn)指針,而大多數(shù)字符設(shè)備是只能順序訪(fǎng)問(wèn)的數(shù)據(jù)通道。然而也存在和數(shù)據(jù)區(qū)特性類(lèi)似的字符設(shè)備,訪(fǎng)問(wèn)它們時(shí)可前后移動(dòng)訪(fǎng)問(wèn)指針。塊設(shè)備(blockdevice):和字符設(shè)備一樣,塊設(shè)備也是通過(guò)/dev目錄下的文件系統(tǒng)節(jié)點(diǎn)被訪(fǎng)問(wèn)的。塊設(shè)備上能夠容納文件系統(tǒng)。在大多數(shù)Unix操作系統(tǒng)中,塊設(shè)備包含整數(shù)個(gè)塊,而每塊包含1KB或2的幾次冪字節(jié)的數(shù)據(jù)。Linux允許應(yīng)用程序像字符設(shè)備那樣讀寫(xiě)塊設(shè)備,可以一次傳遞任意多字節(jié)的數(shù)據(jù)。因而,塊設(shè)備和字符設(shè)備的區(qū)別僅僅在于內(nèi)核內(nèi)部管理數(shù)據(jù)的方好似,也就是內(nèi)核和驅(qū)動(dòng)程序的接口不同。像字符設(shè)備一樣,塊設(shè)備也是通過(guò)文件系統(tǒng)節(jié)點(diǎn)被訪(fǎng)問(wèn)的,它們之間的差異對(duì)用戶(hù)來(lái)說(shuō)是透明的。塊驅(qū)動(dòng)程序除了給內(nèi)核提供和字符驅(qū)動(dòng)程序一樣的接口以外,還提供了專(zhuān)門(mén)面向塊設(shè)備的接口,不過(guò)這些接口對(duì)于那些從/dev目錄下某個(gè)目錄項(xiàng)打開(kāi)塊設(shè)備的用戶(hù)和應(yīng)用程序都是不可見(jiàn)的。另外,塊設(shè)備的接口必須支持掛裝(mount)文件系統(tǒng)。網(wǎng)絡(luò)接口(networkinterface):任何網(wǎng)絡(luò)事務(wù)都要經(jīng)過(guò)一個(gè)網(wǎng)絡(luò)接口,即一個(gè)能夠和其他主機(jī)交換數(shù)據(jù)的設(shè)備。通常接口是一個(gè)硬件設(shè)備,但也可能是一個(gè)純軟件設(shè)備,如回環(huán)接口(loopback)。網(wǎng)絡(luò)接口由內(nèi)核中的網(wǎng)絡(luò)子系統(tǒng)驅(qū)動(dòng),負(fù)責(zé)發(fā)送和接收數(shù)據(jù)包,它無(wú)須了解每項(xiàng)事務(wù)是如何映射到實(shí)際傳送的數(shù)據(jù)包的。盡管Telnet和FTP連接都是面向流的,它們都使用了同一個(gè)設(shè)備,但這個(gè)設(shè)備看到的只是數(shù)據(jù)包,而不是獨(dú)立的流。由于不是面向流的因此將網(wǎng)絡(luò)接口映射到文件系統(tǒng)中的節(jié)點(diǎn),如/dev/tty1,比較困難。Unix式的訪(fǎng)問(wèn)網(wǎng)絡(luò)接口的方法是給它們分配一個(gè)唯一的名字,但這個(gè)名字在文件系統(tǒng)中不存在對(duì)應(yīng)的幾點(diǎn)項(xiàng)。內(nèi)核和網(wǎng)絡(luò)驅(qū)動(dòng)程序間的通信完全不同于塊設(shè)備驅(qū)動(dòng)程序之間的通信,內(nèi)核調(diào)用一套和數(shù)據(jù)包傳輸相關(guān)的函數(shù),而不是read、write等。3.2字符設(shè)備驅(qū)動(dòng)程序本論文中涉及到的主要是字符設(shè)備驅(qū)動(dòng)程序。啟動(dòng)和關(guān)閉設(shè)備必須調(diào)用open和release方法;當(dāng)PC上的應(yīng)用程序通過(guò)網(wǎng)口發(fā)送大批數(shù)據(jù)到PXA255處理器上時(shí),處理器必須先調(diào)用poll和select方法將數(shù)據(jù)緩存下來(lái),然后通知內(nèi)核去讀取數(shù)據(jù),這就要使用到ioctl方法和write方法;當(dāng)數(shù)據(jù)處理完畢后通知內(nèi)核將數(shù)據(jù)取出時(shí)要調(diào)用read方法。驅(qū)動(dòng)程序是PXA255處理器正常工作的基礎(chǔ),對(duì)于本論文的具體應(yīng)用將會(huì)在第五章中給出。字符設(shè)備接口支持面向字符的I/O操作,它不經(jīng)過(guò)系統(tǒng)的快速緩存,所以它們負(fù)責(zé)管理自己的緩沖區(qū)結(jié)構(gòu)。字符設(shè)備接口只支持順序存取的功能,一般不能進(jìn)行任意長(zhǎng)度的I/O請(qǐng)求,而是限制I/O請(qǐng)求的長(zhǎng)度必須是設(shè)備要求的基本塊長(zhǎng)的倍數(shù)。設(shè)備由一個(gè)主設(shè)備號(hào)和一個(gè)次設(shè)備號(hào)標(biāo)識(shí)。主設(shè)備號(hào)唯一標(biāo)識(shí)了設(shè)備類(lèi)型,即設(shè)備驅(qū)動(dòng)程序類(lèi)型,它是塊設(shè)備表或字符設(shè)備表中設(shè)備表項(xiàng)的索引。次設(shè)備號(hào)僅由設(shè)備驅(qū)動(dòng)程序解釋?zhuān)话阌糜谧R(shí)別在若干可能的硬件設(shè)備中,I/O請(qǐng)求所涉及到的那個(gè)設(shè)備。3.2.1字符設(shè)備驅(qū)動(dòng)原理scull(SimpleCharacterUtilityforLoadingLocalities)[11]是一個(gè)操作內(nèi)存區(qū)域的字符設(shè)備驅(qū)動(dòng)程序,這片內(nèi)存區(qū)域被當(dāng)作一個(gè)設(shè)備。scull的優(yōu)點(diǎn)在于它不和硬件相關(guān),因?yàn)槊颗_(tái)計(jì)算機(jī)都有內(nèi)存。scull只是操作某些內(nèi)存,通過(guò)kmalloc分配。Scull源代碼實(shí)現(xiàn)了下列設(shè)備,將由模塊實(shí)現(xiàn)的每種設(shè)備稱(chēng)作一種“類(lèi)型(type)”:scull0-scull3:4個(gè)設(shè)備保護(hù)了4片內(nèi)存區(qū),都是全局性的和持久性的?!叭中浴笔侵?,如果打開(kāi)設(shè)備多次,所有打開(kāi)它的文件描述符共享其中的數(shù)據(jù)?!俺志眯浴笔侵福绻O(shè)備關(guān)閉后再次打開(kāi),數(shù)據(jù)不丟失。由于可以使用常用命令訪(fǎng)問(wèn)這個(gè)設(shè)備,如cp,cat以及shellI/O重定向等。scullpipe0-scullpipe3:4個(gè)“FIFO”設(shè)備,操作起來(lái)有點(diǎn)像管道。一個(gè)進(jìn)程讀取另一個(gè)進(jìn)程寫(xiě)入的數(shù)據(jù)。如果有多個(gè)進(jìn)程讀同一個(gè)設(shè)備,他們彼此間競(jìng)爭(zhēng)數(shù)據(jù)。通過(guò)scullpipe的內(nèi)部結(jié)構(gòu)可以了解阻塞型和非阻塞型讀/寫(xiě)是如何實(shí)現(xiàn)的;沒(méi)有中斷也會(huì)出現(xiàn)這樣的情況。盡管真實(shí)的驅(qū)動(dòng)程序利用中斷與它們的設(shè)備同步,但阻塞型和非阻塞型操作是非常重要的內(nèi)容,從概念上講與中斷處理無(wú)關(guān)。scullsingle、scullpriv、sculluid、scullwuid:這些設(shè)備與scull0相似,但在何時(shí)允許open操作時(shí)都不同方式的限制。第一個(gè)(scullsingle)只允許一次一個(gè)進(jìn)程使用驅(qū)動(dòng)程序,而scullpriv對(duì)每個(gè)虛擬控制臺(tái)是私有的(每個(gè)設(shè)備對(duì)虛擬控制臺(tái)是私有的)。sculluid和scullwuid可以多次打開(kāi),但每次只能有一個(gè)用戶(hù);如果另一個(gè)用戶(hù)鎖住了設(shè)備,前者返回-EBUSY,而后者則實(shí)現(xiàn)為阻塞型open。通過(guò)這些可以展示如何實(shí)現(xiàn)不同的訪(fǎng)問(wèn)策略。主設(shè)備號(hào)標(biāo)識(shí)設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序,內(nèi)核利用主設(shè)備號(hào)將設(shè)備與相應(yīng)的驅(qū)動(dòng)程序?qū)?yīng)起來(lái)。次設(shè)備號(hào)只由設(shè)備驅(qū)動(dòng)程序使用;內(nèi)核的其他部分不使用它,僅將它傳遞給驅(qū)動(dòng)程序。一個(gè)驅(qū)動(dòng)程序控制若干個(gè)設(shè)備并不為奇(如上面的例子所示)次設(shè)備號(hào)提供了一種區(qū)分它們的方法。3.2.2open和release方法open方法提高給驅(qū)動(dòng)程序以初始化的能力,從而為以后的操作做準(zhǔn)備[11,12]。此外,open一般還會(huì)遞增設(shè)備的使用計(jì)數(shù),防止在文件關(guān)閉前模塊被卸載出內(nèi)核。這個(gè)計(jì)數(shù)值在release方法中被遞減。在驅(qū)動(dòng)程序中open應(yīng)完成如下工作:遞增使用計(jì)數(shù)。檢查設(shè)備特定的錯(cuò)誤,如設(shè)備未就緒或類(lèi)似的硬件問(wèn)題。如果設(shè)備是首次打開(kāi),則對(duì)其進(jìn)行初始化。識(shí)別次設(shè)備號(hào),并且如果有必要,更新f_op指針。分配并填寫(xiě)被置于filp->private_data里的數(shù)據(jù)結(jié)構(gòu)。release方法的作用正好與open相反,在驅(qū)動(dòng)程序中應(yīng)完成如下工作:釋放由open分配的、保存在filp->private_data中的所有內(nèi)容。在最后一次關(guān)閉操作時(shí)關(guān)閉設(shè)備。使用計(jì)數(shù)減1。3.2.3read和write方法讀/寫(xiě)方法完成的任務(wù)是相似的,拷貝數(shù)據(jù)到應(yīng)用程序空間或從應(yīng)用程序空間拷貝數(shù)據(jù)。因此它們的原型很像:ssize_tread(structfile*filp,char*buff,size_tcount,loff_t*offp),ssize_tread(structfile*filp,char*buff,size_tcount,loff_t*offp)。對(duì)于這兩個(gè)方法,參數(shù)filp是文件指針,參數(shù)count是請(qǐng)求傳輸?shù)臄?shù)據(jù)長(zhǎng)度,參數(shù)buff是指向用戶(hù)空間的緩沖區(qū),這個(gè)緩沖區(qū)或者保存將寫(xiě)入的數(shù)據(jù),或者是一個(gè)存放新讀入數(shù)據(jù)的空緩沖區(qū),最后的offp是一個(gè)指向“l(fā)ongoffsettype”對(duì)象的指針,這個(gè)對(duì)象指明用戶(hù)在文件中進(jìn)行存取操作的位置,返回值是“signedsizetype”。關(guān)于數(shù)據(jù)傳輸,和這兩個(gè)設(shè)備方法相關(guān)的主要問(wèn)題是,需要在內(nèi)核地址空間和用戶(hù)地址空間傳輸數(shù)據(jù),不能用通常的辦法利用指針或memcpy來(lái)完成這樣的操作。內(nèi)核空間和用戶(hù)空間地址之間很大的一個(gè)差異就是,用戶(hù)空間的內(nèi)存是可被換出的。當(dāng)內(nèi)核訪(fǎng)問(wèn)用戶(hù)空間指針時(shí),向?qū)?yīng)的頁(yè)面可能已不在內(nèi)存中了,這樣就會(huì)產(chǎn)生一個(gè)頁(yè)面失效。scull的read和write代碼要做的工作,就時(shí)在用戶(hù)地址空間和內(nèi)核地址空間之間進(jìn)行整段數(shù)據(jù)的拷貝,這種能力是由下面的內(nèi)核函數(shù)提供的,也是每個(gè)read和write方法實(shí)現(xiàn)的核心部分:unsignedlongcopy_to_user(void*to,constvoid*from,unsignedlongcount),unsignedlongcopy_from_user(void*to,constvoid*from,unsignedlongcount)。這兩個(gè)函數(shù)的作用并不限于在內(nèi)核空間和用戶(hù)空間之間拷貝數(shù)據(jù),它們還檢查用戶(hù)空間的指針是否有效。如果指針無(wú)效,就不會(huì)進(jìn)行拷貝;另一方面,如果在拷貝過(guò)程中遇到無(wú)效地址,則僅僅會(huì)賦值部分?jǐn)?shù)據(jù)。在這兩種情況下,返回值是還未拷貝完的內(nèi)存的數(shù)量值。scull代碼如果發(fā)現(xiàn)這樣的錯(cuò)誤返回,就會(huì)在返回值不為0時(shí),返回-EFAULT給用戶(hù)。3.2.4poll和select方法使用非阻塞型I/O的應(yīng)用程序也經(jīng)常使用poll和select系統(tǒng)調(diào)用。poll和select的功能本質(zhì)上是一樣的:都允許進(jìn)程決定是否可以對(duì)一個(gè)或多個(gè)打開(kāi)的文件做非阻塞的讀或?qū)?。因此它們常常用于那些要使用多個(gè)輸入或輸出流而又不會(huì)阻塞于其中任何一個(gè)流的應(yīng)用程序中。同一功能之所以要由兩個(gè)單獨(dú)的函數(shù)分別提供,是因?yàn)樗鼈儙缀跏峭瑫r(shí)在兩個(gè)不同的Unix團(tuán)體中分別實(shí)現(xiàn)的:select由BSDUnix實(shí)現(xiàn),而poll由SystemV實(shí)現(xiàn)。poll方法可用來(lái)實(shí)現(xiàn)poll和select系統(tǒng)調(diào)用,它的原型如下:unsignedint(*poll)(structfile*,poll_table*):該驅(qū)動(dòng)方法在用戶(hù)空間程序執(zhí)行poll或select系統(tǒng)調(diào)用時(shí)被調(diào)用,包括傳遞一個(gè)與設(shè)備相關(guān)的文件描述符。設(shè)備方法分兩步處理:一是在一個(gè)或多個(gè)指明了poll狀態(tài)變化的等待隊(duì)列上調(diào)用poll_wait;二是返回一個(gè)用來(lái)描述操作是否可以立即無(wú)阻塞執(zhí)行的位掩碼。傳遞給poll方法的第二個(gè)參數(shù),poll_table結(jié)構(gòu),用于在內(nèi)核中實(shí)現(xiàn)poll和select系統(tǒng)調(diào)用。它在<linux/poll.h>中聲明,驅(qū)動(dòng)程序代碼必須包含這個(gè)頭文件。它被傳遞給驅(qū)動(dòng)程序方法,以使每個(gè)可以喚醒進(jìn)程和修改poll操作狀態(tài)的事件隊(duì)列都可以被加入poll_table結(jié)構(gòu)中,這通過(guò)調(diào)用函數(shù)poll_wait來(lái)完成:voidpoll_wait(structfile*,wait_queue_head_t*,poll_table*)poll和select與read、write的交互:poll和select調(diào)用的目的是事先判斷是否有I/O操作會(huì)阻塞。從這個(gè)方面說(shuō),它時(shí)對(duì)read和write的補(bǔ)充。poll和select的更重要的用途是可以讓驅(qū)動(dòng)程序同時(shí)等待多個(gè)數(shù)據(jù)流,poll和select在這方面也時(shí)很有用途的。3.2.5ioctl方法在用戶(hù)空間內(nèi)調(diào)用ioctl函數(shù)的原型大致如下:intioctl(intfd,intcmd,…):由于使用了一連串的“.”的緣故,該原型在Unix系統(tǒng)調(diào)用列表之中非常突出,這些點(diǎn)代表可變數(shù)目參數(shù)。但是在實(shí)際系統(tǒng)中,系統(tǒng)調(diào)用實(shí)際上不會(huì)有可變數(shù)目個(gè)參數(shù)。因此,ioctl的第3個(gè)參數(shù)事實(shí)上只是一個(gè)可選參數(shù),這里用點(diǎn)只是為了在編譯時(shí)防止編譯器進(jìn)行類(lèi)型檢查。第3個(gè)參數(shù)的具體情況與要完成的控制命令(第2個(gè)參數(shù))有關(guān)。某些命令不需要參數(shù),某些需要一個(gè)整數(shù)做參數(shù),而某些則需要一個(gè)指針參數(shù)。使用指針通常是可以用來(lái)向ioctl傳遞任意數(shù)目數(shù)據(jù);設(shè)備可以從用戶(hù)空間接收任意大小的數(shù)據(jù)。另一方面,設(shè)備驅(qū)動(dòng)程序得ioctl方法的原型如下:int(*ioctl)(structinode*inode,structfile*filp,unsignedintcmd,unsignedlongarg):inode和filp指針是根據(jù)應(yīng)用程序傳遞的文件描述符fd計(jì)算而得的,與read和write的用法一致。參數(shù)cmd不經(jīng)修改地傳遞給驅(qū)動(dòng)程序,可選的arg參數(shù)無(wú)論是指針還是整數(shù)值,它都以u(píng)nsignedlong的形式傳遞給驅(qū)動(dòng)程序。如果調(diào)用程序沒(méi)有傳遞第3個(gè)參數(shù),驅(qū)動(dòng)程序所接收的arg沒(méi)有任何意義。3.3本章小結(jié)本章的主要內(nèi)容是嵌入式Linux設(shè)備驅(qū)動(dòng)原理[13],首先介紹了嵌入式設(shè)備驅(qū)動(dòng)程序的組成和硬件支持的標(biāo)準(zhǔn)接口,然后講解了Linux內(nèi)核功能的劃分,然后介紹了內(nèi)核的設(shè)備和模塊分類(lèi),其中字符設(shè)備是本文所用到的設(shè)備驅(qū)動(dòng)的重點(diǎn)。最后一小節(jié)詳細(xì)的介紹了字符設(shè)備驅(qū)動(dòng)程序,從字符設(shè)備驅(qū)動(dòng)原理開(kāi)始介紹,接下來(lái)分別介紹了open和release方法、read和write方法、poll和select方法以及ioctl方法。這些方法是驅(qū)動(dòng)程序的基礎(chǔ)。最后介紹了本論文中處理器的驅(qū)動(dòng)函數(shù)的流程圖。
4硬件方案介紹綜合項(xiàng)目設(shè)計(jì)要求,硬件方案設(shè)計(jì)如圖4-1所示。硬件平臺(tái)包括CPU(X-SCALE)及其相關(guān)外設(shè)包括(Flash、SDRAM和Ethernet)、FPGA(StratixII系列)、DA和AD以及晶圖4-1硬件方案圖振和電源裝置。對(duì)應(yīng)前面功能要求,基帶信號(hào)收發(fā)處理算法在FPGA[14]中實(shí)現(xiàn),頻譜感知算法在FPGA和X-SCALE中聯(lián)合實(shí)現(xiàn)[15,16],組網(wǎng)控制在X-SCALE實(shí)現(xiàn)。這里需要提出的是,我們的協(xié)議是基于現(xiàn)有的硬件平臺(tái)的,而我們的設(shè)計(jì)與實(shí)現(xiàn)工作主要集中在MAC層的接口協(xié)議上,所以這里對(duì)硬件的設(shè)計(jì)方案僅是做一個(gè)簡(jiǎn)單的介紹。4.1器件選擇FPGA采用ALTERA公司StratixII系列高性能FPGAEP2S90F1020/EP2S180F1020,容量達(dá)600萬(wàn)門(mén)內(nèi)部自帶12個(gè)高性能PLL;CPU采用Intel公司PXA255AOC400,X-SCALE芯片其主頻達(dá)到400MHz;ADC采用AnalogDevice公司AD9238,位寬12位、最高速度65MSPS;DAC采用AnalogDevice公司AD9767,位寬14位、最高速度125MSPS;晶振采用高精度溫度補(bǔ)償晶振,其誤差在1ppm之內(nèi);電源采用MAX1623,它是一款高效開(kāi)關(guān)電源,降低硬件平臺(tái)功耗;射頻部分工作頻段:336~344MHz,一共8MHz,間隔2MHz為1個(gè)頻段,實(shí)行動(dòng)態(tài)頻譜接入,工作過(guò)程中可以通過(guò)FPGA的測(cè)試口對(duì)其進(jìn)行配置,實(shí)現(xiàn)靈活的頻點(diǎn)切換。4.2硬件實(shí)現(xiàn)平臺(tái)根據(jù)以上設(shè)計(jì)方案,經(jīng)過(guò)PCB制版,焊接和調(diào)試得到硬件實(shí)現(xiàn)的通用軟件無(wú)線(xiàn)電平臺(tái)(GeneralSoftwareRadioPlatform1GSRP),如下圖4-2所示。該平臺(tái)使用了StratixII,EP2S180F1020C圖4-2通用軟件無(wú)線(xiàn)電平臺(tái)這一平臺(tái)可以作為認(rèn)知無(wú)線(xiàn)電網(wǎng)絡(luò)中的單個(gè)接入單位,后續(xù)頻譜感知和自適應(yīng)混合調(diào)制解調(diào)算法均在該平臺(tái)上實(shí)現(xiàn)。4.3本章小結(jié)本章主要討論了硬件方案的設(shè)計(jì)與實(shí)現(xiàn),包括設(shè)計(jì)要求并給出設(shè)計(jì)方案,選擇器件最后制版調(diào)試實(shí)現(xiàn)硬件平臺(tái)。
5MAC層接口協(xié)議的具體設(shè)計(jì)與實(shí)現(xiàn)5.1MAC層協(xié)議基本框架5.1.1演示場(chǎng)景和實(shí)現(xiàn)目標(biāo)在演示的過(guò)程中,將以點(diǎn)對(duì)點(diǎn)傳輸作為測(cè)試的基本場(chǎng)景,以實(shí)時(shí)視頻流作為演示的主要業(yè)務(wù)載體。為了表現(xiàn)多模式混合波形調(diào)制認(rèn)知無(wú)線(xiàn)電平臺(tái)(以下簡(jiǎn)稱(chēng)平臺(tái))的多模式混合波形調(diào)制特性,以及認(rèn)知無(wú)線(xiàn)電特性,在點(diǎn)對(duì)點(diǎn)的傳輸過(guò)程中,將以一個(gè)信號(hào)發(fā)生器作為干擾源,在平臺(tái)所支持的頻段上隨機(jī)的發(fā)送干擾信號(hào)。平臺(tái)必須能夠?qū)ν獠康母蓴_情況進(jìn)行實(shí)時(shí)分析,并立即做出相應(yīng)的調(diào)整策略,而策略的目標(biāo)值主要是各節(jié)點(diǎn)所工作的中頻位置f,所占用的帶寬w,以及傳輸模式m,這三個(gè)值所組成的集合簡(jiǎn)稱(chēng)為傳輸參數(shù)[17,18]。而在平臺(tái)對(duì)上述目標(biāo)值進(jìn)行動(dòng)態(tài)調(diào)整的時(shí)候,還必須保證上層業(yè)務(wù)能夠持續(xù)傳輸,盡量不受干擾。尤其對(duì)于實(shí)時(shí)的視頻流,可以通過(guò)改變幀率的方式來(lái)達(dá)到改變傳輸速率的效果,從而和底層的傳輸能力相匹配。例如,在平臺(tái)上,當(dāng)采用CPM模式,以幾十Kbps的速率進(jìn)行傳輸時(shí),可以指導(dǎo)上層將幀率調(diào)整為2,而當(dāng)采用OFDM或者QAM模式,在數(shù)百Kbps的速率下進(jìn)行傳輸時(shí),則可以指導(dǎo)上層將幀率調(diào)整為20甚至更高??傊?,為了滿(mǎn)足以上的演示需求,MAC層達(dá)到以下的實(shí)現(xiàn)目標(biāo)[18]:a.能夠?qū)崟r(shí)的從FPGA獲得信噪比(S)以及頻譜感知結(jié)果(C)等信息,并根據(jù)這些信息選取最合適的傳輸參數(shù),來(lái)指導(dǎo)物理層的調(diào)制解調(diào)過(guò)程。為此必須在物理層和MAC層之間建立合理的接口,并在MAC層建立合理的信息反饋機(jī)制。b.必須始終保持收發(fā)節(jié)點(diǎn)的載波同步,同時(shí)還要體現(xiàn)出收端決策的特點(diǎn)。c.必須能夠和上層建立合理的接口并設(shè)計(jì)相應(yīng)的處理流程來(lái)自適應(yīng)底層傳輸能力的變化。5.1.2MAC層基本工作原理為了實(shí)現(xiàn)上文所制定的目標(biāo),并考慮到平臺(tái)的處理能力以及各種機(jī)制的實(shí)現(xiàn)復(fù)雜度,在本平臺(tái)上將建立一個(gè)公共信道(fc)作為傳輸參數(shù)的溝通信道,同時(shí)該信道也能夠保證各節(jié)點(diǎn)能夠始終保持傳輸同步(此時(shí)必須保證該信道在實(shí)現(xiàn)的過(guò)程中始終不受干擾,即該頻道為授權(quán)的)[18]。節(jié)點(diǎn)間的數(shù)據(jù)傳輸分為同步和傳輸兩個(gè)階段。在同步階段,各節(jié)點(diǎn)在fc上通過(guò)RTS1-CTS1-ACK1的方式進(jìn)行溝通,這些數(shù)據(jù)都將采用直擴(kuò)的方式作為調(diào)制方式,以保證傳輸?shù)姆€(wěn)定性。節(jié)點(diǎn)A在需要發(fā)送數(shù)據(jù)包之前,首先必須在fc上向目標(biāo)節(jié)點(diǎn)B發(fā)送RTS1數(shù)據(jù)包,該數(shù)據(jù)包中包含了節(jié)點(diǎn)A當(dāng)前所獲得的頻譜感知結(jié)果C;接收節(jié)點(diǎn)B在收到RTS1后,將其中的C與本節(jié)點(diǎn)的C信息進(jìn)行合并,并根據(jù)該結(jié)果決定本次傳輸所使用的中頻f,以及帶寬w,同時(shí)將這兩個(gè)信息通過(guò)CTS1包反饋給A;A在收到該信息后,對(duì)該結(jié)果進(jìn)行確認(rèn),如果覺(jué)得可以支持該中頻及帶寬,則在反饋的ACK信息中確認(rèn)開(kāi)始傳輸,否則拒絕連接,并重新開(kāi)始同步過(guò)程。當(dāng)節(jié)點(diǎn)A,B完成同步以后,則可以在預(yù)定的中頻f上開(kāi)始數(shù)據(jù)傳輸。此時(shí),節(jié)點(diǎn)A、B都將中頻設(shè)為f。節(jié)點(diǎn)A向節(jié)點(diǎn)B發(fā)送RTS2數(shù)據(jù)包(該數(shù)據(jù)包由于較短,依然調(diào)制在直擴(kuò)頭中),節(jié)點(diǎn)B回應(yīng)CTS2數(shù)據(jù)包(直擴(kuò)調(diào)制),節(jié)點(diǎn)A接著就可以發(fā)送數(shù)據(jù)包DAT,最終節(jié)點(diǎn)B傳輸確認(rèn)數(shù)據(jù)包ACK2。DAT數(shù)據(jù)包的調(diào)制方式在一開(kāi)始的時(shí)候采用默認(rèn)值,一般為比較穩(wěn)定的CPM方式或者BPSK方式。當(dāng)節(jié)點(diǎn)B根據(jù)接收的數(shù)據(jù)統(tǒng)計(jì)出接收信噪比S以后,則B點(diǎn)根據(jù)該值來(lái)選定比較合適的傳輸模式,并將模式信息通過(guò)ACK2數(shù)據(jù)包或者下次同步過(guò)程時(shí)的CTS1數(shù)據(jù)包反饋給A,A由此來(lái)設(shè)定自身在傳輸DAT數(shù)據(jù)包時(shí)所采用的模式。當(dāng)節(jié)點(diǎn)A在一定時(shí)間(T1)內(nèi)未收到CTS2數(shù)據(jù)包,或者B在T1內(nèi)未收到RTS2數(shù)據(jù)包,則在T1超時(shí)后返回到公共信道fc,重新等待進(jìn)行同步。當(dāng)節(jié)點(diǎn)A未收到ACK2數(shù)據(jù)包,或者ACK2數(shù)據(jù)包告知數(shù)據(jù)錯(cuò)誤時(shí),要對(duì)剛才的DAT信息進(jìn)行重傳。而由于傳輸模式、傳輸帶寬等參數(shù)會(huì)隨著外界環(huán)境的不同而不斷變化,因此為了保證對(duì)上層的業(yè)務(wù)傳輸不產(chǎn)生影響,MAC層還必須和上層建立一個(gè)接口來(lái)指導(dǎo)上層的傳輸流量。在本平臺(tái)上,將主要通過(guò)反饋傳輸模式以及拒絕訪(fǎng)問(wèn)這兩個(gè)途徑達(dá)到目標(biāo)。反饋傳輸模式是指MAC層為應(yīng)用層提供IOCTL接口來(lái)告知當(dāng)前的傳輸參數(shù),上層由此確定當(dāng)前的傳輸能力,并由此來(lái)控制業(yè)務(wù)的平均速率。而拒絕訪(fǎng)問(wèn)則是指MAC層將根據(jù)當(dāng)前發(fā)送緩沖區(qū)的長(zhǎng)度來(lái)決定是否繼續(xù)接受發(fā)送數(shù)據(jù),如果長(zhǎng)度超過(guò)一定門(mén)限,則拒絕上層繼續(xù)發(fā)送數(shù)據(jù),上層在收到該拒絕訪(fǎng)問(wèn)信息后,則必須考慮來(lái)控制自身的平均速率。一般來(lái)講,拒絕訪(fǎng)問(wèn)機(jī)制可以逐步降低上層的傳輸速率;而反饋傳輸模式機(jī)制則可以使上層快速的改變傳輸模式(無(wú)論使得傳輸速率變大或者變小)。5.2FPGA與XScale接口5.2.1收發(fā)端與XScale的接口與地址FPGA與XScale的GPIO接口說(shuō)明表5-1FPGA與Xscale接口說(shuō)明代碼中函數(shù)所用GPIO功能描述備注ResetFPGA()(GPIO22)FPGA復(fù)位信號(hào)inform_FPGA_read()(GPIO21)CPU通知FPGA開(kāi)始讀數(shù)據(jù)信號(hào)保證FPGA上次數(shù)據(jù)已處理完,即進(jìn)入send_irq中斷inform_FPGA_change_if()(GPIO23)通知FPGA切換中頻中頻信息(32bits)要提前寫(xiě)入ADDR_INTER_FREQsend_irq(中斷腳)(GPIO19)FPGA通知CPU數(shù)據(jù)已發(fā)送注意:此兩個(gè)中斷的意義read_irq(中斷腳)(GPIO20)FPGA接收到數(shù)據(jù),通知CPU處理start_FPGA_sense()(GPIO70)CPU通知FPGA開(kāi)始感知RAM2中的數(shù)據(jù)信息感知期間發(fā)射機(jī)不工作,所需時(shí)間約為10ms,結(jié)果為1024bitsRAM地址說(shuō)明表5-2RAM地址說(shuō)明代碼中宏定義RAM地址功能描述備注ADDR_SEND_RAM_MODE0xf4000000配置FPGA發(fā)送模式ADDR_SEND_RAM_DATA0xf400000cFPGA發(fā)送數(shù)據(jù)地址ADDR_READ_RAM1_START0xf4010000FPGA讀取RAM1中72bit的模式信息頭24*3=72bit為控制信號(hào),ADDR_READ_RAM1_DATA0xf401000cFPGA讀取RAM1中的數(shù)據(jù)信息ADDR_READ_RAM2_START0xf4020210FPGA讀取RAM2中72bit的模式信息24*3=72bitADDR_READ_RAM2_DATA0xf402021cFPGA讀取RAM2中的數(shù)據(jù)信息ADDR_SENSING_RESULT 0xf4030400FPGA存放感知結(jié)果ADDR_INTER_FREQ0xf4040000FPGA存放中頻ADDR_SNR0xf4040010FPGA存放SNR5.2.2收發(fā)端幀格式與字段說(shuō)明send_ram與Xscale的接口:data:發(fā)送的控制信號(hào)和數(shù)據(jù),頭24*3=72bit為控制信號(hào),每一種模式各24bit,24bit中的數(shù)據(jù)長(zhǎng)度字段以bit為單位。中間補(bǔ)24bit的0以便于對(duì)齊(建議去掉以提高傳輸效率)。后面則是要發(fā)送的數(shù)據(jù)。send_all_over:發(fā)送結(jié)束信號(hào),為脈沖信號(hào)。 (GPIO19)每一種模式的24bit幀信息格式如圖5-1所示: 圖5-124bit幀信息格式其中各字段的意義分別為:MOD(1:2): 00::OFDM01:QAM10:CPM11:Preamble(PN)其他:下一模式為空,結(jié)束接收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):表示下一種傳輸模式發(fā)送數(shù)據(jù)的比特?cái)?shù)。發(fā)送短幀時(shí),數(shù)據(jù)長(zhǎng)度信息和數(shù)據(jù)存儲(chǔ)在發(fā)送的數(shù)據(jù)段內(nèi),數(shù)據(jù)長(zhǎng)度為8bit,單位為byte。單獨(dú)增加一個(gè)RAM24bit,第一個(gè)比特為長(zhǎng)短幀模式指示信號(hào),0為短幀,1為長(zhǎng)幀;第二個(gè)比特指示選擇公共信號(hào)或是數(shù)據(jù)信道,0為公共信道,1為數(shù)據(jù)信道;6bit指示中頻信號(hào),數(shù)據(jù)范圍為0-63,其中31對(duì)應(yīng)10.7Mhz,步進(jìn)為90Khz;后16比特保留。Channel_mod:公共信道數(shù)據(jù)信道狀態(tài)指示,低電平為公共信道,高電平為數(shù)據(jù)信道,當(dāng)為數(shù)據(jù)信道時(shí),需要配置中頻信號(hào)。(GPIO23,必須確認(rèn)該io口是否可用)recv_ram與XScale的接口:recv_all_over:一整幀接收完成信號(hào)(GPIO20)。ram_recv_rden:讀取RAM的使能信號(hào); count_recving:讀取RAM的地址信號(hào); 起始地址: 0xf4010000 0xf4020210ram_rd_data:RAM輸出的數(shù)據(jù)。增加一個(gè)信號(hào)來(lái)指示捕獲到直擴(kuò)頭,以減少碰撞概率:0xf4030004(最低位)頭上加2byte的數(shù)據(jù)長(zhǎng)度信息,以byte為單位。圖5-2recv_ram與Xscale接口使能信號(hào)SNR和頻譜感知的接口:SNR為5bit數(shù),在一幀結(jié)束時(shí)輸出:實(shí)際為8bit的后5bit。用RAM來(lái)讀。 0xf4040010(低5位) 圖5-3SNR信息譜感知結(jié)果sensing_result:譜感知結(jié)果sensing_result為1024bit,也在一幀結(jié)束時(shí)輸出:起始地址:0xf4030400用RAM來(lái)讀。每bit表示相應(yīng)頻道是否處于空閑狀態(tài)。1表示被占用,0表示空閑。 圖5-4sensing_result信息5.3數(shù)據(jù)包結(jié)構(gòu)定義由于演示中僅需進(jìn)行點(diǎn)對(duì)點(diǎn)的傳輸,因此在協(xié)議上相對(duì)簡(jiǎn)單,僅需要RTS1、CTS1、ACK1、RTS2、CTS2、DAT、ACK2這7種數(shù)據(jù)包即可,同時(shí)不需要引入地址概念。數(shù)據(jù)包結(jié)構(gòu)包括:前導(dǎo)頭(固定為0x157e)、包類(lèi)型(type4bit)、包長(zhǎng)(len14bit)、數(shù)據(jù)部分(Data)以及校驗(yàn)位(checksum16bit)。數(shù)據(jù)包分成DATA包(DAT和RTS1),和非DATA包的兩類(lèi),根據(jù)兩類(lèi)包的區(qū)別,采用了不一樣的包結(jié)構(gòu)。DATA包,主要的信息包含在Payload段,數(shù)據(jù)長(zhǎng)度也會(huì)達(dá)到1600Byte的長(zhǎng)度。而非DATA包來(lái)說(shuō),所包含的信息主要是為了同步、消息的傳遞的作用,所以長(zhǎng)度比較短。在采用校驗(yàn)方式時(shí),利用checksum()來(lái)對(duì)重要信息進(jìn)行校驗(yàn),防止數(shù)據(jù)在傳輸過(guò)程中的誤碼。DATA包時(shí),因?yàn)閿?shù)據(jù)長(zhǎng)度比較長(zhǎng),所以從效率上考慮,對(duì)前32bits進(jìn)行了校驗(yàn)和運(yùn)算。非DATA包時(shí),對(duì)整個(gè)信息進(jìn)行了校驗(yàn)和運(yùn)算。5.3.1控制包RTS1(0x1):傳輸頻譜感知信息,payload部分共1024bits。雙方交互此消息后,能夠得出傳輸模式。和射頻信道的值。Type=0x1;Len=128+6+2;因?yàn)镃PU與FPGA的連接方式,只能以4Byte的方式往FPGA的RAM里邊拷貝數(shù)據(jù),所以會(huì)多出Resvered這兩個(gè)字節(jié)的多余。CTS1(0x2):主要傳輸頻率信息(8bit),模式信息(8bits)以及帶寬信息(16bits)。此消息由接收端來(lái)發(fā)出,接收端根據(jù)發(fā)送端的RTS1信息,并且和自己感知結(jié)果對(duì)比,而得出這三個(gè)參數(shù)。接收端收到CTS1后,根據(jù)這些參數(shù)來(lái)發(fā)送數(shù)據(jù),如圖5-5所示。ACK1(0x3):主要傳輸發(fā)送節(jié)點(diǎn)是否接受接收節(jié)點(diǎn)所設(shè)定的傳輸參數(shù)。共16bit,前8bit表示是否同意傳輸,后8bit作為傳輸失敗原因使用,暫時(shí)保留;考慮到可能有誤碼存在,定義當(dāng)且僅當(dāng)大于等于4bit信息為1時(shí)表示同意傳輸,否則表示不同意傳輸,如圖5-6所示。RTS2(0x4):主要傳輸用于同步,沒(méi)有實(shí)際的傳輸字段。RTS2的發(fā)送是在切換的頻率信道上的,目的是為了驗(yàn)證此信道能正常收發(fā)數(shù)據(jù)。字段HaveDataSend表示發(fā)送端是否有數(shù)據(jù)要發(fā)送,當(dāng)HaveDataSend=1時(shí),表示有數(shù)據(jù)要發(fā)送,對(duì)方收到后也返回CTS2(1),接著就開(kāi)始傳送DAT包。當(dāng)HaveDataSend=1時(shí),表示此包只是用于保持連接,對(duì)方發(fā)送CTS2(0),雙方繼續(xù)傳輸RTS2(0)->CTS2(0)->RTS2(0)->CTS2(0)…(前提是不考慮能量的消耗),如圖5-7所示。CTS2(0x5):主要用于應(yīng)答RTS2,不包含傳輸模式信息,如圖5-8所示。ACK2(0x7):主要用于判斷節(jié)點(diǎn)是否正確收到數(shù)據(jù),共16bit,正確接收與否同ACK1的表示方式;后8bit包含下次傳輸?shù)慕邮栈虬l(fā)送狀態(tài)信息,BS優(yōu)先級(jí)高于SS,當(dāng)BS有控制信息需要發(fā)送時(shí),將在ACK2的后8bit中包含信息通知SS,在下一次發(fā)送時(shí)BS優(yōu)先發(fā)送,如圖5-9所示。圖5-5CTS1控制包圖5-6ACK1控制包圖5-7RTS2控制包圖5-8CTS2控制包 圖5-9ACK2控制包5.3.2數(shù)據(jù)包DAT(0x6):主要用于傳輸數(shù)據(jù),其長(zhǎng)度信息以及需要的數(shù)據(jù)已經(jīng)包含在直擴(kuò)頭的前96bit當(dāng)中,如圖5-10所示。圖5-10 DAT數(shù)據(jù)包5.4協(xié)議具體流程及實(shí)現(xiàn)細(xì)節(jié)MAC層傳輸協(xié)議的數(shù)據(jù)傳輸流程示意圖和MAC層協(xié)議保持連接流程示意圖分別如圖5-11和圖5-12所示:圖5-11MAC層協(xié)議數(shù)據(jù)傳輸流程示意圖圖5-12MAC層協(xié)議保持連接流程示意圖節(jié)點(diǎn)間數(shù)據(jù)傳輸?shù)幕驹硪呀?jīng)在第二部分中進(jìn)行了介紹。本節(jié)主要就協(xié)議流程中的一些細(xì)節(jié)進(jìn)行介紹:5.4.1傳輸時(shí)隙劃分由于采用RTS-CTS握手的方式進(jìn)行傳輸,因此并不需要進(jìn)行嚴(yán)格的時(shí)隙設(shè)定;而是在控制信道上通過(guò)RTS競(jìng)爭(zhēng)來(lái)獲取溝通機(jī)會(huì),并在后續(xù)的數(shù)據(jù)傳輸階段進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)傳輸?shù)拈L(zhǎng)度最大值限制以物理幀格式中的限制為準(zhǔn),并可以隨意設(shè)定,同時(shí)DAT傳輸階段甚至可以考慮傳輸若干個(gè)混合波形調(diào)制幀[21,22]來(lái)提高整體的傳輸效率(尤其在僅存在點(diǎn)對(duì)點(diǎn)傳輸?shù)膱?chǎng)景下,可以著重對(duì)該情況進(jìn)行考慮)。而當(dāng)一次傳輸過(guò)程(包含同步及數(shù)據(jù)傳輸階段)完成以后,A、B節(jié)點(diǎn)可以根據(jù)自己發(fā)送隊(duì)列內(nèi)是否有數(shù)據(jù)需要傳輸,來(lái)選擇是否在下一個(gè)數(shù)據(jù)階段進(jìn)行數(shù)據(jù)傳輸。由此引入了競(jìng)爭(zhēng)的問(wèn)題,可通過(guò)退避算法來(lái)解決,但這樣會(huì)使得進(jìn)入下一個(gè)傳輸階段的同步過(guò)程前有較大的沖突解決等待時(shí)間。而為了提高傳輸效率,在點(diǎn)對(duì)點(diǎn)傳輸?shù)那闆r下,接收端B可以在數(shù)據(jù)傳輸階段的CTS2信息中向A提出要求,要求在下一個(gè)傳輸階段能夠發(fā)送數(shù)據(jù),A可以在DAT包中對(duì)此信息進(jìn)行回應(yīng),而節(jié)點(diǎn)B則在ACK2數(shù)據(jù)包中做最后的確認(rèn)。5.4.2節(jié)點(diǎn)狀態(tài)每個(gè)節(jié)點(diǎn)可以分為發(fā)送(TRANS),接收及感知(RECV&SENGSING),以及感知(SENSING)這三個(gè)狀態(tài)。TRANS態(tài)主要用來(lái)發(fā)送數(shù)據(jù)。節(jié)點(diǎn)進(jìn)入TRANS態(tài)后,將進(jìn)行數(shù)據(jù)傳輸,對(duì)于DAT以及除DAT以外的數(shù)據(jù)包,分兩種情況進(jìn)行傳輸:傳輸DAT數(shù)據(jù)包時(shí),MAC層根據(jù)當(dāng)前所支持的傳輸模式、符號(hào)率,來(lái)決定當(dāng)前幀所能傳輸?shù)淖畲箝L(zhǎng)度(由物理層各模式所支持的最大傳輸長(zhǎng)度所決定)。我們?cè)诖a中定義節(jié)點(diǎn)狀態(tài)機(jī)(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軟件實(shí)現(xiàn)中,將STATE_IDLE、STATE_RECV_RTS1、及感知狀態(tài)合并成一個(gè)狀態(tài),并且將“發(fā)送狀態(tài)”都作為了“過(guò)渡態(tài)”,直接進(jìn)入下一個(gè)RECV狀態(tài)。對(duì)于一個(gè)物理幀中的三種模式,在一般情況下可以采用同一種模式來(lái)進(jìn)行傳輸;而當(dāng)DAT包中有部分?jǐn)?shù)據(jù)對(duì)傳輸質(zhì)量的要求比較高時(shí),則根據(jù)其數(shù)據(jù)量,將其中的一種甚至三種模式設(shè)置為SNR要求更低的傳輸模式。最后則將所選擇的三種模式的相關(guān)信息填入到三個(gè)模式字段中。當(dāng)需要傳輸?shù)臄?shù)據(jù)量較少時(shí),則可以將相應(yīng)的數(shù)據(jù)長(zhǎng)度縮短即可(目前的做法)。當(dāng)考慮到傳輸開(kāi)銷(xiāo)時(shí),建議在傳輸數(shù)據(jù)較少時(shí),只利用一種模式進(jìn)行傳輸,如圖5-13所示。圖5-13DAT包傳輸
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度住宅小區(qū)停車(chē)位使用權(quán)租賃及管理服務(wù)合同4篇
- 2025年度綜合物流樞紐承包經(jīng)營(yíng)權(quán)合同匯編4篇
- 二零二五年度智能城市大數(shù)據(jù)服務(wù)提供協(xié)議范本3篇
- 2025年度模具制造行業(yè)人才培訓(xùn)與輸送合同4篇
- 二零二五年度廁所節(jié)水裝置研發(fā)與推廣合同樣本3篇
- 2025年度車(chē)隊(duì)駕駛員勞動(dòng)合同電子化管理規(guī)范4篇
- 甲乙雙方關(guān)于房產(chǎn)抵債的2025年度協(xié)議3篇
- 2025版零擔(dān)運(yùn)輸貨物損壞賠償協(xié)議4篇
- 2025版司機(jī)貨物配送安全責(zé)任合同范本3篇
- 2025年新型城鎮(zhèn)化示范項(xiàng)目聯(lián)合體EPC協(xié)議書(shū)模板3篇
- 2024-2030年中國(guó)護(hù)肝解酒市場(chǎng)營(yíng)銷(xiāo)策略分析與未來(lái)銷(xiāo)售渠道調(diào)研研究報(bào)告
- 人教版高中數(shù)學(xué)必修二《第十章 概率》單元同步練習(xí)及答案
- 智慧校園信息化建設(shè)項(xiàng)目組織人員安排方案
- 浙教版七年級(jí)上冊(cè)數(shù)學(xué)第4章代數(shù)式單元測(cè)試卷(含答案)
- 一病一品成果護(hù)理匯報(bào)
- AQ-T 1009-2021礦山救護(hù)隊(duì)標(biāo)準(zhǔn)化考核規(guī)范
- 鹽酸??颂婺崤R床療效、不良反應(yīng)與藥代動(dòng)力學(xué)的相關(guān)性分析的開(kāi)題報(bào)告
- 消防設(shè)施安全檢查表
- 組合結(jié)構(gòu)設(shè)計(jì)原理 第2版 課件 第6、7章 鋼-混凝土組合梁、鋼-混凝土組合剪力墻
- 建筑公司資質(zhì)常識(shí)培訓(xùn)課件
- GB/T 26316-2023市場(chǎng)、民意和社會(huì)調(diào)查(包括洞察與數(shù)據(jù)分析)術(shù)語(yǔ)和服務(wù)要求
評(píng)論
0/150
提交評(píng)論