一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Micrium全家桶之uC-FS: 0x01 NAND FTL

嵌入式USB開發(fā) ? 來源:嵌入式USB開發(fā) ? 作者:嵌入式USB開發(fā) ? 2023-06-08 10:58 ? 次閱讀

本文轉(zhuǎn)自公眾號,歡迎關(guān)注

Micrium全家桶之uC-FS: 0x01 NAND FTL (qq.com)

前言

這一篇我們來講講Micrium全家桶的uC-FS。文件系統(tǒng)是一個比較龐大的組件,我們以從下往上的順序介紹,即先以一個具體的設(shè)備:NAND為例,講其FTL的原理和實(shí)現(xiàn),然后再講FS部分。本文先講NAND驅(qū)動(FTL)部分的基本原理和代碼使用,后面會分幾篇詳細(xì)介紹其實(shí)現(xiàn)。

uC-FS介紹

uC-FS是一個緊湊、可靠、高性能和線程安全的嵌入式文件系統(tǒng)。可用于微處理器、微控制器DSP等,并且其提供一個可選的日志組件提供掉電,故障安全操作,同時保持FAT兼容性。

uC-FS是Micrium的一款商業(yè)的嵌入式文件系統(tǒng)組件,是uC-XXX全家桶的一員,后來Micrium被Silicon收購,代碼全開源了。

  • 支持以下介質(zhì)

SD/MMC

NAND

NOR

MSC

SD/MMC MSC等支持異步插入刪除

NAND NOR等提供相應(yīng)的FTL和驅(qū)動,實(shí)現(xiàn)壞塊管理,磨損均衡等處理。

  • 資源需求少:

典型的ROM 65KB RAM 5KB左右,最少可達(dá)ROM 7KB RAM 1KB,由于只需要一個緩沖區(qū),可以在只有1kB的可用RAM的情況下運(yùn)行。根據(jù)實(shí)際使用可能更少或者更多,可以在編譯時根據(jù)需要的特性進(jìn)行調(diào)整。

  • 提供POSIX 兼容API
  • 支持FAT12/16/32,長文件名支持,UTF-8編碼支持
  • 日志組件能保證掉電可靠(FAT文件系統(tǒng)格式本身是掉電不安全的,uC-FS提供了日志組件以實(shí)現(xiàn)掉電安全)
  • 性能和可靠性兼顧,在不犧牲可靠性的情況下提供高性能。與日志記錄兼容的復(fù)雜回寫緩存機(jī)制。高級鎖定方案在允許高并發(fā)性的同時確保線程安全。

這里還有一個自己值得提一下的故事:

還記得之前在一家頭部電力行業(yè)企業(yè),公司的一款采集終端產(chǎn)品使用的NAND FLASH作為文件系統(tǒng)存儲介質(zhì),使用的是FAT文件系統(tǒng)+第三方的NAND FTL組件實(shí)現(xiàn)壞塊管理和磨損均衡和日志功能實(shí)現(xiàn)掉電保護(hù),同時硬件實(shí)現(xiàn)了大電容儲能,實(shí)現(xiàn)掉電檢測以做掉電保護(hù)。產(chǎn)品發(fā)貨一萬多臺運(yùn)行半年左右出現(xiàn)了大量的文件系統(tǒng)損壞問題導(dǎo)致了數(shù)據(jù)丟失。最終統(tǒng)計有8000多臺出現(xiàn)了問題,急需解決該質(zhì)量問題。正是這個背景下,我臨危受命負(fù)責(zé)解決這個問題,經(jīng)過大量測試分析確認(rèn)第三方FTL和日志組件有缺陷,于是考慮使用商業(yè)文件系統(tǒng),最終購買了uC-FS,因為當(dāng)時也在使用uC-OSIII,并且市面上也沒有其他嵌入式商業(yè)文件系統(tǒng)可選,經(jīng)過移植,大量測試工作下確認(rèn)了uC-FS的可靠性,最終遠(yuǎn)程升級解決了該問題。整個過程其實(shí)也經(jīng)歷了幾個月,比較艱難的:確認(rèn)問題, 分析問題就花了一半多時間, 確認(rèn)解決方案,確認(rèn)購買商業(yè)軟件又艱難推進(jìn),需要承受巨大壓力(因為當(dāng)時之前也沒用過uc-FS不能確保沒問題), 確認(rèn)遠(yuǎn)程升級方案現(xiàn)場升級方案,現(xiàn)場技術(shù)支持協(xié)調(diào),客戶溝通等等每一項都不容易,這也是本人經(jīng)歷過的最大的一個項目了,實(shí)際比任何一個開發(fā)項目都更復(fù)雜,雖然這個項目的開發(fā)工作實(shí)際不多,編寫的代碼也不多,這個項目也使得本人成長巨大。這個過程也發(fā)現(xiàn)了uC-FS本身的一些BUG,都不是很嚴(yán)重,也反饋給了官方得到了確認(rèn),經(jīng)過這一役也更加確認(rèn)了Micrium產(chǎn)品的可靠性。

