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

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

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

flash存儲(chǔ)的內(nèi)容和代碼實(shí)現(xiàn)

Linux閱碼場(chǎng) ? 來(lái)源: Linux閱碼場(chǎng) ? 作者:尹忠凱 ? 2021-05-10 14:14 ? 次閱讀

文章目錄

UBI簡(jiǎn)介

flash存儲(chǔ)的內(nèi)容

代碼實(shí)現(xiàn)

將flash數(shù)據(jù)讀到內(nèi)存

組織數(shù)據(jù)結(jié)構(gòu)

volume & EBA子系統(tǒng)初始化

wear-leveling子系統(tǒng)初始化

UBI層操作

舉個(gè)例子

擦寫(xiě)均衡

擦寫(xiě)時(shí)機(jī)

擦寫(xiě)條件

03 正文

UBI簡(jiǎn)介

f8dd2160-b03c-11eb-bf61-12bb97331649.png

UBI全稱是Unsorted Block Images,上圖為UBI在系統(tǒng)中的層次結(jié)構(gòu),最下面是flash層(包括flash控制器,各個(gè)flash驅(qū)動(dòng)代碼,spi-mem層等);MTD層是對(duì)flash層的抽象,一個(gè)flash可能被劃分成不同的分區(qū),每一個(gè)分區(qū)都會(huì)對(duì)應(yīng)一個(gè)MTD設(shè)備;UBI層是基于MTD層之上的更高層,UBI層抽象出一個(gè)個(gè)邏輯擦寫(xiě)塊,每個(gè)邏輯擦寫(xiě)塊都有一個(gè)物理擦寫(xiě)塊與之前對(duì)應(yīng),有了這個(gè)映射,我們就可以加一些軟件算法,達(dá)到擦寫(xiě)均衡的目的,從而提高flash的使用壽命;再往上是基于UBI層實(shí)現(xiàn)和各種文件系統(tǒng),比如UBIFS。

flash存儲(chǔ)的內(nèi)容

首先介紹幾個(gè)概念:

PEB:physical eraseblocks 也就是對(duì)應(yīng)flash上的一個(gè)擦寫(xiě)塊

LEB:logical eraseblocks 軟件上的概念

Volume:卷

f8eb8f34-b03c-11eb-bf61-12bb97331649.png

如上圖為flash中(或者說(shuō)flash一個(gè)分區(qū)中)數(shù)據(jù)組織結(jié)構(gòu):

ubi層對(duì)flash的管理是以擦寫(xiě)塊為單位的,LEB對(duì)應(yīng)軟件上的概念,PEB對(duì)應(yīng)flash上一個(gè)實(shí)實(shí)在在的擦寫(xiě)塊,每一個(gè)LEB對(duì)應(yīng)一個(gè)PEB。

往上看多個(gè)LEB可以組成一個(gè)volume,也就是說(shuō),可以根據(jù)不同的功能,將LEB劃分到不同的卷中;其中valume-layout是一個(gè)ubi內(nèi)部使用的卷,用來(lái)存放該MTD設(shè)備上所劃分的各個(gè)卷的信息,其包含兩個(gè)LEB,它們存儲(chǔ)的內(nèi)容是一樣,互為備份。

往下看每個(gè)PEB的內(nèi)容包含3部分ech(erase counter header),vidh(volume identifier header),data。下面會(huì)介紹具體含義。

代碼實(shí)現(xiàn)

linux對(duì)UBI層的代碼實(shí)現(xiàn)大致可以總結(jié)為3個(gè)方面:

首先數(shù)據(jù)是存儲(chǔ)在flash中的,因此需要將flash中的相關(guān)信息讀到內(nèi)存中,同時(shí)也可以檢查出flash中的壞塊

數(shù)據(jù)讀到內(nèi)存后,需要按照內(nèi)部的邏輯關(guān)系組織起來(lái)(比如將正在使用的PEB放到紅黑樹(shù)上管理起來(lái),空閑的PEB也放到紅黑樹(shù)上管理起來(lái))

在內(nèi)存中有了這些數(shù)據(jù)的關(guān)系后,就可以對(duì)其進(jìn)行操作(比如讀寫(xiě)操作,volume增加,刪除,擴(kuò)容等操作,擦寫(xiě)均衡操作)

