存儲方案研究與實(shí)現(xiàn)_第1頁
存儲方案研究與實(shí)現(xiàn)_第2頁
存儲方案研究與實(shí)現(xiàn)_第3頁
存儲方案研究與實(shí)現(xiàn)_第4頁
存儲方案研究與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

漸提高,而D漸提高,而D系統(tǒng)、電子書籍、及其它消費(fèi)型電子設(shè)備的既成行業(yè)標(biāo)準(zhǔn)。SD技術(shù)應(yīng)用在約400上,涵蓋數(shù)十種產(chǎn)品類別,超過8000種機(jī)型針對采用ARM系列主控制器和帶有嵌入式實(shí)時(shí)操作系統(tǒng)lIC/os—II的類型產(chǎn)品,設(shè)計(jì)了一種基于三星公司的$3C2440A的SD存儲解決方案,硬件方面利用$3C2440A帶有的SPI控制功能接口與SD卡模塊相連接,從而實(shí)現(xiàn)對標(biāo)準(zhǔn)SD卡接口的功能擴(kuò)展在軟件方面,將c/os—II移植到了$3C2440A之上,同時(shí)分析了laC/OS-II的內(nèi)管理方法,并對其內(nèi)存控制塊數(shù)據(jù)結(jié)構(gòu)進(jìn)行了修改,利用雙向鏈表方式組織內(nèi)存區(qū)控制塊,增加了內(nèi)存分區(qū)的分割、釋放以及合并的功能。然后根據(jù)D協(xié)議編寫了D動程序,完成了容量為2G的SD卡的讀寫操作,并建立了一個(gè)小型的FATl6管理系統(tǒng),負(fù)責(zé)管理存入卡內(nèi)部的數(shù)據(jù),可以實(shí)現(xiàn)建立文件,打開關(guān)閉功能,并可以根關(guān)鍵字:SD卡ofincreasinglyforstoragecardsarethefutureofinnovative,alwaysevolvingdi舀talworld.SDmemorycardsdeliverhigh-allowareliable,easy—to·usequicklycaptureSDtechnologyisthede-factoindustrystandardformobilephones,di.gltalplayers,personalcomputers,printers,carnavigationotherconsumerelectronicdevices.SDtechnologyisusedinsome400productsofincreasinglyforstoragecardsarethefutureofinnovative,alwaysevolvingdi舀talworld.SDmemorycardsdeliverhigh-allowareliable,easy—to·usequicklycaptureSDtechnologyisthede-factoindustrystandardformobilephones,di.gltalplayers,personalcomputers,printers,carnavigationotherconsumerelectronicdevices.SDtechnologyisusedinsome400productsacrossandinmoreofproductcardsare standardhigh-varietyofspeedclasses.Anext-generationSDsoontocreatecardsmembersdevicesfasterperformancesupportitsgreaterhavethe expandfarintothehostcontrollerandreal-ToARMattermsasolutionbasedhardware,connectthe$3C2440AinternalcontrolfunctionsSPlwithSDachievethestandardSDexpansioncardinterfacemodulesinorderOnthesoftwareside,completedthe#C/OS-IIontothecontrolblock the/zC/OS-memorymanagementmethods,andthemakeuseofdoublelinklisttoincreasestructurememorycarddriverseparatedthefunctionsofthereleaseaswellthetoread-ofdata,createfileaswellasopenorshutdownfunction.DocumentCandataWasdisplayedonthelast,the 學(xué)位論文作者簽名學(xué)位論文作者簽名匆’年月日選題背隨著手機(jī)、數(shù)碼相機(jī)、數(shù)碼攝像機(jī)、電子辭典等眾多數(shù)碼產(chǎn)品的不斷普及,與它們選題背隨著手機(jī)、數(shù)碼相機(jī)、數(shù)碼攝像機(jī)、電子辭典等眾多數(shù)碼產(chǎn)品的不斷普及,與它們息息相關(guān)的信息存儲設(shè)備也受到了消費(fèi)者越來越多地關(guān)注,而SD低、高可靠性、可擦寫、非易失性等優(yōu)點(diǎn)成為其中最為閃亮的主流存儲媒介之一,同時(shí),用SDDigitalMemoryCard)是由日本松下、東芝和美國的SanDisk公988SD2m3mX21mSnikMCutlvCl0603uAD9本(SD、miniSD、microSD)、大容量版本(SDHC、miniSDHC、microSDHC)、和SDIO卡。minimicroSDminiSDiSD斛j斛j薰蘭200710SDHC(SDHighCapacity術(shù)出現(xiàn)了,它的容量范圍從GB至G8,開發(fā)人員能選擇指定有保證最低數(shù)據(jù)速率的三種數(shù)據(jù)寫入速度,sD協(xié)會針對標(biāo)準(zhǔn)卡與太容量卡以及兩種主機(jī)產(chǎn)品的最低數(shù)據(jù)傳輸,制定了新的規(guī)格分繳。有了新的速度等級規(guī)格,主機(jī)產(chǎn)品就能檢查卡中的零碎狀態(tài),井計(jì)算卡中每個(gè)部分的寫入速度。因此,主機(jī)可根據(jù)速度需求,確定要在哪里寫入數(shù)據(jù)。三種SHC速度等級(等級2、等級4、等級6)每秒分別可傳輸至少2MB、MB、MB的432G類產(chǎn)品在2008年上半年開始問市“1另外,sD標(biāo)準(zhǔn)有很大的彈性.在具體應(yīng)用中,sDOODiii萬言㈡占圈。。i萬言㈡占圈。。sD卡及后續(xù)的DC目前已經(jīng)成了數(shù)碼產(chǎn)品中實(shí)質(zhì)上的通用標(biāo)準(zhǔn)?,F(xiàn)在,其推廣者希望擴(kuò)展D卡的使用范圍。D卡協(xié)會)于8年9月1日在美國加里福尼亞圣拉蒙宣布了嵌入式D標(biāo)準(zhǔn),在同年1月正式進(jìn)入嵌入式存儲市場。應(yīng)用該標(biāo)準(zhǔn),手機(jī)、數(shù)碼產(chǎn)品甚至各種輸入輸出外設(shè)在需要內(nèi)置存儲空間時(shí),都可以直接使用標(biāo)準(zhǔn)的DC接口規(guī)范,嵌入最高B閃存。再通過傳統(tǒng)的外置D卡接口,還可繼續(xù)增加8的C卡移動存儲。嵌入式D手持設(shè)備和消費(fèi)電子設(shè)備市場需求,為大容量的嵌入式數(shù)據(jù)存儲和快速處理提供了新的J。D?。DD起到一定的軟件復(fù)用的作用本設(shè)計(jì)方案的硬件平臺基于ARMs3c2440a微處理器,軟件方面采用實(shí)時(shí)嵌入式操作統(tǒng)uC/OS-II,針對該系列的SD卡應(yīng)用設(shè)計(jì)并編寫了SD驅(qū)動程序,完成了數(shù)據(jù)讀寫機(jī)對lIC/OS-II的內(nèi)存管理機(jī)$,J2n完成了基于arm主控制器和嵌入式實(shí)時(shí)操作系統(tǒng)c/os—II上的SD功能實(shí)現(xiàn)本設(shè)計(jì)方案的硬件平臺基于ARMs3c2440a微處理器,軟件方面采用實(shí)時(shí)嵌入式操作統(tǒng)uC/OS-II,針對該系列的SD卡應(yīng)用設(shè)計(jì)并編寫了SD驅(qū)動程序,完成了數(shù)據(jù)讀寫機(jī)對lIC/OS-II的內(nèi)存管理機(jī)$,J2n完成了基于arm主控制器和嵌入式實(shí)時(shí)操作系統(tǒng)c/os—II上的SD功能實(shí)現(xiàn)O/OS-II操作系統(tǒng)的移2時(shí)操作系統(tǒng)。它的前身是uC/oS,最早出自于1992年美國嵌入式系統(tǒng)專家Labrosse在《嵌入式系統(tǒng)編程》雜志的5月和6月刊上刊登的文章連載,并把uc/os源碼發(fā)布在該雜志的BBS上c/os—II的CPU硬件相關(guān)部分是用匯編語言編寫的,總量約200行的匯編語言分被壓縮到最低限度,為的是便于移植到任何一種其它的CPU上。用戶只要的ANSI的C交叉編譯器,匯編器、連接器等軟件工具,就可以將|lc/os—II嵌入產(chǎn)品中。IlC/os—II具有執(zhí)行效率高、占用空間小、實(shí)時(shí)性能優(yōu)良和擴(kuò)展性強(qiáng)等特點(diǎn)最小內(nèi)核可編譯至2KB。lic/os—II已經(jīng)移植到了眾多知名的CPU上u●核心部分是操作系統(tǒng)的處理核心,包括操作系統(tǒng)初始化、操作系統(tǒng)運(yùn)行、中斷進(jìn)出的前時(shí)鐘節(jié)拍、任務(wù)調(diào)度、事件處理等多部分。能夠維持系統(tǒng)基本工作的部分都在這里●任務(wù)處理部分起、恢復(fù)等等。因?yàn)?4要●時(shí)鐘部分完成的要●時(shí)鐘部分完成的●與CPU的接口是指C/os—II針對所使用的CPU的移植部分。由于IJc/osii是一個(gè)通用性的作系統(tǒng),所以對于關(guān)鍵問題上的實(shí)現(xiàn),還是需要根據(jù)具體PU的移植。這部分內(nèi)容由于牽涉到SP等系統(tǒng)指針,所以通常用匯編語言編寫口1。主要包括中斷級任務(wù)切換的底層實(shí)現(xiàn)、任務(wù)級任務(wù)切換的底層實(shí)現(xiàn)、時(shí)鐘節(jié)拍的產(chǎn)生和處理、中的具體方法口1由于嵌入式領(lǐng)域可選用的處理器種類繁多,且分為了多種體系結(jié)構(gòu),各自有不同的微處理器或微控制器上運(yùn)行起來。這個(gè)過程就是移植。由于CuC/SIC只有與處理器相關(guān)的代碼需要使用匯編語言來重新實(shí)現(xiàn)。uc/osii正常運(yùn)點(diǎn)要求:處理器的C編譯器能產(chǎn)生可重入代碼:用CP堆?;騼?nèi)存中的指令口1。圖2—1說明了uC/0S-II的結(jié)構(gòu)以及它和硬件的關(guān)系5os一?一一一一?一麗軟件一一一os一?一一一一?一麗軟件一一一一一一一一一[二二二二[二][圖2—c/os-II硬件和軟件體系結(jié)由上圖可知,移植的工作之需要修改三個(gè)文件,這三個(gè)文件都是與處理器的緊密相關(guān)的,它們的作用是把編寫四個(gè)匯編語言函數(shù)(OS—CPU—A.ASM)2.2.1、重定義與編譯器相關(guān)的數(shù)據(jù)類c/os-ii的移植包括一系列的數(shù)據(jù)類型的2.2.2、編寫相應(yīng)編譯器的開關(guān)中斷函與所有的實(shí)時(shí)內(nèi)核一樣c/os—II需要在訪問臨界區(qū)之前先禁止中斷,并且在uc/os—II能夠保護(hù)臨界區(qū)免受其它任務(wù)或中斷服務(wù)程序C編譯器必須要有一定的機(jī)制來直接從C中執(zhí)行這些操作。有些編譯器能夠允許在C源6CodeWarriorfor2.2.3、定定義任務(wù)堆棧的數(shù)據(jù)類型是通過為S-K任務(wù)堆棧都必須用0SjTKMCodeWarriorfor2.2.3、定定義任務(wù)堆棧的數(shù)據(jù)類型是通過為S-K任務(wù)堆棧都必須用0SjTKM typedefGROWTH中指定堆棧的生長方式就可以了置OS—STKGROWTH為0表示堆棧從下往上增置OS—STK—GROWTH為l表示堆棧從上往下增長口2.2.5修改文件0-PC.C中移植時(shí)的主要函數(shù)是OTstknt(),即系統(tǒng)任務(wù)的初始化操作,其他函數(shù)均為操作系統(tǒng)擴(kuò)展的鉤子函數(shù),是為用戶提供擴(kuò)展功能的函數(shù),這些函在任務(wù)創(chuàng)建函數(shù))和初始化函數(shù)OSTaskStknt()來實(shí)現(xiàn)任務(wù)堆棧結(jié)構(gòu)的初始化操作,因此,堆??雌饋砭拖駝偘l(fā)生過中斷并將所有的寄存器保存到堆棧中的情形一樣。函數(shù)中rO--lr是MOS_CPU—該文件除了實(shí)現(xiàn)OSCPUSaveSR0和OSCPURestoreSR(cpu—sr)兩個(gè)函數(shù)外,還包括了啟動最高優(yōu)先級任務(wù)的函數(shù)voidOSStartHighRdy(),中斷中的任務(wù)切換函數(shù)OSIntCtxSw0和任務(wù)切換函數(shù)voiOSCtxSw0當(dāng) 7|lCOS-IISeUCOSIRQHandler函數(shù)中實(shí)現(xiàn)。l|lCOS-IISeUCOSIRQHandler函數(shù)中實(shí)現(xiàn)。lCSI202.3對內(nèi)存管理方法的修改2.3.1“C/OS-II在uC/OS-II中,操作系統(tǒng)把連續(xù)的大塊內(nèi)存按分區(qū)來管理。每個(gè)分區(qū)中包含有整個(gè)大小相同的內(nèi)存塊,分區(qū)的大小可以不同,但最大分區(qū)數(shù)量需要事先規(guī)定好,為了于內(nèi)存的管理,在 controlblock)1內(nèi)哆Q=嫩一卿曼蜮夏曼曼關(guān)妻賽毒Q曼M皂嬲摁民!鼉蜘取Q圖2-2.uC/OS-ll當(dāng)任務(wù)向已建立的內(nèi)存分區(qū)申請一個(gè)內(nèi)存塊時(shí),系統(tǒng)把空閑內(nèi)存塊的第一塊分配給任務(wù),同時(shí)把t鏈表中刪除1:當(dāng)任務(wù)不再使用該內(nèi)存塊時(shí),要及時(shí)將它釋放并放回到相應(yīng)的內(nèi)存分區(qū)中。此時(shí),把此內(nèi)存塊插入空閑內(nèi)存塊的前面,這時(shí)內(nèi)存控制塊的met域指H1一些問題:8 由于內(nèi)存控制塊數(shù)據(jù)結(jié)構(gòu)及其鏈表結(jié)構(gòu)和指針OSMemFreeList也內(nèi)存區(qū)建立之前需要由用戶定義全局 由于內(nèi)存控制塊數(shù)據(jù)結(jié)構(gòu)及其鏈表結(jié)構(gòu)和指針OSMemFreeList也內(nèi)存區(qū)建立之前需要由用戶定義全局?jǐn)?shù)組以給出數(shù)組首地址、及兩個(gè)下標(biāo)最大值表內(nèi)存管理混亂,這為用戶應(yīng)用帶來了不便。c/os—II屬于靜態(tài)內(nèi)存分配,要求用戶事先制訂好內(nèi)存分區(qū)計(jì)劃,創(chuàng)建屬于自制。提供給用戶程序的函數(shù)原型,而將內(nèi)存區(qū)控制塊的數(shù)據(jù)結(jié)構(gòu)具體內(nèi)容定義,自由內(nèi)控制塊指針FreLst定義,內(nèi)存區(qū)控制塊鏈表數(shù)組的定義都放到具體接口實(shí)現(xiàn)文件中,stt變量。安全性能得到提高structINT32U一一一一一一一一一一mem.C一一一一一一一#define //記錄分區(qū)尺void水pIleaLstpFePrit9e2-3小分區(qū)限定,或者已經(jīng)沒有空閑內(nèi)存區(qū)控制塊可用時(shí),就不進(jìn)行分割,而是根據(jù)選定分Mem*pFreeParLiinte2-3小分區(qū)限定,或者已經(jīng)沒有空閑內(nèi)存區(qū)控制塊可用時(shí),就不進(jìn)行分割,而是根據(jù)選定分Mem*pFreeParLiintMemCreate(const 按最小適配法找到合適分區(qū)沒有則返回{(//不分{修改自由內(nèi)存區(qū)控制塊鏈表//分)成一片,如果確實(shí)如此,則合并內(nèi)存區(qū);否則,僅僅是將新釋放的內(nèi)存區(qū)鏈接到自由內(nèi)存區(qū)供下次分配比較使用。{if(無地址相等內(nèi)存區(qū) if(無地址相等內(nèi)存區(qū) 執(zhí)行前向合并內(nèi)存區(qū)頭回收到空閑頭鏈表中if(無二次合并返回3SD卡可以采用SD總線訪問,也可以采用SPI器都有SPI接口而沒有SD總線接口,所以使用微控制器的SPI接口訪問SD卡是很方便的,而且如果采用I/O口模擬DSD強(qiáng)%‰SClnpSelect(Ne窯Data34567IS089圖3-SD卡的物理結(jié)構(gòu)及引腳功【9【9CD寄存器是一個(gè)8位寬的寄存器,它包含在卡的廠商和版本等信息,驅(qū)動程序CID,這是由生產(chǎn)商在生產(chǎn)時(shí)就已定義好了x4SDSDCardOperatilnactildleStacardidentificationldentildentifiTransferdatatFansferSending一St趕Di圖3—2SD及其狀態(tài)的操作SPI總線連接的兩端設(shè)備有主從之分,主控芯片稱為主設(shè)備,而SD對SD卡的操作控制都是SD卡的主控芯片通過對SPI信基于命令和數(shù)據(jù)的比特流。其中,命令和數(shù)據(jù)的第一位是起始位,最后一位是停止位。SPI總線連接的兩端設(shè)備有主從之分,主控芯片稱為主設(shè)備,而SD對SD卡的操作控制都是SD卡的主控芯片通過對SPI信基于命令和數(shù)據(jù)的比特流。其中,命令和數(shù)據(jù)的第一位是起始位,最后一位是停止位。 in)、數(shù)據(jù)輸出out)n01面,因此,還需要額外的三根通用I/O引腳來滿足該需要,卡檢測電路中,檢測信號由卡座的引腳以電平方式輸出,當(dāng)卡插入到卡座并插入到位時(shí),ET由于卡座內(nèi)部觸點(diǎn)連接到ND,它輸出低電平,當(dāng)卡排出時(shí),該引腳由于上拉電阻2圖3— DD化狀態(tài)和正常數(shù)據(jù)傳輸狀態(tài)所需的頻率是不同的,而且不同的SD卡的正常工作的最頻率也不相制器,數(shù)據(jù)讀寫緩沖器,中斷控制器和AMBA[6]總線接口模塊來實(shí)現(xiàn)上述的功能n¨33sⅡ卡的時(shí)鐘3.3bus)上A33sⅡ卡的時(shí)鐘3.3bus)上A?D5z因此sD卡時(shí)鐘需要對APB時(shí)鐘進(jìn)行分頻。sD卡初始化模式下時(shí)鐘頻率不能超過400HZ,在正常工作模式下時(shí)鐘頻率不能超過MZ這SD時(shí)鐘,時(shí)鐘的開關(guān)也由驅(qū)動軟件設(shè)置““17MulliMtdiaCard圖3-3.3sDPDDsn存儲i案的研究與喜Bit【4540辟9Isn存儲i案的研究與喜Bit【4540辟9I6卜h0圖3—3等3在卡識別模式之前,需要進(jìn)行一系列的硬件鏈路設(shè)置,設(shè)置好后主機(jī)上電并等待74個(gè)時(shí)鐘周期,發(fā)送O命令重啟D卡,它是一種軟件啟動方式,并且同時(shí)s線拉低,該命令發(fā)送成功后,卡將進(jìn)入到IdeStte待下一個(gè)命令的起始位,此時(shí)需要向卡發(fā)送命令CMI以激活卡的初始化進(jìn)程,最后D0R卡進(jìn)入電源及CS線引腳設(shè)上時(shí)鐘和數(shù)據(jù)線連接上卡狀態(tài)檢電源及CS線引腳設(shè)上時(shí)鐘和數(shù)據(jù)線連接上卡狀態(tài)檢測和時(shí)鐘審74個(gè)時(shí)鐘延工上◆NpY上修改時(shí)鐘頻上設(shè)置數(shù)據(jù)塊J圖3-6SD//置POWER為低電/,IcCS弓l//置POWER為低電/,IcCS弓lSDLMOIIOP這幾個(gè)引腳多功能引腳,因此初始化必須進(jìn)行如下的功能選擇設(shè)置/牢SCK弓l腳SPI—SPI—rGPECON&=’(Ox03<<26)//設(shè)置SCK口為GPIO0//設(shè)置SCK.}每引腳水rGPECON&=’(Ox03<<22)//設(shè)置MISO口為GPIO//設(shè)置MISO=’(Ox03<<24)//設(shè)置MOSI口為GPIOSPI_MOSI_oUTSDSD_INSERT_GPIO()rGPFCON&=’(Ox03<<2)//設(shè)置INSERT口為口=’(Ox03<<24)//設(shè)置MOSI口為GPIOSPI_MOSI_oUTSDSD_INSERT_GPIO()rGPFCON&=’(Ox03<<2)//設(shè)置INSERT口為口SD0P主機(jī)發(fā)送的命令O后,還需要向其發(fā)送l進(jìn)入卡的激活階段,接著主機(jī)會繼續(xù)向8RDD卡的正常工作電壓為3.3V。電壓獲取成功后,SD卡則由ide狀態(tài)進(jìn)入Ready狀態(tài)。否則將轉(zhuǎn)入inactive狀態(tài)。繼而重新發(fā)送OZ●設(shè)置數(shù)據(jù)塊長置為512字節(jié)●獲取卡SDCSDCSD128要信息設(shè)置結(jié)構(gòu)記錄下來SD——{card—//卡中塊的數(shù)//卡的塊長度(單位置為512字節(jié)●獲取卡SDCSDCSD128要信息設(shè)置結(jié)構(gòu)記錄下來SD——{card—//卡中塊的數(shù)//卡的塊長度(單位:字節(jié)//讀塊超時(shí)時(shí)block—t//寫塊超時(shí)時(shí)//擦塊超時(shí)時(shí)3.3.3.2讀卡操tlln蠹,?。/一Dat鑫·n-··[:;;圄一:,一?乙·∥·-?‘to—host二適當(dāng)—d/ {jji自。ata。ut?.,,.:.:。。雩7.;:..允許,即CSD寄存器參量的read—bl—fen為1時(shí),塊長度可以在1和最大塊尺寸之間個(gè)唯一的物理卡片扇區(qū)內(nèi)SD纛蠹o(jì)mr.a(chǎn)ra協(xié)ho C翻餅n螄d個(gè)唯一的物理卡片扇區(qū)內(nèi)SD纛蠹o(jì)mr.a(chǎn)ra協(xié)ho C翻餅n螄d蠢ca蚊rddamData¨Dataout····一-·-··●讀卡操作的執(zhí)行過程如下if(SD{SDSD—ERR—NO—)i}SD_SendCmd(INT8Ucmd,INT8U*param,INT8U(INT32SPI—CS—SPI—SendByte((cmd&Ox3F)I//根據(jù)不同的命令,得到不同的響應(yīng)長{casecasecasedefaulSPI—CS—DeassertSD_ERR_CMI)_RESPTYPE://返回命令響應(yīng)類型錯(cuò)//循環(huán)的最后發(fā)送//根據(jù)不同的命令,得到不同的響應(yīng)長{casecasecasedefaulSPI—CS—DeassertSD_ERR_CMI)_RESPTYPE://返回命令響應(yīng)類型錯(cuò)//循環(huán)的最后發(fā)送SPI—CS—SD-N0一CSSPI個(gè)取出,送入相應(yīng)緩沖區(qū)SD—{//拉低CS線準(zhǔn)備接收數(shù)SPI—CS—{tmp=SPI—recbuf[i]=SPI—RecByte()://接收數(shù))3.3.3.3寫卡操)3.3.3.3寫卡操SDDr_ptl每個(gè)數(shù)據(jù)塊有一個(gè)一字節(jié)大小的前綴開始塊,在數(shù)據(jù)塊被接收之后,SD響應(yīng)標(biāo)志響應(yīng),如果數(shù)據(jù)塊被接收并且沒有任何錯(cuò)誤,它將被編程,只要D目的,一旦編程操作完成,主機(jī)必須使用ts命令,亦即M3來檢查編程的一的合法性檢查執(zhí)行在數(shù)據(jù)塊上并且通過數(shù)據(jù)響應(yīng)標(biāo)志傳達(dá)給主機(jī)的是C寫入錯(cuò)誤提示,在多個(gè)數(shù)據(jù)塊的寫操作時(shí),在下個(gè)數(shù)據(jù)塊的開始時(shí)中止通信將被看作“停止"標(biāo)志代替“開始’’標(biāo)志[11]o在寫入錯(cuò)誤信號的情況下,主機(jī)將使用dumrlks式寫卡操作的具體過程如下{SD—SD_ERR—NO—)if(blockaddr>sds.block—{SD—){SD—SD_ERR—NO—)if(blockaddr>sds.block—{SD—)i}作SD._WriteBlockData(INT8Ubmulti,INT32U<SPI—CS—//發(fā)送數(shù)i{SPI—SPI—CS—//數(shù)據(jù)響應(yīng)錯(cuò))SPI—CS—Deasserti作SD._WriteBlockData(INT8Ubmulti,INT32U<SPI—CS—//發(fā)送數(shù)i{SPI—SPI—CS—//數(shù)據(jù)響應(yīng)錯(cuò))SPI—CS—Deassertif(SD_WaitBusy(SD_1似IT_WRITE)!-SD—NO—//寫入超//寫入正SD—NO—}SEND_STATUS,卡接受此命令后將返回R2狀態(tài)。它是一個(gè)16位數(shù)據(jù)。若全0則表示寫入成{SD—))至此數(shù)據(jù)寫操作完成在SD卡中存入的數(shù)據(jù)信息要按一定的規(guī)則存儲并管理,以便于之后從眾多數(shù)據(jù)中分必要,F(xiàn)T文件系統(tǒng)是從DS發(fā)展過來的一種文件系統(tǒng),其優(yōu)點(diǎn)是簡單易用,并被多種操作系統(tǒng)支持,F(xiàn)T文件系統(tǒng)名稱后的數(shù)字是標(biāo)識文件系統(tǒng)中一個(gè)FT分配單元所需的位數(shù)。而T6剩引余導(dǎo)其他目錄)至此數(shù)據(jù)寫操作完成在SD卡中存入的數(shù)據(jù)信息要按一定的規(guī)則存儲并管理,以便于之后從眾多數(shù)據(jù)中分必要,F(xiàn)T文件系統(tǒng)是從DS發(fā)展過來的一種文件系統(tǒng),其優(yōu)點(diǎn)是簡單易用,并被多種操作系統(tǒng)支持,F(xiàn)T文件系統(tǒng)名稱后的數(shù)字是標(biāo)識文件系統(tǒng)中一個(gè)FT分配單元所需的位數(shù)。而T6剩引余導(dǎo)其他目錄 根目扇區(qū)FAT文件系統(tǒng)結(jié)節(jié)移38OEM擴(kuò)展引導(dǎo)扇區(qū)代扇區(qū)結(jié)束標(biāo)識4表3-2引導(dǎo)扇區(qū)代碼區(qū)域,接下來代碼區(qū)域,接下來是廠商標(biāo)志,它是一個(gè)占八比特空間的字符串,該字符串表示所在標(biāo)準(zhǔn)的參數(shù)都在已知的位置上,磁盤容量和其它特征常量都被封存在B導(dǎo)扇區(qū)的第一部分是一個(gè)跳轉(zhuǎn)指令,因此,將來通過在PB行擴(kuò)展。參數(shù)塊中包含了分區(qū)總大小、磁盤參數(shù)等重要信息。而本文的文件系統(tǒng)部分的設(shè)計(jì)實(shí)際上是將SD卡抽象成為一個(gè)邏輯磁盤空間,在程序上把SDtypedefstruct——Di{PathClus根目錄、容,由名稱可理解其具體含意,這里不再贅述。其中每個(gè)單位長度相當(dāng)于一簇空間的大載文件系統(tǒng)的函數(shù)AddFileDriver()的流程如下圖3-11加載文件系圖3-11加載文件系統(tǒng)驅(qū)動流FAT表因?yàn)楫?dāng)分區(qū)容量較大時(shí),采用大小為512B的扇區(qū)管理會增加FAT表的項(xiàng)數(shù),對大文分區(qū)空間大每簇扇區(qū)0MB一1265MB一4129MB一8256MB一51512MB一分區(qū)空間大每簇扇區(qū)0MB一1265MB一4129MB一8256MB一51512MB一1024MB一表3—3分區(qū)大小與簇的關(guān)FTl6的引導(dǎo)扇區(qū)參數(shù)的偏移Ol處記錄了根目錄所占的扇區(qū)的數(shù)目。偏移記錄了T了。62據(jù)的處理。這之前仍以扇區(qū)為單位。對于根目錄之后的第一個(gè)簇,系統(tǒng)并不編號為第簇或第1簇,這可能是留作關(guān)鍵原因。而是編號為第22簇。FAT文件系統(tǒng)之所以有12、16、32不同的版本之分,其根本在于FAT簇鏈接的二進(jìn)制位數(shù),以FATl6為例,每一簇在FAT表中占據(jù)2字節(jié)空間,所以最大可以表示的簇號為F,即十進(jìn)制中的5,以K為簇的大小的話,它可以管理的最大磁盤空間為B木B。這就是為什么6不支持超過GB分區(qū)的原因n51的其他文件及文件夾的簇鏈情況。根據(jù)簇的表現(xiàn)情況FAT用相應(yīng)的取值來描述。見下表FATl6記錄項(xiàng)的取FFFO,--一系統(tǒng)保壞么FAT2也同樣更新‘161要一個(gè)文件結(jié)么FAT2也同樣更新‘161要一個(gè)文件結(jié)構(gòu)來記錄要打開的文件信息{}SD—其中,s代表對文件執(zhí)行的是讀操作(IEWI_LG),當(dāng)Flgs為0時(shí)表明此表項(xiàng)空閑:Drive用來表示文件所在的磁盤;Ne用于存儲被打開文件的文件名稱。Dlse、Drve和irls三個(gè)參數(shù)共同決定,不同的文件這三個(gè)參數(shù)必須有一個(gè)或者一個(gè)以上不同;FileSize和FstClus記錄文件本身的信息;Offset讀寫位打開文件的大致過程見下面的流程圖開根據(jù)文件名查找開始簇查找根目是否在該目開根據(jù)文件名查找開始簇查找根目是否在該目錄下Y查找下一簇信N是否找到Y(jié)打開對應(yīng)扇區(qū)讀取結(jié)3.4.3內(nèi)的任一文件和文件夾,均需從根目錄尋址來找到,所以說,根目錄是目錄存儲結(jié)構(gòu)的入口具體位置。T文件系統(tǒng)根據(jù)分區(qū)的引導(dǎo)扇區(qū)參數(shù)與扇區(qū)中存放的計(jì)算好的T表的大小來確定,磁盤被格式化后,根目錄的大小和位置就已經(jīng)被確定下來:它緊隨第二個(gè)文32nFAT文件系統(tǒng)中把目錄當(dāng)作一個(gè)特殊的文件來處理,在FAl6并不等同于普通的文件或者說是目錄,但其組織形式和普通的目錄并沒有不同n1。字節(jié)偏移(16進(jìn)制字節(jié)定8文件3擴(kuò)展1屬性字系統(tǒng)保字節(jié)偏移(16進(jìn)制字節(jié)定8文件3擴(kuò)展1屬性字系統(tǒng)保2224針對該目錄表的定義建立如下的結(jié)構(gòu)typedefstruct—{//文件//起始簇號高兩個(gè)字節(jié)(fat16//最后寫//最后寫//起始簇(cluster//文件大區(qū)備份該區(qū)備份該分區(qū)的引導(dǎo)扇區(qū)內(nèi)容入等待或者掛起狀態(tài),否則低優(yōu)先級任務(wù)永遠(yuǎn)也不可能得到執(zhí)行n引。因此在設(shè)計(jì)任務(wù)時(shí)系統(tǒng)首先提供了兩個(gè)主要的函數(shù):就緒態(tài)OSEvEit0表中刪除,并放到相應(yīng)事件的時(shí)間控制塊的等待任務(wù)表中n91ucoI間的通信方式有很多種,常用的有信號量、郵箱和消息隊(duì)列等,本系統(tǒng)程序設(shè)計(jì)中使用Ic/os—II的重要通信手?jǐn)啵]箱可以使一個(gè)任務(wù)或者中斷服務(wù)子程序向另一個(gè)任務(wù)發(fā)送一個(gè)指針型的變量,該指針指向一個(gè)包含了特定“消息"的數(shù)據(jù)結(jié)構(gòu)。為了在IJc/os—IIOSCFGHS_MBX-N。Mxte0事的要使用郵箱前,首先必須調(diào)用OSMbxCeae0函數(shù)創(chuàng)建郵箱,另外,對郵箱的操作還需要有OSMboxPend0和OSMoxotSMbxPnd0用于等待郵箱,如果此時(shí)該郵箱是可用的,那么函數(shù)將會返回一個(gè)E給調(diào)用它的函數(shù);如果此時(shí)的郵箱不可用,那么函數(shù)OSMboxPend0OSEventTaskWait0將這個(gè)任務(wù)放進(jìn)這個(gè)郵箱的等待隊(duì)列中,最后調(diào)用0函切換。函數(shù)OSMboxPost0此刻有任務(wù)在等待該郵箱內(nèi)容,就調(diào)用OEenTakRy()函數(shù)把任務(wù)等待隊(duì)列中優(yōu)先級最高的任務(wù)從該隊(duì)列中刪除,并使它進(jìn)入就緒狀態(tài);然后再調(diào)用OSSched0函數(shù)取出系tOSEventTaskWait0將這個(gè)任務(wù)放進(jìn)這個(gè)郵箱的等待隊(duì)列中,最后調(diào)用0函切換。函數(shù)OSMboxPost0此刻有任務(wù)在等待該郵箱內(nèi)容,就調(diào)用OEenTakRy()函數(shù)把任務(wù)等待隊(duì)列中優(yōu)先級最高的任務(wù)從該隊(duì)列中刪除,并使它進(jìn)入就緒狀態(tài);然后再調(diào)用OSSched0函數(shù)取出系t04.2該部分內(nèi)容通過向卡中寫入固定數(shù)據(jù)再讀取對比的方式來驗(yàn)證程序主 STACKSIZEOS— {//操作系統(tǒng)的初始OSTaskCreate(TaskO,(void,I=)0,&TaskStartStk[STACKSIZE一OSTaskCreate(OSFileTask,(void木)0,&TaskStk[STACKSIZE一//啟動系)/木消息隊(duì)列指針木/木建立命令隊(duì)列木FileCommad=OSQCreate(OSFi{Command=(OSFileParameter木愈令肆lif(err==OS—NO— switch(Command一{FileOpen(Command一0S—Fi=caseif(err==OS—NO— switch(Command一{FileOpen(Command一0S—Fi=case0S—FiCommand一>P2.Puin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論