代碼

https://github.com/weston-embedded/uC-FS.git

文檔

https://micrium.atlassian.net/wiki/spaces/fsdoc/overview

uC-FS Documentation V40700.pdf

可以直接在線閱讀,也可以下載pdf版本

圖片

NAND 介紹

老規(guī)矩我們需要理論結(jié)合實(shí)踐,先講講NAND相關(guān)知識,NAND的FTL軟件,然后再進(jìn)入正餐使用uC-FS的NAND驅(qū)動。

NAND FLASH不同于NOR FLASH因為其架構(gòu)特性不一樣。

讀: SLC NAND隨機(jī)讀延遲比NOR FLASH高所以一般不適合直接運(yùn)行代碼,但是SLC NAND一般有DRAM的緩存可以解決這個問題,并且可以按照PAGE 2KB或者4KB等讀寫,所以整體吞吐率實(shí)際非常高的,所以網(wǎng)上的一些對比資料上來就說NAND比NOR讀的慢是不對的,確切的來說應(yīng)該是NAND的隨機(jī)讀性能低,但是持續(xù)讀性能高。

寫: NAND的寫吞吐率明顯高于NOR所以適合用于做數(shù)據(jù)存儲。

擦除:NAND的擦除速度同樣的明顯高于NOR。

NAND和NOR的典型參數(shù)對比如下

以下參數(shù)對比自MX29GL512F 和 MX30LF1G08AA,不同廠家不同型號有差異。

特征 NOR SLC NAND
存儲密度 1Mb-2Gb 51Mb-8Gb 存儲領(lǐng)域單位一般用b(位)不用B(字節(jié))
隨機(jī)讀延遲 0.1uS 25uS 隨機(jī)讀NAND延遲大
x8 I/O連續(xù)讀 30MB/S 30MB/S 持續(xù)讀NAND速度不比NOR低
讀PAGE緩存 16B 2048B NAND緩存大,用來降低延遲影響,實(shí)現(xiàn)大數(shù)據(jù)量大吞吐速度
隨機(jī)寫速度 11uS 250uS 隨即寫NAND延遲大
寫PAGE大小 64B 2048B 同讀PAGE緩存存
持續(xù)寫速度 0.5MB/S 8MB/S 持續(xù)寫NAND速度遠(yuǎn)大于NORNAND還有Dual Plane 操作進(jìn)一步提高吞吐率。
擦除 0.6S 2mS NAND速度遠(yuǎn)大于NOR
單元面積 10F^2 4F^2 NAND一個存儲單元面積小所以密度大
工藝 適合更先進(jìn)制程小型化

從以上也可以看出NOR適合容量需求不是特別大,經(jīng)常讀,很少寫,需要隨機(jī)訪問的場景,比如存代碼

NAND適合容量需求大,經(jīng)常讀寫,且是持續(xù)大塊讀寫的場景,比如適合數(shù)據(jù)存儲。

以上性能行為和特征的差異根本原因就是來自于其基本的存儲單元cell陣列結(jié)構(gòu)的不同。

NAND陣列的基本結(jié)構(gòu)是由一組稱為string的存儲元件組成的串聯(lián)結(jié)構(gòu)。每一個string由32或者64個cells緊密的排列, 每一個string都連接到頂部的讀取和IO接線。

而在NOR體系結(jié)構(gòu)中,每一對cells必須連接到頂部接線(要求至少有一個金屬擴(kuò)散觸點(diǎn)連接到每一對cells)。

仔細(xì)對比如下圖的灰色和淺藍(lán)色部分

NOR每2個cells下面必須有觸點(diǎn),所以其空間需求就大了,5F2F=10F^2,而NAND 一條string 32或者64個cell再一起連接到頂部接線所以密度高,2F2F=4F^2