將flash數(shù)據(jù)讀到內(nèi)存

f8fbcf8e-b03c-11eb-bf61-12bb97331649.png

UBI初始化時(shí)代碼調(diào)用流程如上圖,最終會(huì)調(diào)用scan_all() 函數(shù), scan_all() 函數(shù)會(huì)遍歷該MTD設(shè)備

中的每一個(gè)PEB,從中讀出ech和vidh,它們的定義如下。

f915eff4-b03c-11eb-bf61-12bb97331649.png

ech的定義如上,其中:

ec:表示該P(yáng)EB被擦寫(xiě)的次數(shù),借助該字段我們就能夠找出被擦寫(xiě)次數(shù)最少的PEB,從而達(dá)到擦寫(xiě)均衡的目的

vid_hdr_offset:表示vidh在該P(yáng)EB中的偏移位置

data_offset:表示實(shí)際數(shù)據(jù)在該P(yáng)EB中的偏移位置

f921ab00-b03c-11eb-bf61-12bb97331649.png

vidh的定義如上,其中:

vol_id:表示該P(yáng)EB屬于那一個(gè)volume

lmun:表示LEB在volume中的編號(hào),該字段與PEB在MTD設(shè)備中的編號(hào)形成映射關(guān)系通過(guò)對(duì)MTD設(shè)備的每個(gè)PEB進(jìn)行遍歷,可以得知各個(gè)PEB的情況,或是被使用的,或是空閑狀態(tài),或者已經(jīng)損壞,這些信息會(huì)被臨時(shí)記錄在struct ubi_attach_info 結(jié)構(gòu)中,遍歷過(guò)程中的具體細(xì)節(jié),可以參考scan_all() 函數(shù)。

組織數(shù)據(jù)結(jié)構(gòu)

遍歷PEB后,會(huì)將flash信息保存在臨時(shí)的結(jié)構(gòu)struct ubi_attach_info 中,接下來(lái)會(huì)將struct ubi_attach_info 中的臨時(shí)信息保存到全局結(jié)構(gòu)struct ubi_device *ubi_devices 中,代碼如下:

f9304db8-b03c-11eb-bf61-12bb97331649.png

分為三個(gè)步驟,分別是對(duì)volume的初始化,對(duì)wear-leveling子系統(tǒng)的初始化,對(duì)eba(Eraseblock Association)子系統(tǒng)的初始化;下面我們分別看下。

volume & EBA子系統(tǒng)初始化

f939f3e0-b03c-11eb-bf61-12bb97331649.png

前面有介紹到volume-layout是UBI內(nèi)部使用的一個(gè)卷,其包含兩個(gè)LEB(互為備份),對(duì)應(yīng)PEB中的數(shù)據(jù)內(nèi)容如上圖,data(灰色)部分是一個(gè)struct ubi_vtbl_record 結(jié)構(gòu)數(shù)組,記錄了當(dāng)前UBI設(shè)備所有卷的信息, ubi_read_volume_table() 函數(shù)先遍歷臨時(shí)結(jié)構(gòu)struct ubi_attach_info 找出volumelayout所在PEB,然后 讀出struct ubi_vtbl_record 結(jié)構(gòu)數(shù)組并保存到內(nèi)存中,也就是struct ubi_device 的struct ubi_volume *volumes[] 字段中,初始化后的數(shù)組結(jié)構(gòu)如下圖,其中struct ubi_volume *volumes[] 是一個(gè)指針數(shù)組,數(shù)組中的每一個(gè)元素都是struct ubi_volume 結(jié)構(gòu)(詳細(xì)過(guò)程見(jiàn)ubi_read_volume_table() 函數(shù))。

f9442d42-b03c-11eb-bf61-12bb97331649.png

在struct ubi_volume 結(jié)構(gòu)體中,有一個(gè)比較重要的字段struct ubi_eba_table *eba_tbl ,該字段記錄了當(dāng)前volume中所有LEB與PEB的映射關(guān)系,其中struct ubi_eba_entry *entries 是一個(gè)數(shù)組結(jié)構(gòu),每一個(gè)元素對(duì)應(yīng)一個(gè)struct ubi_eba_table 結(jié)構(gòu)體, struct ubi_eba_entry *entries 數(shù)

