版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
讀寫NAND
Flash實驗“第五章《GD32F3開發(fā)進階教程——基于GD32F303ZET6》01實驗內(nèi)容本章主要介紹NANDFlash片的原理和用法,包括NANDFlash簡介、ECC校驗的原理和FTL算法的作用等;介紹外部NANDFlash的讀寫操作;最后基于GD32F3果派開發(fā)板設(shè)計一個讀寫NANDFlash實驗,通過操作LCD屏上的GUI界面,演示NANDFlash的讀寫操作。實驗內(nèi)容02實驗原理Flash又稱為閃存,屬于電不易失的存儲器(ROM)。Flash與EEPROM都是可重復(fù)擦寫的存儲器,但其容量一般比EEPROM大。GD32F30x系列微控制器內(nèi)部集成了Flash,用來存儲用戶燒錄的代碼和芯片的啟動代碼等需要關(guān)閉電源后依然保存的數(shù)據(jù)。根據(jù)存儲單元電路的不同,F(xiàn)lash可以分為NORFlash和NANDFlash。兩種Flash的對比如表5-1所示,根據(jù)地址線和數(shù)據(jù)線是否復(fù)用可判斷Flash的種類。Flash簡介Flash簡介由于NANDFlash引腳上可復(fù)用,因此讀取速度比NORFlash慢,但是擦除和寫入速度更快,并且由于NANDFlash內(nèi)部電路簡單,數(shù)據(jù)密度大,體積小,成本低,因此大容量的Flash都是NAND型的,而小容量(例如2~12MB)的Flash大多為NOR型的在使用壽命上,NANDFlash的可擦除次數(shù)是NORFlash的數(shù)倍。另外,NANDFIash可以標(biāo)記壞塊,從而使軟件跳過壞塊,而NORFlash一旦損壞則無法再使用。Flash簡介HY27UF081G2A芯片為Hynix(海力士公司生產(chǎn)的容量為128MB的NANDFlash芯片其128MB存儲空間由1024個Block組成,每Block由64個Page組成每個Page由2KB的存儲空間和64B的空閑區(qū)域(或稱余區(qū)域)組成64B的空閑區(qū)域是基于NANDFlash的硬件特性(數(shù)據(jù)在讀/寫時相對容易出現(xiàn)錯誤)而設(shè)立的。這種為了保證數(shù)據(jù)的正確性而產(chǎn)生的檢測和糾錯機制被稱為EDC(ErrorDetection
Code),而空閑區(qū)域用于放置數(shù)據(jù)的校驗值以供EDC機制進行檢測糾錯。HY27UF081G2A芯片簡介HY27UF081G2A芯片簡介HY27UF081G2A芯片通過EXMC(外部存儲器控制器)接口與GD32F303ZET6微控制器的AHB總線接口相連,具體電路原理圖如圖5-1所示。HY27UF081G2A芯片簡介HY27UF081G2A芯片的各個引腳描述如表5-2所示,其中R/B引腳用于檢測芯片狀態(tài)當(dāng)該引腳為高電平時,可進行讀/寫等操作,當(dāng)該引腳為低電平時,芯片正在運行,此時不可對其進行操作。NANDFlash串行組織的存儲結(jié)構(gòu),在數(shù)據(jù)讀取時,讀出放大器所檢測的信號強度會被削弱,降低信號的準(zhǔn)確性,導(dǎo)致讀數(shù)出錯,通常采用ECC算法進行數(shù)據(jù)檢測及校準(zhǔn)。ECC(ErrorCheckingandCorre-ction)是一種錯誤檢測和校準(zhǔn)的算法。NANDFlash數(shù)據(jù)產(chǎn)生錯誤時一般只有1bit出錯,而ECC能正1bit錯誤和測2bit的錯誤,并且計算速度快,但缺點是無法糾正1bit以上的錯誤,且不確保能檢測全部2bit以上的錯誤。ECC算法ECC算法ECC算法的基本原理如下:假設(shè)對512個字節(jié)的數(shù)據(jù)進行校驗,那么將這些數(shù)據(jù)視為512行、8列的矩陣,即每行表示1字節(jié)數(shù)據(jù),矩陣的每個元素表示1位(bit),如圖5-2所示校驗過程分為行校驗和列校驗(下面將bitn中的n稱為索引值)。010203全為0表示數(shù)據(jù)無錯誤。一半為1時,表示出現(xiàn)了1bit的錯誤,新得到的校驗值與讀取到的校驗值中的CP5、CP3、CP1進行異或得3bit數(shù)據(jù)為錯誤位的列地址,RP(2log2"-1)...、RP5、RP3、RP1進行異或得到的數(shù)據(jù)為錯誤位的行地址。只有1位為1表示空閑區(qū)域出現(xiàn)錯誤。ECC算法校驗值進行異或得到的結(jié)果有以下幾種:04其他情況則說明至少2bit數(shù)據(jù)錯誤。般器件在存儲范圍內(nèi)同時出現(xiàn)2bit及以上的錯誤很少見,因此漢明碼編碼的ECC校驗基本上夠用。EXMC模塊中的Bank1和Bank2都包含帶有ECC算法的硬件模塊,通過寄存器EXMC_NPCTLx中的ECCSZ來選擇ECC計算的頁面大小可選項有2565121024、2048、4096和8192字節(jié),該寄存器中各個位的具體描述可參見《GD32F30x用戶手冊(中文版)》中的21.4.2節(jié)。本章實驗將ECC塊大小配置為512字節(jié)。ECC算法010203標(biāo)記壞塊:當(dāng)通過讀寫數(shù)據(jù)或ECC校驗檢測出壞塊時,需要將其標(biāo)記以不再對該區(qū)域進行讀寫操作。地址映射管理:FTL將邏輯地址映射到NANDFlash中可讀寫的物理地址,并創(chuàng)建相應(yīng)的映射表,當(dāng)處理器對相應(yīng)的邏輯地址讀寫數(shù)據(jù)時,實際上是通過FTL讀寫NANDFlash中對應(yīng)的物理地址的。壞塊管理和磨損均衡壞塊管理:當(dāng)壞塊產(chǎn)生后,用空閑并且可讀寫的塊替代壞塊在映射表中的位置,保證每個邏輯地址都映射到可讀寫的物理地址。FTL原理FTL的功能如下:FTL原理HY27UF081G2A芯片通信方式Bank1包含3個特殊區(qū)域:數(shù)據(jù)區(qū)域、指令區(qū)域和地址區(qū)域,如圖5-4所示。下面介紹各個區(qū)域的功能:數(shù)據(jù)區(qū)域:儲存讀寫的數(shù)據(jù),相應(yīng)的數(shù)據(jù)通過程序進行寫入與讀出。當(dāng)EXMC在數(shù)據(jù)發(fā)送模式時,軟件需要在數(shù)據(jù)區(qū)域?qū)懭霐?shù)據(jù):當(dāng)EXMC在數(shù)據(jù)接收模式時,軟件需要在數(shù)據(jù)區(qū)域讀取數(shù)據(jù)。由于NANDFlash會自動累加其內(nèi)部操作地址,故在讀寫時不需要軟件修改操作地址。指令區(qū)域:儲存操作指令,操作指令通過程序?qū)懭朐搮^(qū)域。在指令傳輸過程中,EXMC會使能指令鎖存信號(CLE),CLE映射到EXMCA16]地址區(qū)域:儲存操作地址,操作地址通過程序?qū)懭朐搮^(qū)域。在地址傳輸過程中,EXMC會使能地址鎖存信號(ALE),ALE映射到EXMCA17]。HY27UF081G2A芯片通信方式AHB通過HADDR[17:16]選擇以上3個區(qū)域來進行操作:HADDR[17:161=00,即選擇數(shù)據(jù)區(qū)域;HADDR[17:167=01,即選擇指令區(qū)域;HADDR[17:16]=1X,即選擇地址區(qū)域。HY27UF081G2A芯片通信方式對于每個Bank,EXMC提供獨立的寄存器來配置訪問時序,支持8位、16位的NANDFlash,對于NANDFlash,EXMC還提供ECC計算模塊,保證數(shù)據(jù)傳輸和保存的魯棒性(魯棒性是指外部環(huán)境較差時仍能保持其功能穩(wěn)性、正常地發(fā)揮)。本實驗使用的NANDFIash為8位的芯片。EXMC與NANDFash的接口信號描述如表5-3所示。HY27UF081G2A芯片通信方式HY27UF081G2A芯片通信方式a由于NANDFlash引腳上可復(fù)用,因此讀取速度比NORFlash慢,但是擦除和寫入速度更快,并且由于NANDFlash內(nèi)部電路簡單,數(shù)據(jù)密度大,體積小,成本低,因此大容量的Flash都是NAND型的,而小容量(例如2~12MB)的Flash大多為NOR型的在使用壽命上,NANDFlash的可擦除次數(shù)是NORFlash的數(shù)倍。另外,NANDFIash可以標(biāo)記壞塊,從而使軟件跳過壞塊,而NORFlash一旦損壞則無法再使用。HY27UF081G2A芯片通信方式010203讀操作步驟擦除操作步驟寫操作步驟NANDFlash的讀寫操作03實驗代碼解析1.ReadWriteNandFlash.h文件在ReadWriteNandFlash.h文件的“API函數(shù)聲明”區(qū),聲明了2個API函數(shù)。2.ReadwriteNandFlash.c文件在ReadwriteNandFlashc文件的“宏定義”區(qū),定義了顯示字符最大長度的MAX
STRINGLEN的值為64,即LCD顯示字符串的最大長度為64位。ReadwriteNandFlash文件對下面按照順序解釋說明ReadProc函數(shù)中的語句。(1)第7行代碼:校驗地址參數(shù)是否在Flash的地址范圍內(nèi)。(2)第15至33行代碼:若地址滿足范圍,則通過FTLReadSectors函數(shù)從NANDFlash中讀取數(shù)據(jù),并將數(shù)據(jù)顯示在LCD顯示屏和串口助手上。(3)第35至40行代碼:若地址不滿足范圍,則顯示無效地址信息。ReadwriteNandFlash文件對下面按照順序解釋說明InitReadwriteNandFlash函數(shù)中的語句。(1)第4至13行代碼將外部Flash模塊讀寫的首地址、結(jié)束地址和讀/寫函數(shù)賦給GUI結(jié)構(gòu)體sstructGUIDev中對應(yīng)的成員變量。(2)第16行代碼:通過IitGUI函數(shù)初始化GUI界面及相應(yīng)的界面參數(shù)。(3)第19至22行代碼:將NANDFlash模塊的讀寫地址范圍顯示在LCD顯示屏和計算機上。ReadwriteNandFlash文件對0102NandFlash.h文件:在NandFlash.h文件的“宏定義”區(qū),進行了大量與NANDFlash模塊操作相關(guān)的宏定義。NandFlash.c文件:在NandFlash.c文件的“內(nèi)部函數(shù)實現(xiàn)”區(qū),首先實現(xiàn)了NandDelay函數(shù)。NandFlash文件對下面按照順序解釋說明InitNandFlash函數(shù)中的語句。(1)第8至13行代碼:使能相應(yīng)的時鐘并初始化EXMC相關(guān)的GPIO。(2)第16至17行代碼:配置EXMC的各個參數(shù)。(3)第19至29行代碼:復(fù)位NANDFash,等待復(fù)位完成后讀取ID,并檢查它是否為設(shè)定的NANDFlash:是則返回成功標(biāo)志,否則顯示相應(yīng)的信息并進入“死循環(huán)”。NandFlash文件對下面按照代碼排列順序解釋說明NandReadPage函數(shù)中的語句。(1)第6至11行代碼:檢查地址與數(shù)據(jù)并設(shè)置讀取地址。(2)第16至35行代碼通過for語讀取外部Flash的數(shù)據(jù)每傳輸512字節(jié)計算一次ECC值。(3)第37至52行代碼:計算空閑區(qū)域地址并讀取相應(yīng)的ECC值用于校驗。(4)第55至67行代碼:校驗ECC值,若出現(xiàn)錯數(shù)據(jù)則嘗試修復(fù),最后返回相應(yīng)的返回值。NandFlash文件對下面按照代碼排列的順序解釋說明NandEraseBlock函數(shù)中的語句。(1)第6行代碼:檢查待擦除的塊是否為好塊。(2)第9至40行代碼:若為好塊,則將塊地址轉(zhuǎn)換為頁地址,然后向NANDFIash發(fā)送擦除指令及頁地址,等待擦除完成后校驗是否成功。(3)第43至51行代碼:若無法校驗塊或校驗的塊為壞塊,則將NANDFAIL作為返回值返回。NandFlash文件對在FTL.h文件的“宏定義”區(qū),定義了無效地址和扇區(qū)大小。1.FTL.h文件在FTL.c文件的“枚舉結(jié)構(gòu)體”區(qū),聲明了FTL控制結(jié)構(gòu)體。結(jié)構(gòu)體內(nèi)包含了FTL算法需要用到的各個參數(shù)。2.FTL.c文件FTL文件對下面按照順序解釋說明InitFTL函數(shù)中的語句。(1)第4至17行代碼:初始化FTL設(shè)備結(jié)構(gòu)體。(2)第20至23行代碼:通過InitNandFlash函數(shù)初始化NANDFlash。(3)第26至35行代碼通過CreateLUT函數(shù)生成LUT根據(jù)生成結(jié)果顯示相應(yīng)的信息并返回相應(yīng)的返回值。FTL文件對下面按照代碼排列順序解釋說明CreateLUT函數(shù)中的語句。(1)第7至13行代碼:清空LUT表,將表中的好塊和有效塊的數(shù)量置0。(2)第15至45行代碼:讀取NANDElash中的LUT表,校驗空閑區(qū)域,如果該塊是好塊,則轉(zhuǎn)換得到邏輯塊的編號,并且好塊數(shù)量加1,如果該塊不是好塊,則輸出壞塊的索引“badblockindex”。(3)第47至63行代碼:LUT表建立完成以后檢查有效塊個數(shù)如果有效塊數(shù)小于100則需要重新格式化。FTL文件對下面按照順序解釋說明FTLReadSectors函數(shù)中的語句。(1)第9至13行代碼:查扇區(qū)大小,如果扇區(qū)大小不正確則返回1。(2)第15至49行代碼:在循環(huán)中以此讀取所需扇區(qū)。(3)第17至20行代碼:計算得到邏輯地址的位置Block、Page及Column。(4)第22至23行代碼:調(diào)用函數(shù)FTLLogicNumToPhysicalNum,將邏輯塊編號轉(zhuǎn)物理塊編號。(5)第24至28行代碼:查扇區(qū)地址,如果超出了最大物理內(nèi)存地址范圍,則讀取失敗返回1。(6)第30至48行代碼:調(diào)用NandReadPage函數(shù)讀取數(shù)據(jù)。如果讀取失敗,再次嘗試讀取,兩次嘗試都不成功,則讀取失敗,返回1。如果讀取成功,則更新讀取扇區(qū)號和緩沖區(qū)指針。FTL文件對Main.c文件在Proc2msTask函數(shù)中調(diào)用ReadWriteNandFlashTask函數(shù),如程序清單5-24所示。實驗結(jié)果下載程序并進行復(fù)位,可以看到開發(fā)
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 綠色低碳分布式光儲充一體化綜合利用項目可行性研究報告寫作模板-申批備案
- 2025-2030全球草酸镥水合物行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國游戲插畫行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球單通道凝血分析儀行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球EPROM 存儲器行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國3,4,5-三甲氧基甲苯行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025年全球及中國代謝物定制合成服務(wù)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球低扭矩滾子軸承行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國汽車差速器錐齒輪行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球高壓電動車軸行業(yè)調(diào)研及趨勢分析報告
- 湖南省長沙市長郡教育集團聯(lián)考2023-2024學(xué)年九年級上學(xué)期期中道德與法治試卷
- 農(nóng)村宅基地和建房(規(guī)劃許可)申請表
- 2023年中國農(nóng)業(yè)銀行應(yīng)急預(yù)案大全
- 村衛(wèi)生室2023年度績效考核評分細(xì)則(基本公共衛(wèi)生服務(wù))
- 關(guān)聯(lián)公司合作合同
- 【建模教程】-地質(zhì)統(tǒng)計學(xué)礦體建模簡明教材
- PSM工藝安全管理
- 7天減肥餐食譜給你最能瘦的一周減肥食譜
- 最新北師大版八年級數(shù)學(xué)下冊教學(xué)課件全冊
- 危險化學(xué)品儲存柜安全技術(shù)及管理要求培訓(xùn)
- Q∕SY 06342-2018 油氣管道伴行道路設(shè)計規(guī)范
評論
0/150
提交評論