所以NAND的密度比NOR高60%但是綜合考慮NAND的讀寫電路會復(fù)雜一些,所以差異會再小一點(diǎn)。

圖片

除了在面積方面的優(yōu)勢(由于NAND單元結(jié)構(gòu)),NAND技術(shù)更容易縮放(適合縮小到更先進(jìn)的技術(shù)節(jié)點(diǎn))。

NAND和NOR的技術(shù)路線對比如下,可以看出主要的閃存行業(yè)供應(yīng)商都沒有計劃在未來幾年內(nèi)將NOR工藝遷移到45納米以下,而NAND則在不斷追求更先進(jìn)的制程。

圖片

MLC NAND

一個cell劃分為4個等級,4個狀態(tài)可以存儲2bit的數(shù)據(jù),采用多層單元(MLC)技術(shù),可以獲得成本較低的存儲器性能和可靠性。

圖片

SLC和MLC主要區(qū)別在于可靠性和耐用性(壽命)以及相關(guān)的ECC要求。SLC更適合于

工業(yè)用代碼和關(guān)鍵應(yīng)用。SLC版本的密度范圍要小得多。

如下可以看到擦寫次數(shù)100k降低到了5k,差了20倍。

圖片

從MLC又有了TLC,QLC分別一個cell存儲3bit,4bit。

現(xiàn)在又有了3D NAND技術(shù),大家拼疊層,都到200+層數(shù)了,使得大容量NAND越來越便宜。

圖片

對比NAND和NOR的優(yōu)劣勢

NAND NOR
成本
寫速度
接口引腳 并口x8,x16(地址數(shù)據(jù)復(fù)用)SPI/QSPI 并口(引腳多,數(shù)據(jù)地址分開)SPI/QSPI 都有串并接口,并口NOR的引腳多
隨機(jī)讀 延遲大,不適合直接執(zhí)行程序,但是現(xiàn)在的NAND都加了緩存也有適合程序執(zhí)行的型號了
可靠性 RAM NAND可靠性低需要ECC校正
壞塊 NAND在出廠時就有可能有壞塊使用中也會產(chǎn)生,而NOR認(rèn)為幾乎是完美的
供應(yīng) NAND都在拼多層堆疊,反而SLC價格不低波動大,供貨不穩(wěn)定

NAND的讀寫

一般通過一個PAGE的緩存來實(shí)現(xiàn),有些有兩個緩存來實(shí)現(xiàn)ping-pang流水操作

比如下面的Cache register和Data register,緩存內(nèi)部本身是可隨機(jī)讀寫訪問的,緩存寫完再通過命令進(jìn)行真實(shí)的寫。

圖片

而NOR一般讀只有1632字節(jié)的緩存,寫是64256字節(jié)的緩存。

NAND FTL介紹

NAND的特性決定了其驅(qū)動軟件的復(fù)雜性,NAND的讀寫要考慮壞塊管理ECC校驗,磨損均衡。用來實(shí)現(xiàn)這個功能的軟件就叫做FTL(Flash Translation Layer )

現(xiàn)在逐漸流行的SD NAND即是集成了管理固件的NAND芯片,即FTL已經(jīng)寫入了芯片內(nèi),無需應(yīng)用進(jìn)行管理,使用起來非常方便,可以替代TF卡等。

ECC

SLC一般使用ECC用來實(shí)現(xiàn)1位錯誤校正,比較常用,而BCH可以用來實(shí)現(xiàn)多位錯誤校正。

由于隨著制程升高,堆疊升高,MLC,TLC,QLC,3D NAND等都不適合嵌入式領(lǐng)域使用了,因為其要求更多的錯誤位校正能力,需要專門的管理固件。

圖片

ECC等校驗信息一般存于NAND 的PAGE的額外區(qū)域,一般2048B的PAGE 額外有64B用于存儲這些信息,這些區(qū)域一般稱為Spare Area 或OOB(Out Of Bound)。

一般有以下幾種組織形式

圖片

ECC校驗?zāi)芰皖~外空間需求的對應(yīng)

圖片

例如對于1位錯誤校正,使用ECC則

512B有4096b

2^13 >= 4096+13+1

即13位可以表示2^13種情況,4096位數(shù)據(jù)和13位校驗信息只考慮錯1位的情況有4096+13種,還有一種正確的.所以需要2^n >= r + n +1 (其中n位校驗信息位,r位數(shù)據(jù)位)

