




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
什么是分區管理FLASH分區管理是怎么一回事呢?我們可以以個人電腦來做類比,我們的電腦通常都分有很多個盤符:葭南(6)赳!吟:心 本世&通| Install(Ei] 舊 1 1 ——i1619GB可用.共居JOGB J153QB可目,共5010GB ~9犯1GB可月.會1對<5B 一?B9可用.上。媽心日Amjs*Orffse1(G;J (HJl?_iUK可用,It13/GE RDflNH可月.St±1JJGE這些都是我們硬盤的分區,我這里裝了兩塊硬盤,512GB的機械硬盤+128GB的固態硬盤,共分C?H六個分區,我這里的C盤和H盤是固態硬盤,其它盤符是機械硬盤:分區名存儲設備名偏移地址大小說昭1工盤"M固態硬盤”66GB系統盤-D盤""機械硬盤’50GB資料點正盤,“機械硬盤’139GB賁料盅"F盤""機械硬盤"139GB資料盤nGa"‘機械硬盤"137GB資料盤明盤”“固態硬盤”51GB軟件安裝+常用的料分區是為了方便我們對我們的資料進行管理,各個分區互不影響,比如格式化某個分區只會刪除這個分區的內容而不會影響其它分區及整個硬盤等。同樣的,在我們的STM32上也是可以進行分區管理的,這篇筆記我們來使用RT-Thread的FAL軟件包來對我STM32片內FLASH及片外FLASH的分區管理。FAL軟件包介紹FAL(FlashAbstractionLayer)Flash抽象層,是RT-Thread的一個軟件包,是對Flash及基于Flash的分區進行管理、操作的抽象層,對上層統一了Flash及分區操作的API,并具有以下特性:支持靜態可配置的分區表,并可關聯多個Flash設備;分區表支持自動裝載。避免在多固件項目,分區表被多次定義的問題;代碼精簡,對操作系統無依賴,可運行于裸機平臺,比如對資源有一定要求的bootloader;統一的操作接口。保證了文件系統、OTA、NVM等對Flash有一定依賴的組件,底層Flash驅動的可重用性;自帶基于Finsh/MSH的測試命令,可以通過Shell按字節尋址的方式操作(讀寫擦)Flash或分區,方便開發者進行調試、測試;FAL軟件包使用
本筆記主要對潘多拉開發板的FAL例程進行一次梳理,所以部分表述來自于教程文檔。我們這個實驗建立如下分區表:分區名FLA5H設備名偏移地址大小說明t-partitior11"$tm32_onchipir0384KB匚分區kd-partition1-"stm32_onchiplh384*1024128KBd分區IFe_partition""norflashOr|0512KB身分區1,f_partiCion""norfla$hOri512*10241024KBf分區rM_partiUgn”"norflashO,1(512+1024)*1024512KBg分區"h_particion"■norflashO"(512*1024*512)*10241024KBh分區1、移植接口文件說明FAL軟件包的目錄如下,其中samples文件夾下為移植接口文件:int星期一文件夾intsarrpieshsrc?|hsrc?|-gitignoreuLICENSE2018/12/262016/12/11文本文智2018門2門1星期-READIME.md2D18/12/11HW...MarkdownFil#.,-READIME.md2D18/12/11HW...MarkdownFil#.,SConscript2016/12/11星期文件名稱根立日前大小I也Ldg.hfal_flash_^fud_p<Qrt,-€fal_flash_ri:ni32#2_portc…README^mdFAL配苦文件K日—iam「交沖片外FLA5H名稱根立日前大小I也Ldg.hfal_flash_^fud_p<Qrt,-€fal_flash_ri:ni32#2_portc…README^mdFAL配苦文件K日—iam「交沖片外FLA5H接回文件(使用肝ud)片內FLASH接回文件如,移通說明[文檔卜布詳細介紹其中fal_cfg.h為fal配置文件(Flash設備配置和分區表配置)/*flashdevicetAhlc卻『i-ierine~AL_FLA5H_DE1v_TMLE3( 一一一占3tm3Zl^_onch.i|p_rLaaii1!4norflflsMOj/* 一一一一一"PartitionContinruracionEllifdefFiL_PART_HJL5_TA3LE_CFG/*par,cli:lonrabl*7tdefiner&L_PAHT_7a£iLE3( 一一(FAL_PS.RT_MJlGIC_KR.CDr\EaL[PAR]二二HR皿(frl[part二"G工匚*艮犯《EAL2PART-MAGiC2hRCDr<F“l[pART]苗息6:匚廿代口口「(EAL-pARH-kfcG二cTwRODrc_p-arzitian^p"anchip_fLaJh"Fdpar: "onaLipriasn^n334e-p-arzitlon^p工」part工七??诳谑簈_T&T:xtinnartl03ftit*白H1r.J,nQr_fLajh*R,"0.arflash^Hnor512+naar[[a四]1而,£512+1024+512)到-1C24?1Z8*1日卬512*1G24,1024*1C24hS12**1024*1C24.Qlr\口3X嘰%嘰%“『\ai?\fal是Flash抽象層,要操作Flash設備必然要將Flash的讀、寫、擦接口對接到fal抽象層中。在fal中,使用structfal_flash_dev結構體來讓用戶注冊該Flash設備的操作接口。fal_flash_dev結構體定義如下所示:
structfal_flash_devcharname[faL_otv_NAME_MA)(];/*FLASH設羿的起始地址*/ulnt32_taddr;sizetItn;/1*FLASH設齊最小蓋牙酒liiL小7size_tblk_size;structint(-lnit)(void);int("read)(longoffsetjulntE.t*bufjslz電tSizeJjint(wwriteXlcngoffset,constuintE_t*bu干,sizetszLze);int("eraie){lonEoffsetfsize_tsize);)cps;fal_flash_stm32f2_port.c為片內FLASH接口文件,這得根據實際芯片進行修改,主要是封裝讀、寫、擦除函數,例如:Bcazicirtread|langofumt&t*toufsizetBise)sizen1;uinLj2_taddr=s^m3214_onctaxp_£lasti-addr+of!sec;if(l&MT+Size)>FEA5fl_ElTO_ADDRES5)rt_k^rincf("ERROR:上星5sdnucEUG專eflash5Xze1is[D^^jXn",(void*)(addr+-^ize));return-i;k―?*hu正—■*Cuxnt-6_匕 addrlet□inszze;片內Flash對接說明:TOC\o"1-5"\h\zconststructfal_Flash_de'/stffl3214_onchip_-Flash={\"oncliip_jFlash"t \gM總g0電由電由中, \C512*1024), \2^48, \(MULL,read#write, erase) \Flash設備名稱為onchip_flash,設備容量為512K,最小擦除單元為2K,無初始化接口。fal_flash_sfud_port.c為片外FLASH接口文件,這使用SFUD萬能SPIFlash通用驅動庫來驅動。 片外NorFlash對接說明:
conststructfal_flash_devnor_flashS={"nor_flasliH,叫(16*1024*1024),4白町{fal_sfud_initjread>write#erase)Flash設備名稱為nor_flash,設備容量為16M,最小擦除單元為4K。這里使用的read、write、erase接口最終調用SFUD框架中的接口,無需用戶進行驅動開發2、fal軟件包API接口說明這里主要列舉出本實驗需要用到的API說明,其它幾個未用到的fal接口函數聲明在fal.h文件中。查找Flash設備conststructfal_flash_dev-fal_flash_device.-FindCcoristrh^r*name)參數 描述name Flash設備名稱return 如果直找成功,符返回Flash設備對象,直找失敗返回NULL查找Flash分區conststructfal_partition-fal_partition^findCconstchar±name)參數 描述name Fla5h分區名稱return 如果查找成功,將返回Flash分區對象,直找失敗返回NULL獲取分區表conststructfal_partit1an;fal_get_partition_.tableCsize_tlen)參數 描述len 分區表的長度return 分區表從分區讀取數據
inrf3l_partitiOn_rf!acl(COn!itstructfal_partition*part,uinr32_taddr,uinrf?_tbuf,sizetsize)描逑分區對象相對分區的偏移地址描逑分區對象相對分區的偏移地址存故待讀取數據的緩沖區待讀取數艇的大小返回實際讀取的數據大小往分區寫入數據intfal_partition_write(conststructfal.partition uint32_taddrhconstuint8_t*buf,size_tsije)參數 描述part 分區對象addr 相對分區的偏移地址buf 存放待寫入數據的緩沖區size 待寫入數據的大小return 返回實際寫入的數據大小擦除分區數據intfalrpartitian_era£eCcon5tstructfal-partition-part,uint32_taddrhsize_tsize)參數描述part分區對象addr相對分區的偏移地址size擦除區域的大小return返回實際擦除的區域大小2.7擦除整個分區數據
1ntfal_partition_erase_al1(conststructfal_partition*part)參數 描述part 分區對繇return 返回實際擦除的區域大小3、fal測試函數說明移植完成后,調用fal_init()初始化該庫。測試程序主函數:int.main(vcid>/*初始把FAL.岸*7£己1;八測試w分區,/if〔I己2L_t■已st[ ■二口二==0)sj.cce^3!nf"dpa.rti ;LOGIsj.cce^3!nf"dpa.rti ;elsefailed!","d—tardt■二口二");LOG_E("FaL=3Htfailed!","d—tardt■二口二");約測試f分區Vif[±己ZL_tEEt1n±_raizt±t■=口二")==0)5J.cce^5!nf ■二口二n)5J.cce^5!nf ■二口二n);failed!nfn±par-titio^nfailed!nfn±par-titio^n);:…對d分區與f分區進行讀寫測試。(1)擦除分區測試:/*擦除整個分區*/ret=fal_partition_erase_all(partition);if(ret<0)LOG_E("Partition(%s)erasefailed!",partition->name);ret=-1;returnret;LOG_I("Erase(%s)partitionfinish!",partiton_name);/*讀出分區數據并校驗*/for(i=0;i<partition->len;)(rt_memset(buf,0x00,BUF_SIZE);len=(partition->len-i)>BUF_SIZE?BUF_SIZE:(partition->len-i);ret=fal_partition_read(partition,i,buf,len);if(ret<0)(LOG_E("Partition(%s)readfailed!",partition->name);ret=-1;returnret;)for(j=0;j<len;j++)(if(buf[j]!=0xFF)(LOG_E("Theeraseoperationdidnotreallysucceed!");ret=-1;returnret;))i+=len;)擦除成功則分區內容會變成0xFF。(2)讀寫測試/*往分區寫0x00*/for(i=0;i<partition->len;)(rt_memset(buf,0x00,BUF_SIZE);len=(partition->len-i)>BUF_SIZE?BUF_SIZE:(partition->len-i);ret=fal_partition_write(partition,i,buf,len);if(ret<0)(LOG_E("Partition(%s)writefailed!",partition->name);ret=-1;returnret;)i+=len;
)LOG_I("Write(%s)partitionfinish!Writesize%d(%dK).",partiton_name,i,i/1024);/*讀取分區數據并校驗*/for(i=0;i<partition->len;)(rt_memset(buf,0xFF,BUF_SIZE);len=(partition->len-i)>BUF_SIZE?BUF_SIZE:(partition->len-i);ret=fal_partition_read(partition,i,buf,len);if(ret<0)(LOG_E("Partition(%s)readfailed!",partition->name);ret=-1;returnret;)for(j=0;j<len;j++)(if(buf[j]!=0x00)(LOG_E("Thewriteoperationdidnotreallysucceed!");ret=-1;returnret;i+=len;)讀出來的數據與寫入的數據相等則測試成功。程序運行結果:s?rtfiHTj■■曾國培6Km居H打TJILj餐的呼\if■NT-.(IXrsmoii1A口\if■NT-.(IXrsmoii1A口1[□TAL[「FU[TF4Lk;虬[IF.M.I:Fn-1[G-FiU[e.-i-al[l-l-AL[i-Fal[rF4L[eTai[T/rii[lyTa.1U-til:nsth>[.口Thr-tanOper-iringSyiLenJ-.Q.flbuildOec15守2C1WC?yrightbyrt-threjdte-sra門M◎uli-JMHtlflasheh^p-sizeU1城門216byl?.總同S3TlMh—1爐14ttal_tlash_1ra-iT:fiijrlxhd?u1c?| cncMoflashm”:田:白白83D00|Inn:加皿日|fclk_£l2?.:3MOOCiE州|1nlrlil-lzadfin[TaLTiacrLin(njtl5FlashdkMce| rarjlasli|addnoqo(mmxkmm?|ion:aMOifKXMXXi|mk_Li2CjQiOODOi(ma|lniTlillifldtmEalpjrTlrlDntable-—————-——?Inam |fl-u-h,dev|ffffsetjlengthjTjiircKlGnonchip_f]ashWCHp_T1型鼾ncf_rliiiH.hmsr_riaih仲or_TIA5hiwr_Flas-h6修曲就aOkDOIBDIXK)OkDOj-MC-ODI口罵OWb網口I。霹網之煙方|口片000日。便口*M雕6口OxOOOBCOOO0KCC*tDC<?-3nrThrseadrlash占b:5tL送工[\舊<1laverf2."ini<i-nlire51KtcU-i_Fl日死機丁F?"5口=十1整|1Flas-l-i■■■!?:; P-ArtitT.il--:.!partitlG-nFah111】口門二14七:1」IEEr*iSfrFqmiM)pJi-Xni&rtf1bl5h'mt1[fiC4_parEliTliwi)pjrcIcfionfinish'£1工6111072(1JflK).rurfTlTlDn(-tU-awclTlftnltast匚叱七口有擊1.'fal]Lrase(f_parTlx.1m]nirdrtanfinish!rtrit& portionfinish'rt-ite5-iieISMNFGQ口2目網,F-1jMftTtiuni 口「」七umt使用SHELL命令測試FAL為了方便用戶驗證fal功能是否正常,以及Flash驅動是否正確工作,分區表配置是否合理,RT-Thread為fal提供了一套測試命令:iish才fa】|1」工篇口中:干mlprobe[dev_nameIpart_rwie]falre-a<iiish才fa】|1」工篇口中:干mlprobe[dev_nameIpart_rwie]falre-a<iaddrsizef>j1hfiteihiJdrdal..daUdhlfaler-a5eaddrsizefalbench<blk^size>recLd'size'bytessrarilngar'adclrwrite3口mebytuj"data1a-tjrtingdt'jddr1erase'siz-e'bytesstartinqataddr"benchmark常由perblocksize 仁能測詁1、探測命令Serial-CflMuishalProbedamhhd"lProbedansh>d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省蘇州市XX實驗中學2025年初三下第一次階段考英語試題試卷含答案
- 施工現場勞動安全保護知識試題及答案
- 幫助幼兒掌握加減法試題及答案
- 小學教師反思與能力提升的試題及答案
- 湖北社工面試題及答案
- 幼兒園數字與色彩組合基礎題試題及答案
- 物理技術與社會發展試題及答案
- 情感婚姻測試題及答案
- 注冊土木工程師考試案例分析方法試題及答案
- 簡單有趣幼兒園數學試題及答案
- T-WSJD 21-2022 內鏡儲存干燥柜衛生要求
- 2025-2030中國聚丙烯三元共聚物行業市場發展趨勢與前景展望戰略研究報告
- 2025年上半年蘇州太倉臨港投資發展集團限公司公開招聘工作人員易考易錯模擬試題(共500題)試卷后附參考答案
- 工業自動化控制系統調試與維護題庫
- 2025屆廣東省佛山市高三語文二模高分范文12篇:“成長最大的悲哀是失去了想象力”
- 2025屆陜西省高考適應性檢測(三)物理試題+答案
- 西安職業技術學院招聘筆試真題2024
- 國際學校綜合課程教研組計劃
- (2025)全國交管12123學法減分測試題庫及答案(帶圖版)
- SJG 81-2020 政府投資辦公建筑室內裝修材料空氣污染控制標準
- 23G409先張法預應力混凝土管樁
評論
0/150
提交評論