精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

了解nandflash當前發展狀況

GReq_mcu168 ? 來源:玩轉單片機 ? 作者:玩轉單片機 ? 2020-12-09 16:50 ? 次閱讀

很久沒接觸過 nandflash 驅動了,最近工作又摸了一下,那就順便整理點筆記總結一下吧。nandflash 在我看來算是比較落后的存儲設備了,所以文章里沒有太多細節的東西,更多的是一些開發思路和經驗,希望能幫助到有需要的人。

一、了解 nandflash 當前發展狀況

什么是 nandflash?

nandflash 由許多保存位( bit )的單元( cell )組成,這些位通過電荷開啟或關閉。這些開/關單元的組織方式表示存儲在nandflash 上的數據。這些單元中的位數也決定了 nandflash 的命名,例如 Single Level Cell ( SLC ) nandflash 在每個單元中都包含一個位。MLC nandflash將每個單元的位數增加了一倍,而 TLC nandflash 則增加了三倍,這為更高容量的 nandflash 開辟了道路。

SLC 的優點是速度最快,最耐用,但缺點是價格昂貴,并且無法提供更高的存儲容量。SLC 是企業使用的首選。與 SLC 相比,MLC 和 TLC 閃存的生產成本更低,存儲容量更高,但要權衡相對較短的使用壽命和較慢的讀/寫速度。MLC 和 TLC 是日常消費計算機等個人用品的首選。

SLC MLC TLC nandflash 對照表:

d149dc9e-2e2b-11eb-a64d-12bb97331649.png

為什么在嵌入式設備上 emmc 取代了 nandflash?

由于NAND Flash芯片的不同廠牌包括三星、KingMax、東芝(Toshiba)或海力士(Hynix)、美光(Micron)等,都需要根據每家公司產品和技術特性來重新設計,過去并沒有哪個技術能夠通用所有廠牌的NAND Flash芯片。而每次NAND Flash制程技術改朝換代,包括70納米演進至50納米,再演進至40納米或30納米制程技術,手機客戶也都要重新設計(重新設計什么?因為你要通訊,就需要通訊的電壓,時序,甚至接口命令,這些都隨著不同廠商,不同制程技術而不同,你作為手機制造商或者soc廠商,想要把每種新的 nandflash 集成到你的產品中,就要根據這些新的特性來花時間設計。soc這邊會有一個nandflash controller,你要根據采用的nandflash特性來配置nand flash controller,以達到成功通訊的目的)。

半導體產品每1年制程技術都會推陳出新,存儲器問題也拖累手機新機種推出的速度,因此像eMMC這種把所有存儲器和管理nandflash的控制芯片都包在1顆MCP上的概念,逐漸風行起來。即:

NAND Flash 是一種存儲介質,要在上面讀寫數據,外部要加主控和電路設計

eMMC是NAND Flash+主控IC ,對外的接口協議與SDTF卡類似;

emmc 內部根本的存儲介質還是 nandflash,而不是一種全新的 storage。但是他定義并規范了統一接口比如:emmc 4.3, 4.4, 4.5(類似于usb 2.0, 3.0 這樣的), 把和 nand flash 的通訊封裝在emmc內部,而提供給外部的接口就是 emmc 接口。同理, 外部,比如soc就需要有個 sdmmc controller, 并且宣布支持 emmc 4.3/4.4...,那么,你需要做的就是,根據選用的emmc的版本號,來給 sdmmc controller 來選擇一個通訊的接口版本號4.4。

二、如何驅動一款NAND Flash?

參考:
韋東山嵌入式Linux視頻第一期-nandflash》

(一) 基礎硬件知識

nandflash 是一個存儲芯片,那么它應該能提供“讀地址A的數據,把數據B寫到地址A"的功能。

以Mini2440為例簡單說明一下:

d16fc7f6-2e2b-11eb-a64d-12bb97331649.png