關(guān)于ECC可以參考uC-CRC也提供了軟件ECC的計算組件,現(xiàn)在一般NAND芯片硬件是帶ECC的。

https://mp.weixin.qq.com/s/FKVvzwL7wzxLJCkx3gOdJQ

壞塊管理

另一個獨(dú)特的NAND特性是壞塊(BB Bad Blocks )的存在。壞塊有不能通過ECC校正來糾正的錯誤,比如多個bit錯誤超過ECC糾正能力,這些塊出廠就被標(biāo)記(一般標(biāo)記在塊的前面的PAGE的OOB區(qū)域)不得使用,數(shù)據(jù)手冊上有最大壞塊數(shù)量的參數(shù)。

為什么是壞塊不是壞PAGE呢,因為擦除是按照塊進(jìn)行的,所以單位是塊。

壞塊由Bad Block Table (BBT) 管理,BBT如果放在RAM中則每次啟動都需要掃描一遍,也可以放在NAND的好塊中,比如最后面的塊中,但是BBT所在的塊也要做壞塊管理并且由于要經(jīng)常更新BBT內(nèi)容也要做磨損均衡處理。

一般一塊新的NAND要避免一開始就進(jìn)行擦除操作,否則壞塊信息會丟失,而是先掃描壞塊信息進(jìn)行存儲。

比如查找BBT所在塊的流程如下

圖片

磨損均衡

磨損均衡就是用空間換壽命,每個塊擦寫次數(shù)有限,大家輪流用使得壽命變長,平衡頻繁寫和不需要頻繁寫的區(qū)域,使得所有塊擦寫次數(shù)保持基本一致。

磨損均衡需要對物理塊Physical Block Address (PBA) 和邏輯塊Logical Block Address (LBA) 進(jìn)行映射,軟件需要維護(hù)該映射表。

磨損均衡可以靜態(tài)或者動態(tài)均衡

動態(tài)均衡

動態(tài)均衡時更新塊時新的數(shù)據(jù)先寫入一個擦寫次數(shù)少的空閑塊中,再更新映射表。原來塊可以擦除設(shè)置為空閑,這種情況有個問題就是沒有更新數(shù)據(jù)的塊可能沒有寫操作就不會參與均衡。

靜態(tài)均衡

靜態(tài)均衡目的是保證所有的塊磨損都趨于一致,包括那些不需要經(jīng)常更新數(shù)據(jù)的塊。

就上面動態(tài)均衡提到的,就算那個塊不需要寫也有可能將他的數(shù)據(jù)挪到其他塊,將這個塊用起來參與到均衡中去。實(shí)際有一些區(qū)域比如code區(qū)域確實(shí)是不想?yún)⑴c均衡的,可以預(yù)留出來不參與靜態(tài)均衡。

靜態(tài)均衡實(shí)際上比動態(tài)均衡實(shí)現(xiàn)更復(fù)雜,但是可以達(dá)到更加明顯的整體均衡,也不是所有的實(shí)現(xiàn)需要實(shí)現(xiàn)靜態(tài)均衡,也有可能兩者綜合使用。

圖片

從NAND啟動

一般SLC可以保證BLOCK0無錯誤,保證其使用壽命內(nèi)不會出錯,一般BLOCK是64個PAGE,比如PAGE大小是2K則有128KB空間。BOOT程序小于該值時可以直接使用,否則boot程序需要考慮后面的壞塊。

有些NAND芯片甚至?xí)訒r直接將BLOCK0加載到緩存,這樣可以直接就讀出,加快啟動速度。NAND一般是不支持直接執(zhí)行XIP的,一般固化在ROM的程序先加載NAND的BLOCK0到RAM中執(zhí)行,有些帶NAND控制器的芯片可能支持直接NAND執(zhí)行。雖然BLOCK0保證正確但是隨著擦寫次數(shù)增多還是有可能出現(xiàn)bit錯誤所以最好還是對BLOCK0進(jìn)行ECC校正處理,這樣就可以保證可靠性。

uC-FS的NAND驅(qū)動

下載代碼

先下載代碼

git clone https://github.com/weston-embedded/uC-FS.git

文件介紹

NAND驅(qū)動代碼位于uC-FS\\uC-FS\\Dev\\NAND下

│ fs_dev_nand.c


│ fs_dev_nand.h