組的下標(biāo)對(duì)應(yīng)于LEB的編號(hào),數(shù)組元素的內(nèi)容對(duì)應(yīng)EB的編號(hào),這樣就將LEB與PEB關(guān)聯(lián)起來(lái)了(詳細(xì)過(guò)程見(jiàn)ubi_eba_init() 函數(shù))。

wear-leveling子系統(tǒng)初始化

在UBI中將PEB分為4種情況,正在使用、空閑狀態(tài)、需要擦除、已經(jīng)損壞,各個(gè)狀態(tài)的PEB被放到不同的紅黑樹(shù)中管理。在ubi_eba_init() 函數(shù)中,會(huì)先分配一個(gè)struct ubi_wl_entry 指針數(shù)組并存儲(chǔ)在sruct ubi_wl_entry **lookuptbl 字段中,數(shù)組下標(biāo)為PEB的編號(hào),數(shù)組內(nèi)容記錄了PEB的擦寫(xiě)次

數(shù)與編號(hào)信息,每一個(gè)PEB都有一個(gè)這樣的結(jié)構(gòu)與之對(duì)應(yīng)如下圖。

f94dd1a8-b03c-11eb-bf61-12bb97331649.png

另外各個(gè)PEB還根據(jù)狀態(tài)放到不同的紅黑樹(shù)管理起來(lái),上圖畫(huà)出了used, free, scrub三種狀態(tài)的紅黑樹(shù),其中紅黑樹(shù)是以擦寫(xiě)次數(shù)為順序排列的,最小的擦寫(xiě)次數(shù)排列在最左邊,如果擦寫(xiě)次數(shù)相同,則比較PEB的編號(hào),編號(hào)小的排在樹(shù)的左邊,而對(duì)應(yīng)的值為struct ubi_wl_entry 指針數(shù)組中的一個(gè)元素。

調(diào)用ubi_eba_init() 函數(shù)后,wear-leveling子系統(tǒng)也就初始化完畢,在內(nèi)存中會(huì)形成上圖中的數(shù)組關(guān)系。

UBI層操作

經(jīng)過(guò)前面的初始化,各個(gè)數(shù)據(jù)的結(jié)構(gòu)關(guān)系已經(jīng)保存在內(nèi)存中了,因此UBI層的操作其實(shí)就是對(duì)內(nèi)存中這些數(shù)據(jù)的操作。

f95e8890-b03c-11eb-bf61-12bb97331649.png

從用戶空間角度看,UBI初始化后會(huì)對(duì)應(yīng)三類(lèi)字符設(shè)備,分別為/dev/ubi_ctrl 、/dev/ubix (x = 0, 1, 2.。.), /dev/ubix_y (x = 0, 1, 2.。., y = 0, 1, 2),它們對(duì)應(yīng)的操作函數(shù)如下代碼。

f96bacd2-b03c-11eb-bf61-12bb97331649.png

f979907c-b03c-11eb-bf61-12bb97331649.png

ubi_vol_cdev_operations:是針對(duì)某個(gè)volume(/dev/ubi1_0等)來(lái)操作的,從volume的角度只能看到其中包含的PEB,因此它的操作也是圍繞PEB進(jìn)行的。

ubi_cdev_operations:是針對(duì)UBI設(shè)備(/deb/ubi0等)進(jìn)行操作的,從UBI設(shè)備的角度可以看到不同的volume,因此可以對(duì)volume進(jìn)行創(chuàng)建,刪除,擴(kuò)容等操作。

ubi_ctrl_cdev_operations:是針對(duì)UBI層(/dev/ubi_ctrl)的操作,從該角度可以看到UBI設(shè)備,因此可以對(duì)UBI設(shè)備進(jìn)行創(chuàng)建,刪除操作。

舉個(gè)例子

需求:假如我們想要對(duì)/dev/ubi1_0 這個(gè)volume進(jìn)行擴(kuò)容,我們應(yīng)用怎樣操作?

用戶空間將volume_id,size兩個(gè)參數(shù)傳遞到內(nèi)核空間