問1:原理圖上 NAND FLASH 和 S3C2440 之間只有數據線,如何傳輸地址呢?
答1.在DATA0~DATA7上既傳輸數據,又傳輸地址,當ALE為高電平時傳輸的是地址。

問2:從NAND FLASH芯片手冊可知,要讀寫NAND FLASH需要先發出命令,如何傳入命令?
在DATA0~DATA7上既傳輸數據,又傳輸地址,也傳輸命令;
當ALE為高電平時傳輸的是地址;
當CLE為高電平時傳輸的是命令;
當ALE和CLE都為低電平時傳輸的是數據;

d1913fb2-2e2b-11eb-a64d-12bb97331649.png

問3:數據線LDATAn既接到NAND FLASH,也接到NOR FLASH,還接到SDRAM、DM9000等等,cpu如何準確的將某個地址發到正確的芯片上而不干擾其他芯片呢?
這些芯片,要訪問之必須"選中"(即片選信號為低),沒有選中的芯片不會工作,相當于沒接一樣。

問4:假設燒寫NAND FLASH,把命令、地址、數據發給它之后,NAND FLASH肯定不可能瞬間完成燒寫的,怎么判斷燒寫完成?
通過狀態引腳RnB來判斷:它為高電平表示就緒,它為低電平表示正忙。

問5:怎么操作NAND FLASH呢?
答5. 根據NAND FLASH的芯片手冊,一般的過程是:
(1) 發出命令
(2) 發出地址
(3) 寫數據/讀數據
(4) 等待

(二) CPU nandflash 控制器章節導讀

以三星 s5pv210 芯片為例,摘選一下我認為比較重要的點:

d1ef2b72-2e2b-11eb-a64d-12bb97331649.jpg

SLC nandflash一般是1bit ecc,對應的編解碼的過程需閱讀上述內容。

d22215b4-2e2b-11eb-a64d-12bb97331649.jpg

MLC nandflash 一般是8/12/16 bit ecc,對應的編解碼的過程需閱讀上述內容。

(三) nandflash 芯片手冊導讀

以鎂光 nandflash 芯片為例,摘選一下我認為比較重要的點:

d27400e0-2e2b-11eb-a64d-12bb97331649.jpg

特性列表,一般位于芯片手冊首頁,可以幫助我們快速了解芯片特性,基本可以認為是最重要的信息

d2bca03e-2e2b-11eb-a64d-12bb97331649.png

不同芯片廠商的nandflash芯片引腳定義基本是一致的,但是可能會有1~2引腳是有差異,需要核對。

d2fe2694-2e2b-11eb-a64d-12bb97331649.png

上圖可用于確定nandflash的存儲布局;

d368ba86-2e2b-11eb-a64d-12bb97331649.jpg

上圖可用于核對芯片的型號和詳細的硬件特性;

(四) nandflash 調試思路:

1. 通讀 CPU 芯片手冊 nandflash 控制器章節:
- 了解該 CPU nandflash 控制器支持哪些特性,一般包括nandflash的bit數,以確定是否支持當前選用的nandflash芯片;- 明確該芯片的 nandflash 控制器 ecc 校驗功能的工作流程;

2. 通讀 nandflash 芯片手冊:
- 了解 nandflash 芯片的基本信息,例如ID、容量、類型(SLC/MLC)- 結合板子的原理圖一起查看,以確定 CPU 和 nandflash 芯片的引腳連接是否正確。不同廠商(例如三星、鎂光)生產的nandflash引腳不一定完全兼容,可能會有一兩根引腳有差異;

3. 在 U-boot 或者 Linux 下實現讀取 nandflash 芯片的ID值的功能:nand_read_id()
- U-boot 和 Linux哪個順手用哪個,U-boot的優點是啟動快,做測試方便點,而 Linux的優點是支持網絡/文件系統,功能強大;- 能讀到 ID 只能說明 CPU 和 nandflash 芯片硬件連接上有了些許保障 (例如發命令、讀數據),但是某些隱蔽的錯誤硬件連接仍然會導致寫數據異常;