│


├─BSP


│ └─Template


│ bsp_fs_dev_nand_ctrlr_gen.c


│


├─Cfg


│ └─Template


│ fs_dev_nand_cfg.h


│


├─Ctrlr


│ │  fs_dev_nand_ctrlr_gen.c


│ │  fs_dev_nand_ctrlr_gen.h


│ │


│ └─GenExt


│ fs_dev_nand_ctrlr_gen_micron_ecc.c


│ fs_dev_nand_ctrlr_gen_micron_ecc.h


│ fs_dev_nand_ctrlr_gen_soft_ecc.c


│ fs_dev_nand_ctrlr_gen_soft_ecc.h


│ fs_dev_nand_ctrlr_imx28_bch.c


│ fs_dev_nand_ctrlr_imx28_bch.h


│


└─Part


fs_dev_nand_part_onfi.c


fs_dev_nand_part_onfi.h


fs_dev_nand_part_static.c


fs_dev_nand_part_static.h
BSP\\Template\\bsp_fs_dev_nand_ctrlr_gen.c Bsp層,之前是針對并口NAND進(jìn)行的設(shè)計,我將其改為了更抽象的讀寫擦除接口,更適合各種接口
Cfg\\Template\\fs_dev_nand_cfg.h 配置文件
Ctrlr\\fs_dev_nand_ctrlr_gen.c/h 控制層用于實(shí)現(xiàn)快的讀寫擦除等接口,調(diào)用bsp層接口
Ctrlr\\GenExt\\fs_dev_nand_ctrlr_gen_micron_ecc.c/hfs_dev_nand_ctrlr_gen_soft_ecc.c/hfs_dev_nand_ctrlr_imx28_bch.c/h Xxx_ecc,_bch等擴(kuò)展控制層實(shí)現(xiàn)ECC校驗等
Part\\fs_dev_nand_part_onfi.c/hfs_dev_nand_part_static.c/h 芯片相關(guān)的信息,ONFI是通過讀芯片的參數(shù)PAGE自動獲取參數(shù),static則是手動傳入?yún)?shù)
fs_dev_nand.c/h 核心算法代碼,調(diào)用控制層的接口進(jìn)行讀寫擦除

依賴

見移植修改后的nand_port.c nand_port.h

參考文檔

https://micrium.atlassian.net/wiki/spaces/fsdoc/pages/488006/NAND+Flash+Driver

uC-FS的NAND驅(qū)動修改移植到PC

有時我們希望只使用uC-FS的NAND驅(qū)動本身,不需要其他組件,也不希望依賴于uC-xxx。我這里就對uC-FS的NAND驅(qū)動進(jìn)行了剝離,可以完全獨(dú)立使用,不依賴其他組件。且移植到了PC上進(jìn)行仿真測試。如果需要移植到其他環(huán)境只需要實(shí)現(xiàn)bsp_fs_dev_nand_ctrlr_gen.c的讀寫擦除接口和nand_port.c/nand_port.h即可。

見代碼庫

https://github.com/qinyunti/uC-NAND-PC.git

Linux下使用

Windows下的gcc工具鏈也一樣。

編譯

make

創(chuàng)建測試bin文件代表FLASH

touch nand.bin

運(yùn)行測試

./nand

打印如下:

nand test


NAME:nand


FS_NAND_Init ok


NAND FLASH FOUND: Name : "nand:744:"


Sec Size   : 512 bytes


Size       : 247296 sectors


Update blks: 10


FS_NAND_LowMountHandler(): Can't read device header.


FS_NAND_Open err 314


FS_NAND_BlkEraseHandler(): Erase block 0.


FS_NAND_HdrWr(): Creating device header at block 0.


Marking blk 1 dirty.


Marking blk 2 dirty.


Marking blk 3 dirty.


Marking blk 4 dirty.


Marking blk 5 dirty.


Marking blk 6 dirty.


Marking blk 7 dirty.


Marking blk 8 dirty.


Marking blk 9 dirty.


... ...


Marking blk 1019 dirty.


Marking blk 1020 dirty.


Marking blk 1021 dirty.


Marking blk 1022 dirty.


Marking blk 1023 dirty.


Adding blk 1 to avail blk tbl at ix 0.


Adding blk 2 to avail blk tbl at ix 1.


Adding blk 3 to avail blk tbl at ix 2.


Adding blk 4 to avail blk tbl at ix 3.