在內(nèi)核空間我們根據(jù)volume_id在struct ubi_volume *volumes[] 數(shù)組中找到volume的handler

因?yàn)樾枰獢U(kuò)容(要分配更多的LEB),所以要重新分配struct ubi_eba_table *eba_tbl 數(shù)組,并將舊數(shù)組中的數(shù)據(jù)拷貝到新數(shù)組中

對(duì)于新增的LEB,我們需要從free樹(shù)上申請(qǐng),建立LEB到PEB的映射關(guān)系并保存到struct ubi_eba_table *eba_tbl 數(shù)組,另外還需要更新PEB中ech和vidh,表明該P(yáng)EB屬于那個(gè)volume

上面這一系列操作是我自己的想法,并非kernel實(shí)現(xiàn)代碼(具體實(shí)現(xiàn)可以參數(shù)ubi_cdev_ioctl() 函數(shù))。這里想表達(dá)的意思是,在UBI初始化完成后,在內(nèi)存中已經(jīng)存在了各個(gè)volume,各個(gè)LEB/PEB之間的關(guān)系,因此對(duì)于UBI的操作,理論上我們是都可以完成的,所差的只是代碼實(shí)現(xiàn);程序=算法+數(shù)組結(jié)構(gòu),這里的數(shù)組結(jié)構(gòu)已經(jīng)有了,而算法就是UBI層的各種操作,這里的代碼其實(shí)每個(gè)人都可以實(shí)現(xiàn)的,只不過(guò)有好有壞,所幸kernel已經(jīng)幫我們實(shí)現(xiàn)了,我們可以參考學(xué)習(xí)。其實(shí)別人寫(xiě)的文章只能提供個(gè)大概,真正的細(xì)節(jié)只有在源碼中才能獲得。

擦寫(xiě)均衡

flash的擦寫(xiě)塊都是有壽命限制的,如果頻繁的擦寫(xiě)flash的某一個(gè)PEB,很快這個(gè)PEB就會(huì)損壞,而擦寫(xiě)均衡的目的就是將擦除操作平均分配到整個(gè)flash,這樣就能提高flash的使用壽命。那怎樣將擦除操作平均分配到整個(gè)flash呢,要達(dá)到這個(gè)條件還是有些難度的,因此我們退一步,將條件修改為PEB的最大擦寫(xiě)次數(shù)與最小次數(shù)的的差值小于某個(gè)值。

f9d86a52-b03c-11eb-bf61-12bb97331649.png

比如flash中包含20個(gè)PEB,其中數(shù)字表示該P(yáng)EB被擦寫(xiě)的次數(shù),我們約定擦寫(xiě)次數(shù)的差值最大為15,現(xiàn)在flash中PEB的最小與最大擦寫(xiě)次數(shù)分別為10、39,由于超過(guò)門(mén)限值,因此需要我們想一些方法,增加擦寫(xiě)次數(shù)為10的PEB被擦寫(xiě)的機(jī)會(huì),減少擦寫(xiě)次數(shù)為39的PEB被擦寫(xiě)的機(jī)會(huì),從而使整個(gè)flash的擦寫(xiě)次數(shù)趨于平均。具體的實(shí)現(xiàn)后面會(huì)介紹。

擦寫(xiě)時(shí)機(jī)

linux kernel會(huì)在下面兩個(gè)位置調(diào)用擦寫(xiě)均衡:

wear-leveling子系統(tǒng)初始化完成時(shí)會(huì)檢查一次是否需要擦寫(xiě)均衡,此時(shí)是一個(gè)初始狀態(tài),是檢查的一個(gè)時(shí)機(jī)。

當(dāng)要擦除某個(gè)PEB的時(shí)候,此時(shí)擦寫(xiě)次數(shù)會(huì)增加,有可能達(dá)到擦寫(xiě)均衡的要求,此時(shí)也是一個(gè)檢查的時(shí)機(jī)。

擦寫(xiě)條件

除了上面的調(diào)用時(shí)機(jī),擦寫(xiě)均衡還有一些其它的條件限制,如下圖為擦寫(xiě)均衡的流程圖:

f9f1deba-b03c-11eb-bf61-12bb97331649.png