4. 在 U-boot 或者 Linux 下實現讀取擦除 一塊數據的功能:nand_erase_block()
- 相比起讀寫數據,擦除 nandflash 數據塊較為容易。而且只有成功擦除了,才能進一步驗證讀寫nandflash的功能。nandflash 數據塊被擦除后所有數據均為 0xFF,利用這個特性可以驗證稍后需要實現的讀一頁的操作是否正常;

5. 在 U-boot 或者 Linux 下實現裸讀一頁數據( 不考慮ecc校驗 )的功能:nand_read_page_raw()
- nandflash 的1頁包括 main 區域和oob區域, main 區域用于保存用戶數據,spare 區域用于保存 ecc校驗碼;- 一般說寫一頁數據時,需要結合上下文才能判斷是寫 main 區域還是寫 main + spare 區域;- nandflash 一般需要ecc 校驗功能來保證數據的安全,但是在前期調試階段,我們可以不考慮ecc 校驗直接實現裸讀一頁數據的功能。事實上,我們也無法考慮ecc 校驗的功能,因為到現在為止還不能寫數據到 nandflash的main區域,更別說寫 ecc 校驗碼到oob區域;- 我們需要先實現讀數據的功能,確保讀數據功能的可靠后,待會才能用其來驗證寫數據的操作;

6. 在 U-boot 或者 Linux 下實現裸寫一頁數據( 不考慮ecc校驗 )的功能;nand_write_page_raw()- 裸寫一頁和裸讀一頁的操作可以相互協同驗證;- uboot 的 cmp 命令可以對比兩塊內存的數據是否相同,該命令可以用于驗證寫操作是否成功;

7. 在 U-boot 或者 Linux 下實現寫一頁數據到 main區域,并將 nandflash 控制器生成的 ecc 校驗碼填寫到oob區域:nand_write_page()
- 寫一頁數據到 main 區域時,nandflash 控制器會生成 ecc 校驗碼,這些校驗碼就是用來保護這一頁數據的;

8. 在 U-boot 或者 Linux 下實現讀一頁數據的功能,包括讀 main 區域的數據和 spare 區域的 ecc 校驗碼:nand_read_page()
- 從nandflash spare 區域讀到的 ecc 校驗碼應該發送給 nandflash 控制器,nandflash 控制器會幫我們計算好是否有bit 錯誤,并且將結果和糾錯需要用到的信息保存在寄存器中,軟件通過寄存器里的信息推導出正確的數據;

9. 由于bit 錯誤的問題不容易出現,所以在調試階段需要人為制造出與 spare 區域 不匹配的 main 數據,以檢驗ecc 校驗功能是否正常,即數據是否能被糾正,大體的思路是:
- 通過 nand_write_page() 寫一頁正確的數據到 main 區域 和 spare 區域;- 篡改在內存中的數據,然后通過 nand_write_page_raw() 將篡改后的數據填寫到 main 區域,spare 區域保持不變;- 通過nand_read_page 讀 一頁數據,如果能執行糾錯相關的代碼,并且能獲取到被篡改之前的數據,則說明校驗功能是可以工作的;

10. 如果 main 區域的 ecc 校驗碼字節數比較多,并且 spare 區域足夠大的話,可以對存放在 spare 區域里的 main ecc校驗碼進行二次 ecc,這時生成的 ecc 校驗碼我將其稱為 spare ecc,它一般會存放在spare區域的末尾,并不是必須的;

(五) Linux Nand Flash驅動

參考:
《韋東山嵌入式Linux視頻第二期-nandflash》

Linux MTD stack

d3924810-2e2b-11eb-a64d-12bb97331649.png

對于nandflash 驅動,需要重點關注的地方:

Flash memory abstraction layer/MTD layerdrivers/mtd/mtd*.c Flash type abstration layer/NAND coredrivers/mtd/nand/nand_*.c Flash controller driversdrivers/mtd/nand/*_nand.c

NAND legacy stack( Linux-4.16 之前)

d3c4b50c-2e2b-11eb-a64d-12bb97331649.png

/dev/mtd0是nandflash設備的字符設備驅動節點,上圖展示了 read("/dev/mtd0") 的底層實現(MTD layer->NAND core->Controller driver)。

NAND legacy stack 的弊端

無法執行細粒度的NAND Flash 命令,粒度的大小被限制在NAND core層面了;

芯片廠商更新的NAND Flash特性時需修改所有的Controller driver;

NAND new stack( Linux-4.16 之后)

d3f24116-2e2b-11eb-a64d-12bb97331649.png

將NAND 的控制邏輯下放到Controller driver層,NAND Core統一調用Controller driver提供的鉤子函數:exec_op();

(六) 測試穩定性和性能

MTD tests support

mtd_nandecctest.ko:nand flash的ECC校驗測試

mtd_pagetest.ko:nand flash的page讀寫測試

mtd_speedtest.ko:MTD分區的讀寫速度測試

mtd_subpagetest.ko:nand flash的sub-page接口測試

mtd_oobtest.ko:nand falsh的OOB區域讀寫測試

mtd_readtest.ko:讀取整個MTD分區

mtd_stresstest.ko:隨機讀寫,擦除操作測試

mtd_torturetest.ko:該功能可用于做穩定性或者壽命測試,隨機操作直到發生錯誤

示例如下:

insmod mtd_stresstest.ko dev=9 count=1000 [ 3289.273771] ================================================= [ 3289.279826] mtd_stresstest: MTD device: 9 [ 3289.284079] mtd_stresstest: MTD device size 268435456, eraseblock size 131072, page size 2048, count of eraseblocks 2048, pages per eraseblock 64, OOB size 64 [ 3289.303250] mtd_stresstest: scanning for bad eraseblocks [ 3289.420267] mtd_stresstest: scanned 2048 eraseblocks, 0 are bad [ 3289.426534] mtd_stresstest: doing operations [ 3289.431031] mtd_stresstest: 0 operations done [ 3339.606972] mtd_stresstest: finished, 1000 operations done [ 3339.612992] =================================================

一個反復讀寫并校驗數據正確性的小腳本:

#!/bin/sh rm -rf /media/local/ count=1 while [ ${count} -lt 600 ]; do TSTAMP="`date` | ---> ${count}" echo "$TSTAMP" mkdir -p /media time cp /usr/local /media/ -raf diff /usr/local /media/local -r || exit -1 rm -rf /media/local; sync let count=${count}+1 done

三、NAND Flash 文件系統的選擇:YAFFS2

參考:
《基于nand flash的文件系統的整理》
《Cramfs、JFFS2、YAFFS2的全面對比》

針對 nandflash 特點優化其性能以及克服其缺點

nanflash 不是通常意義上的塊設備,塊設備的特點是可以對數據塊進行讀、寫操作(如磁盤,文件系統等),但是對于nanflash 來說有三種操作分別是:讀、寫、擦除。只有對已擦除的塊才能進行寫操作。所以為了使其兼容傳統的硬件和系統,需要對其進行特殊處理;

當一個閃存處在干凈狀態時(被擦除過,但是還沒有寫操作發生),這塊flash上的每一位(bit)都是邏輯1;

閃存的使用壽命是有限的,具體來說,閃存的使用壽命是由擦除塊的最大可擦除次數來決定的。超過了最大可擦除次數,這個擦除塊就成為壞塊(bad block)了。因此要避免某個擦除塊被過度使用,以至于先于其他擦除塊變成壞塊,應該在盡量少影響性能的前提下,使擦寫操作均勻分布在每個擦除塊上,叫做損耗均衡(wear leveling)。

YAFFS意為「Yet Another Flash File System」,是目前唯一一個專門為NAND Flash設計的文件系統。它采用了類日志結構,結合NAND Flash的特點,提供了損耗平衡和掉電保護機制,可以有效地避免意外掉電對文件系統一致性和完整性的影響。

nanflash 和 YAFFS2之間是如何配合的?
通過分析mkyaffs2iamge.c可知:

yaffs2 映像文件是由一個個的main(4096) + spare(224)數據組成;

main里存放的是文件(包括目錄、普通文件、特殊文件等)數據;

spare里前面的nand_oobinfo->oobfree(2+22=24)個字節歸yaffs2自由使用,然后接下來的nand_oobinfo->eccbytes(104)個字節都填0xFF,即yaffs2 images本身是不含有ecc校驗碼的;(以上數值跟實際nandflash芯片相關)

你和我各有一個蘋果,如果我們交換蘋果的話,我們還是只有一個蘋果。但當你和我各有一個想法,我們交換想法的話,我們就都有兩個想法了。如果你也對嵌入式系統開發有興趣,并且想和更多人互相交流學習的話,請關注我的公眾號:ESexpert,一起來學習吧,歡迎各種收藏/轉發/批評,小小的轉發一下對我來說是極大的恩惠,十分感謝!


責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 電路設計
    +關注

    關注

    6666

    文章

    2430

    瀏覽量

    203385
  • 存儲
    +關注

    關注

    13

    文章

    4265

    瀏覽量

    85680
  • nandflash
    +關注

    關注

    0

    文章

    48

    瀏覽量

    20197

原文標題:關于NAND Flash調試的一點總結

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FWA產業的發展現狀和演進方向

    近日,在2024 MBBF展會期間,全球FWA演進圓桌成功舉辦,吸引了超過80位來自全球的運營商、行業分析師及生態合作伙伴代表。會上,與會者分享了最新的FWA行業洞察與實踐,共同探討了FWA的當前發展和未來演進方向。
    的頭像 發表于 11-06 17:21 ?417次閱讀

    rtthread支持nandflash掛載fatfs文件系統嗎?

    rtthread支持nandflash掛載fatfs文件系統嗎
    發表于 09-27 09:45

    園區企業能耗狀況如何統一管理

    智慧園區內通常有眾多企業和設施,通過集中能耗監測,可以精確地獲取各個區域、各個企業以及不同設備的能源消耗數據。包括用電量、用水量、用氣量等,從而全面了解園區整體的能耗狀況
    的頭像 發表于 09-14 17:30 ?214次閱讀
    園區企業能耗<b class='flag-5'>狀況</b>如何統一管理

    《中國IPv6發展狀況白皮書(2024)》:我國IPv6活躍用戶數達到7.94億

    《中國IPv6發展狀況白皮書(2024)》由推進IPv6規模部署和應用專家委員會發布,主要從用戶數、流量、基礎資源、云端、網絡、終端、應用等多個維度對我國IPv6當前發展情況進行綜合分析。白皮書強調
    的頭像 發表于 07-24 15:41 ?447次閱讀
    《中國IPv6<b class='flag-5'>發展</b><b class='flag-5'>狀況</b>白皮書(2024)》:我國IPv6活躍用戶數達到7.94億

    使用CYBT-343026-01的產品,“ARIB STD0T66 當前產品指示”的描述是什么?

    對于使用 CYBT-343026-01 的產品,“ARIB STD0T66 當前產品指示”的描述是什么? 我想了解以下兩點。 ARIB STD-T662.3.1 調制系統是寫成\"XX
    發表于 07-24 06:11

    請問ESP32是否支持擦除,寫入速度更快的spi nandflash作為程序存儲器(掛載到spi0)?

    ESP32寫flash的時候,似乎會影響到中斷丟失。請問ESP32是否支持擦除,寫入速度更快的spi nandflash作為程序存儲器(掛載到spi0)?
    發表于 06-19 06:32

    3芯M16插頭在智能化行業的發展狀況

      德索工程師說道在智能化行業迅猛發展的背景下,3芯M16插頭作為一種重要的電氣連接元件,其應用和發展狀況也備受關注。以下是對3芯M16插頭在智能化行業發展
    的頭像 發表于 06-13 17:58 ?230次閱讀
    3芯M16插頭在智能化行業的<b class='flag-5'>發展</b><b class='flag-5'>狀況</b>

    智慧工廠解決方案--探討宜聯IOT中繼寶盒在智慧工廠建設中的應用

    本文結合當前發展迅速的物聯網和先進制造技術,探討智慧工廠建設的解決方案,探討宜聯IOT中繼寶盒邊緣計算設備在智慧工廠工業自動化建設中的應用和作用。
    的頭像 發表于 05-28 18:29 ?1162次閱讀
    智慧工廠解決方案--探討宜聯IOT中繼寶盒在智慧工廠建設中的應用

    血氧監測儀語音芯片怎么選?一文帶你了解

    隨著醫學科技的不斷發展,血氧飽和度成為了衡量人體健康狀況的重要指標之一。而傳統的血氧監測儀往往只能提供單一的數值顯示,對于用戶來說,可能難以準確理解其意義。因此,血氧監測儀語音芯片應運而生,通過語音
    的頭像 發表于 05-17 14:38 ?369次閱讀
    血氧監測儀語音芯片怎么選?一文帶你<b class='flag-5'>了解</b>

    stm32f429將NandFlash和SDRAM都外掛在FSMC總線上,LCD顯示很多黑線怎么解決?

    我使用stm32f429開發板,將NandFlash和SDRAM都外掛在FSMC總線上, 而LCD的顯存是存放在SDRAM中,當對NandFlash進行格式化時,LCD 顯示很多黑線,當格式化完成,顯示回復正常。 是否是總線獨占的問題?,是否有方法可以解決?
    發表于 05-17 07:20

    stm32f767第一次讀取nandflash導致屏幕閃爍的原因?

    fmsc總線上同時掛在sdram做ltdc顯存,nandflash存儲文件圖片,比如我把一張圖片存入nandflash,當我第一次從nandflash讀取這張圖片的時候會導致屏幕閃爍花屏一下,但之后
    發表于 04-09 06:02

    Littelfuse解決方案如何助力車載通信應用向前發展

    不斷發展的汽車架構在增強安全性、便利性和舒適性的同時,正以經濟高效的方式簡化設計。這些高性能系統需要強大、可靠的電路保護。
    的頭像 發表于 03-26 11:13 ?802次閱讀

    基于空間光調制技術的飛秒激光制造:當前發展與挑戰

    laser manufacturing: current developments and challenges"(基于空間光場調制技術的飛秒激光制造:當前發展與挑戰)的綜述文章,文章概括了近二十年
    的頭像 發表于 03-14 06:35 ?349次閱讀
    基于空間光調制技術的飛秒激光制造:<b class='flag-5'>當前</b>的<b class='flag-5'>發展</b>與挑戰

    5G FWA市場最新發展情況

    前幾年,對大部分人來說,FWA是一個比較陌生的領域,盡管早在3G和4G時代就已經得到一定的發展。后來,隨著5G的發展,FWA作為當前5G應用量級最大的場景之一,被更多人了解與討論。
    的頭像 發表于 12-12 16:30 ?899次閱讀
    5G FWA市場最新<b class='flag-5'>發展</b>情況

    用于粘液生理特性原位傳感的無線微型生物傳感器設計

    生物粘液的生理特性是監測人類健康狀況和幫助了解疾病發展的重要生理指標,因為粘液特性(例如,粘度)與炎癥和其他疾病高度相關。
    的頭像 發表于 12-06 10:24 ?689次閱讀
    用于粘液生理特性原位傳感的無線微型生物傳感器設計