FS_NAND_BlkGetAvailFromTbl(): Warning -- unable to get a committed available block table entry -- using an uncommitted entry.


FS_NAND_BlkEnsureErased(): No need to erase block 1 (not used).


Metadata sector 0 commit at offset 0 of block 1 (seq 0).


Removing blk 1 from avail blk tbl at ix 0.


Metadata sector 1 commit at offset 1 of block 1 (seq 0).


FS_NAND_LowFmtHandler(): Low-level fmt'ing complete.


Found meta block at physical block 1 with ID 0.


FS_NAND_MetaBlkFind(): Found metadata block at block index 1.


FS_NAND_LowMountHandler(): Low level mount succeeded.


FS_DEV_IO_CTRL_LOW_FMT ok


FS_DEV_IO_CTRL_REFRESH ok


FS_NAND_Wr: start=0, cnt=10.


Adding blk 5 to avail blk tbl at ix 0.


Metadata sector 0 commit at offset 2 of block 1 (seq 0).


FS_NAND_BlkEnsureErased(): No need to erase block 4 (not used).


Create UB 0 at phy ix 4.


Associate update blk 0 with blk ix logical 0.


Wr sector 0 in SUB 0 at sec offset 0.


Removing blk 4 from avail blk tbl at ix 3.


Wr sector 1 in SUB 0 at sec offset 1.


Wr sector 2 in SUB 0 at sec offset 2.


Wr sector 3 in SUB 0 at sec offset 3.


Wr sector 4 in SUB 0 at sec offset 4.


Wr sector 5 in SUB 0 at sec offset 5.


Wr sector 6 in SUB 0 at sec offset 6.


Wr sector 7 in SUB 0 at sec offset 7.


Wr sector 8 in SUB 0 at sec offset 8.


Wr sector 9 in SUB 0 at sec offset 9.


Metadata sector 0 commit at offset 3 of block 1 (seq 0).


Metadata sector 1 commit at offset 4 of block 1 (seq 0).


FS_NAND_Wr ok


FS_NAND_Rd ok


test ok

Windows下使用

使用Visual Studio 2022 雙擊打開NAND_VS\\NAND_VS.sln 選擇Debug,X86目標(biāo)構(gòu)建,運(yùn)行。同樣需要先在NAND_VS下創(chuàng)建空白文件nand.bin

總結(jié)

以上介紹了NAND FTL的一些基本原理,同時移植剝離了uC-FS的NAND驅(qū)動使得其可以獨(dú)立使用,且移植性更好。關(guān)于uC-FS的NAND的驅(qū)動的詳細(xì)細(xì)節(jié)和原理,后面會分1到2篇文章繼續(xù)講解。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5125

    文章

    19438

    瀏覽量

    313070
  • NAND
    +關(guān)注

    關(guān)注

    16

    文章

    1713

    瀏覽量

    137613
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4880

    瀏覽量

    69995
  • Micrium
    +關(guān)注

    關(guān)注

    1

    文章

    7

    瀏覽量

    11822