當(dāng)scrub紅黑樹(shù)上有節(jié)點(diǎn)時(shí),一定需要進(jìn)行擦寫(xiě)均衡。在遍歷flash的每個(gè)PEB時(shí),如果發(fā)現(xiàn)在從flash中讀出的數(shù)據(jù)有位翻轉(zhuǎn)的情況,就會(huì)加上scrub標(biāo)志,并放到scrub紅黑樹(shù)上維護(hù)起來(lái),表示該P(yáng)EB需要被擦寫(xiě);在擦寫(xiě)均衡時(shí),先取出scrub樹(shù)最左邊節(jié)點(diǎn)e1,再?gòu)膄ree樹(shù)中找一個(gè)合適的節(jié)點(diǎn)e2,然后讀取e1對(duì)應(yīng)PEB的數(shù)據(jù),如果讀取的數(shù)據(jù)還有問(wèn)題,就會(huì)結(jié)束本次擦寫(xiě);如果沒(méi)有問(wèn)題就會(huì)把e1數(shù)據(jù)copy到e2位置,并擦除e1數(shù)據(jù)完成本次擦寫(xiě)均衡操作。

當(dāng)scrub樹(shù)上沒(méi)有節(jié)點(diǎn)時(shí),會(huì)從used樹(shù)上取出最左邊節(jié)點(diǎn)e1,并從free樹(shù)上找一個(gè)合適的節(jié)點(diǎn)e2,然后檢查e2與e1的PEB擦寫(xiě)次數(shù)的差值是否大于門(mén)限值,如果大于,則將e1數(shù)據(jù)copy到e2位置并擦除e1數(shù)據(jù)完成本次擦寫(xiě)。為什么這樣做,原因是used樹(shù)中的節(jié)點(diǎn)已經(jīng)被初始化過(guò)(先整個(gè)擦除,然后寫(xiě)入ech和vidh,后面再寫(xiě)入數(shù)據(jù)也不需要擦寫(xiě))所以不會(huì)有擦除操作,在free樹(shù)上的節(jié)點(diǎn),在被使用前需要擦除一次,所以把擦寫(xiě)次數(shù)大的PEB放到used樹(shù)上減少被擦寫(xiě)的機(jī)會(huì),把擦寫(xiě)次數(shù)小的節(jié)點(diǎn)放到free樹(shù)上增加被擦寫(xiě)的機(jī)會(huì),這樣就達(dá)到了擦寫(xiě)均衡的目的。

另外在free樹(shù)上選擇一個(gè)合適的節(jié)點(diǎn),什么是適合和節(jié)點(diǎn)?最簡(jiǎn)單的方法就是從free樹(shù)的最右邊拿一上節(jié)點(diǎn)(擦寫(xiě)次數(shù)最大的節(jié)點(diǎn)),然后與used樹(shù)上取下的最左邊的節(jié)點(diǎn)比較,看看差值是否超過(guò)門(mén)限值。但實(shí)際情況可能會(huì)更復(fù)雜些,如下代碼29行,是kernel中在free樹(shù)上選擇節(jié)點(diǎn)的方法,其限制了最大擦寫(xiě)次數(shù)為free樹(shù)最左側(cè)節(jié)點(diǎn) + WL_FREE_MAX_DIFF,看上面的注釋說(shuō)在某些情況下會(huì)出現(xiàn)不斷擦寫(xiě)某一個(gè)或幾個(gè)PEB的情況,所以作了這樣一個(gè)限制。(沒(méi)有想道是什么情況)

fa1d997e-b03c-11eb-bf61-12bb97331649.png

fa2f68ac-b03c-11eb-bf61-12bb97331649.png

原文標(biāo)題:尹忠凱: 針對(duì)Flash的Linux UBI子系統(tǒng)代碼深度分析

文章出處:【微信公眾號(hào):Linuxer】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

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

    關(guān)注

    10

    文章

    1614

    瀏覽量

    147655
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4226

    瀏覽量

    85578

原文標(biāo)題:尹忠凱: 針對(duì)Flash的Linux UBI子系統(tǒng)代碼深度分析

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于NXP MCXA153 MCU實(shí)現(xiàn)RT-Thread的MTD NOR Flash驅(qū)動(dòng)

    在嵌入式系統(tǒng)中,片上Flash存儲(chǔ)器是一個(gè)關(guān)鍵組件,用于存儲(chǔ)程序代碼和關(guān)鍵數(shù)據(jù)。本文將詳細(xì)介紹如何在NXPMCXA153 MCU上實(shí)現(xiàn)RT-
    的頭像 發(fā)表于 11-09 14:00 ?108次閱讀
    基于NXP MCXA153 MCU<b class='flag-5'>實(shí)現(xiàn)</b>RT-Thread的MTD NOR <b class='flag-5'>Flash</b>驅(qū)動(dòng)

    鐵電存儲(chǔ)器和Flash的區(qū)別

    鐵電存儲(chǔ)器(Ferroelectric RAM, FRAM)與閃存(Flash)是兩種不同類(lèi)型的非易失性存儲(chǔ)器,它們?cè)诠ぷ髟怼⑿阅芴攸c(diǎn)、應(yīng)用場(chǎng)景等方面存在顯著的差異。
    的頭像 發(fā)表于 09-29 15:25 ?523次閱讀

    物聯(lián)網(wǎng)行業(yè)存儲(chǔ)方案詳解_SPI NOR Flash

    SPI NOR FLASH存儲(chǔ)器在初始響應(yīng)和啟動(dòng)時(shí)提供高可靠性,并具有低時(shí)延。這一特性對(duì)于物聯(lián)網(wǎng)設(shè)備至關(guān)重要,因?yàn)槲锫?lián)網(wǎng)設(shè)備通常需要快速啟動(dòng)并穩(wěn)定運(yùn)行,以確保數(shù)據(jù)的實(shí)時(shí)傳輸和處理。 2、直接執(zhí)行代碼的能力 SPI NOR
    的頭像 發(fā)表于 09-24 14:39 ?202次閱讀
    物聯(lián)網(wǎng)行業(yè)<b class='flag-5'>存儲(chǔ)</b>方案詳解_SPI NOR <b class='flag-5'>Flash</b>

    EEPROM與Flash存儲(chǔ)器的區(qū)別

    可編程只讀存儲(chǔ)器)和Flash存儲(chǔ)器是兩種常見(jiàn)的非易失性存儲(chǔ)器,它們具有各自的特點(diǎn)和應(yīng)用場(chǎng)景。本文將深入分析和比較EEPROM與Flash
    的頭像 發(fā)表于 05-23 16:35 ?5081次閱讀

    佰維存儲(chǔ)推出自研工規(guī)級(jí)寬溫SPI NOR Flash產(chǎn)品—TGN298系列

    近日,佰維存儲(chǔ)(股票代碼:688525)推出了自研工規(guī)級(jí)寬溫SPI NOR Flash產(chǎn)品——TGN298系列。
    的頭像 發(fā)表于 05-16 10:09 ?398次閱讀
    佰維<b class='flag-5'>存儲(chǔ)</b>推出自研工規(guī)級(jí)寬溫SPI NOR <b class='flag-5'>Flash</b>產(chǎn)品—TGN298系列

    STM32片上flash能否讀取正在運(yùn)行的代碼內(nèi)容

    如題 小弟想請(qǐng)教下大家 STM32片上flash的讀取問(wèn)題。舉個(gè)例子: 函數(shù)的功能是 讀取片上flash 0x0800_1000~0x0800_2000的存儲(chǔ)內(nèi)容 函數(shù)
    發(fā)表于 04-16 07:22

    求助,關(guān)于SPC560D單片機(jī)flash代碼分段存儲(chǔ)問(wèn)題求解

    flash區(qū)域,把程序內(nèi)一些模塊放在不能跳轉(zhuǎn)的flash區(qū)域,但這樣做導(dǎo)致了用戶程序不能運(yùn)行,請(qǐng)問(wèn)這樣做為什么不可行?代碼必須連續(xù)存儲(chǔ)才能運(yùn)行嗎?
    發(fā)表于 04-07 08:13

    Flash存儲(chǔ)芯片:NOR Flash、NAND Flash、UFS和eMMC的比較與解析

    方式類(lèi)似于常規(guī)的存儲(chǔ)器,可以使用隨機(jī)訪問(wèn)方式讀取和寫(xiě)入數(shù)據(jù)。而NAND Flash則使用頁(yè)式存儲(chǔ)方式,需要按頁(yè)順序順序讀取和寫(xiě)入。   速度 NOR Flash的讀取速度相對(duì)較快,可以
    發(fā)表于 04-03 12:05

    Flash存儲(chǔ)芯片:NOR Flash、NAND Flash、UFS和eMMC的比較與解析

    前言 在數(shù)字化時(shí)代的今天,數(shù)據(jù)的存儲(chǔ)和管理變得越來(lái)越重要。各種各樣的存儲(chǔ)技術(shù)應(yīng)運(yùn)而生,以滿足不同的使用場(chǎng)景和需求。其中,Flash存儲(chǔ)芯片以其非易失性、可擦寫(xiě)性和可編程性等優(yōu)勢(shì),占據(jù)了
    的頭像 發(fā)表于 04-03 12:02 ?4023次閱讀
    <b class='flag-5'>Flash</b><b class='flag-5'>存儲(chǔ)</b>芯片:NOR <b class='flag-5'>Flash</b>、NAND <b class='flag-5'>Flash</b>、UFS和eMMC的比較與解析

    瑞薩Flash示例程序01型SC版本(代碼Flash)應(yīng)用說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《瑞薩Flash示例程序01型SC版本(代碼Flash)應(yīng)用說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 02-19 13:48 ?0次下載
    瑞薩<b class='flag-5'>Flash</b>示例程序01型SC版本(<b class='flag-5'>代碼</b><b class='flag-5'>Flash</b>)應(yīng)用說(shuō)明

    stm32 flash寫(xiě)數(shù)據(jù)怎么存儲(chǔ)

    stm32 flash寫(xiě)數(shù)據(jù)怎么存儲(chǔ)的? STM32是一款廣泛應(yīng)用于嵌入式系統(tǒng)開(kāi)發(fā)的微控制器,它的Flash存儲(chǔ)器是其中一個(gè)重要的組成部分。在本文中,我將詳細(xì)介紹STM32
    的頭像 發(fā)表于 01-31 15:46 ?2200次閱讀

    fpga配置flash怎么用來(lái)存儲(chǔ)數(shù)據(jù)

    要求使用其他存儲(chǔ)設(shè)備,如Flash存儲(chǔ)器,來(lái)存儲(chǔ)數(shù)據(jù)。 Flash存儲(chǔ)器是一種非易失性
    的頭像 發(fā)表于 12-15 15:42 ?2215次閱讀

    Nor Flash作為存儲(chǔ)解決方案的優(yōu)勢(shì)與限制

    選擇Nor Flash作為存儲(chǔ)解決方案的一個(gè)主要原因就是Nor Flash的并行訪問(wèn)結(jié)構(gòu)可實(shí)現(xiàn)快速讀取速度和低讀取延遲。
    的頭像 發(fā)表于 12-05 14:32 ?722次閱讀

    Nor Flash的基本概念 Nor Flash的內(nèi)部結(jié)構(gòu)解析

    Nor Flash是一種非易失性存儲(chǔ)技術(shù),用于存儲(chǔ)數(shù)據(jù)和代碼。它是一種閃存存儲(chǔ)器,類(lèi)似于NAND Fla
    的頭像 發(fā)表于 12-05 13:57 ?3010次閱讀

    APM32F4 Flash模擬EEPROM介紹和代碼實(shí)現(xiàn)

    Flash與EEPROM一次操作的數(shù)據(jù)大小不同。雖然MCU內(nèi)部的Flash和EEPROM一樣,可以實(shí)現(xiàn)按字節(jié)的讀寫(xiě),但是在寫(xiě)入的時(shí)候,是必須要先按扇區(qū)擦除的,這里也可以說(shuō)相當(dāng)于是一次操作的數(shù)據(jù)大小不同。
    的頭像 發(fā)表于 12-01 17:52 ?1140次閱讀
    APM32F4 <b class='flag-5'>Flash</b>模擬EEPROM介紹和<b class='flag-5'>代碼</b><b class='flag-5'>實(shí)現(xiàn)</b>