收藏 人收藏

    評論

    相關(guān)推薦

    Micrium全家uC-FS: 0x02 NAND FTL算法原理詳解

    uC-FSNAND驅(qū)動實(shí)現(xiàn)基于一篇論文:《KAST: K-Associative Sector Translation for NAND Flash Memory in Real-Time Systems》所以有必要先介紹下該
    的頭像 發(fā)表于 06-08 10:55 ?2023次閱讀
    <b class='flag-5'>Micrium</b><b class='flag-5'>全家</b><b class='flag-5'>桶</b><b class='flag-5'>之</b><b class='flag-5'>uC-FS</b>: <b class='flag-5'>0x</b>02 <b class='flag-5'>NAND</b> <b class='flag-5'>FTL</b>算法原理詳解

    Micrium全家uC-CRC: 0x02 CRC

    前一篇我們講了Micrium全家uC-CRC: 0x01 ECC:https://mp.we
    的頭像 發(fā)表于 06-08 11:00 ?1468次閱讀
    <b class='flag-5'>Micrium</b><b class='flag-5'>全家</b><b class='flag-5'>桶</b><b class='flag-5'>之</b><b class='flag-5'>uC</b>-CRC: <b class='flag-5'>0x</b>02 CRC

    Micrium全家uC-CRC: 0x01 ECC

    我們這一篇來講講Micrium全家uC-CRC。該代碼庫提供了CRC算法進(jìn)行錯誤檢測EDC,使用HAMMING算法實(shí)現(xiàn)ECC錯誤糾正。ECC算法在
    的頭像 發(fā)表于 06-08 11:04 ?1437次閱讀
    <b class='flag-5'>Micrium</b><b class='flag-5'>全家</b><b class='flag-5'>桶</b><b class='flag-5'>之</b><b class='flag-5'>uC</b>-CRC: <b class='flag-5'>0x01</b> ECC

    Bridge Control Panel工具為什么只能發(fā)0X09 0X01命令呢?

    這是 Bridge Control Panel 工具 我現(xiàn)在 I2C 讀命令 下發(fā)數(shù)據(jù)是 "0x09 0x01"(0x09 是 Slave 地址) 我能下發(fā) 0X
    發(fā)表于 07-23 08:10

    程序中if(P1&0x01)怎么理解?

    本帖最后由 godiszc 于 2012-8-21 18:25 編輯 if(x>y)或者if(a==6)像這種條件語句很好理解,但問題是如圖所示的if(P1&0x01)怎么理解?這條語句只是P1和0x01求與,但沒有說兩者
    發(fā)表于 08-21 18:22

    51單片機(jī)提問一個小問題 P0 &= ~0x01 直接寫P0 = 0xfe區(qū)別

    &= ~0x01 #define RED_EW_OFF()P0 |=0x01#define YELLOW_EW_BLINK() P0 ^= 0x
    發(fā)表于 04-08 12:52

    請問34Z100G1讀寫控制命令0x00和0x01用法上有什么不同?

    34Z100G1 讀寫控制命令0x00和0x01用法上有什么不同?具體怎么使用的?
    發(fā)表于 03-28 06:06

    ST95HF錯誤代碼:0x87 0x01 0x90

    嗨先生/女士,我從ST95HF收到錯誤代碼:0x87 0x01 0x90,我可以知道這意味著什么嗎?上面的代碼沒有解釋。 ST95HF數(shù)據(jù)表DoclD025630 Rev4中的解釋代碼僅為0x
    發(fā)表于 08-09 08:14

    為什么OLED要設(shè)置顯示時的起始列地址低四位0x01和高四位0x10?

    為什么OLED要設(shè)置顯示時的起始列地址低四位0x01和高四位0x10呢,什么叫頁面選址模式呢oid LCD_Set_Pos(unsigned char x, unsigned char y
    發(fā)表于 09-16 00:09

    嵌入式文件系統(tǒng)μC/FS的日志使用

    、添加fs_fat_journal.c文件到工程中,該文件位于$:\Micrium\Software\uC-FS\FAT($:\表示Micrium軟件目錄)。2、在
    發(fā)表于 09-19 16:41

    SD2.0 CMD58返回0x01

    按照例程發(fā)送CMD58之后返回的狀態(tài)應(yīng)該是0x00,我的SD咋個返回0x01呢?例程編譯后在開發(fā)板上運(yùn)行的很正常啊
    發(fā)表于 03-10 04:35

    相比React全家選擇Vue2有何優(yōu)劣?

    相比 React 全家,選擇 Vue2 有何優(yōu)劣?
    發(fā)表于 06-01 05:55

    NRF2401那里的0x01,和0x1a是什么意思?

    我在看原子哥的NRF2401的教程的時候,碰到了幾個問題,自己想了好幾天,還是不懂。問題1、我看到配置里有這樣的語句,如圖,那里的0x01,和0x1a是什么意思,我看注釋里說低5位對應(yīng)著通道0
    發(fā)表于 06-03 10:07

    請教大神單片機(jī)中的0x00和0x01有哪些區(qū)別呢

    請教大神單片機(jī)中的0x00和0x01有哪些區(qū)別呢?
    發(fā)表于 01-19 06:18

    講講Micrium全家uC-CRC算法

    我們這一篇來講講Micrium全家uC-CRC。該代碼庫提供了CRC算法進(jìn)行錯誤檢測EDC,使用HAMMING算法實(shí)現(xiàn)ECC錯誤糾正。
    的頭像 發(fā)表于 05-04 10:47 ?1086次閱讀
    講講<b class='flag-5'>Micrium</b><b class='flag-5'>全家</b><b class='flag-5'>桶</b>的<b class='flag-5'>uC</b>-CRC算法