<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于FLASH介質(zhì)嵌入式存儲(chǔ)方案的設(shè)計(jì)與實(shí)現(xiàn)

          基于FLASH介質(zhì)嵌入式存儲(chǔ)方案的設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2014-11-14 來(lái)源:網(wǎng)絡(luò) 收藏

            引言

          本文引用地址:http://www.ex-cimer.com/article/265391.htm

            (閃速存儲(chǔ)器)作為一種安全、快速的存儲(chǔ)體,具有體積小、容量大、成本低、掉電數(shù)據(jù)不丟失等一系列優(yōu)點(diǎn),已成為嵌入式系統(tǒng)中數(shù)據(jù)和程序最主要的載體。由于在結(jié)構(gòu)和操作方式上與硬盤(pán)、E2ROM等其他存儲(chǔ)介質(zhì)有較大區(qū)別,使用時(shí)必須根據(jù)其自身特性,對(duì)存儲(chǔ)系統(tǒng)進(jìn)行特殊設(shè)計(jì),以保證系統(tǒng)的性能達(dá)到最優(yōu)。

            FLASH的特點(diǎn)

            FLASH是一種非易失性存儲(chǔ)器NVM(Non-VolatileMemory),根據(jù)結(jié)構(gòu)的不同可以將其分成NORFLASH和FLASH兩種。但不管哪一種都具有如下特點(diǎn):

            (1)區(qū)塊結(jié)構(gòu)

            FLASH在物理結(jié)構(gòu)上分成若干個(gè)區(qū)塊,區(qū)塊之間相互獨(dú)立。比如NORFLASH把整個(gè)Memory分成若干個(gè)Sector,而FLASH把整個(gè)Memory分成若干個(gè)Block;

            (2)先擦后寫(xiě)

            由于FLASH的寫(xiě)操作只能將數(shù)據(jù)位從1寫(xiě)成0,不能從0寫(xiě)成1,所以在對(duì)存儲(chǔ)器進(jìn)行寫(xiě)入之前必須先執(zhí)行擦操作,將預(yù)寫(xiě)入的數(shù)據(jù)位初始化為1。擦操作的最小單位是一個(gè)區(qū)塊,而不是單個(gè)字節(jié)。

            (3)操作指令

            除了NORFLASH的讀,F(xiàn)LASH的其它操作不能像RAM那樣,直接對(duì)目標(biāo)地址進(jìn)行總線操作。比如執(zhí)行一次寫(xiě)操作,它必須輸入一串特殊的指令(NORFLASH),或者完成一段時(shí)序( FLASH)才能將數(shù)據(jù)寫(xiě)入到FLASH中。

            (4)位反轉(zhuǎn)

            由于FLASH固有的電器特性,在讀寫(xiě)數(shù)據(jù)過(guò)程中,偶然會(huì)產(chǎn)生一位或幾位數(shù)據(jù)錯(cuò)誤。這就是位反轉(zhuǎn)。位反轉(zhuǎn)無(wú)法避免,只能通過(guò)其他手段對(duì)結(jié)果進(jìn)行事后處理。

            (5)壞塊

            FLASH在使用過(guò)程中,可能導(dǎo)致某些區(qū)塊的損壞。區(qū)塊一旦損壞,將無(wú)法進(jìn)行修復(fù)。如果對(duì)已損壞的區(qū)塊進(jìn)行操作,可能會(huì)帶來(lái)不可預(yù)測(cè)的錯(cuò)誤。尤其是NAND FLASH在出廠時(shí)就可能存在這樣的壞塊(已經(jīng)被標(biāo)識(shí)出)。

            關(guān)鍵設(shè)計(jì)

            FLASH通用設(shè)計(jì)

            對(duì)于一個(gè)嵌入式系統(tǒng),設(shè)備的兼容性越好,系統(tǒng)可行性就越好,產(chǎn)品也就越有競(jìng)爭(zhēng)力。所以,為了兼容不同類型的FLASH設(shè)備,對(duì)FLASH進(jìn)行通用設(shè)計(jì)至關(guān)重要。

            對(duì)于NORFLASH,數(shù)據(jù)的讀操作可以通過(guò)獨(dú)立的數(shù)據(jù)總線和地址總線快速完成,然而NOR FLASH的其他操作需要通過(guò)特殊的指令來(lái)完成,更糟糕的是不同廠商生產(chǎn)的芯片這些指令互不相同。這就導(dǎo)致了設(shè)備的不兼容。

            對(duì)于NAND FLASH,也存在這樣的問(wèn)題。NAND FLASH可以根據(jù)相同的指令讀取芯片的廠商號(hào)和設(shè)備號(hào),從而通過(guò)識(shí)別設(shè)備號(hào)調(diào)用對(duì)應(yīng)的時(shí)序流程實(shí)現(xiàn)操作。但是,系統(tǒng)中太多的判斷,會(huì)使得程序的結(jié)構(gòu)變得非常復(fù)雜。所以,在一定的條件下,NAND FLASH設(shè)備還是不兼容的。

            為了解決這一問(wèn)題,一個(gè)較好的方法是將FLASH的各個(gè)操作指令以及結(jié)構(gòu)特性按照統(tǒng)一的格式存放到FLASH中固定位置。系統(tǒng)初始化時(shí),將這個(gè)結(jié)構(gòu)讀入系統(tǒng),通過(guò)分析這個(gè)結(jié)構(gòu),可以獲得關(guān)于芯片所有相關(guān)信息,包括操作指令,區(qū)塊分布等等。這樣,系統(tǒng)可以輕松實(shí)現(xiàn)對(duì)不同型號(hào)FLASH的所有操作,極大地提高了設(shè)備的擴(kuò)展性。

            雙模式文件系統(tǒng)設(shè)計(jì)

            嵌入式系統(tǒng)中文件數(shù)據(jù)的存放一般有兩種結(jié)構(gòu),一種是索引格式的線性結(jié)構(gòu),一種是非線性的鏈表式結(jié)構(gòu)。這兩種結(jié)構(gòu)各有優(yōu)缺點(diǎn)。比如對(duì)于系統(tǒng)配置、點(diǎn)陣字庫(kù)等一些具有固定結(jié)構(gòu)的系統(tǒng)數(shù)據(jù),索引結(jié)構(gòu)比鏈表式結(jié)構(gòu)更有效率。但對(duì)于經(jīng)常更新的用戶數(shù)據(jù),鏈表式結(jié)構(gòu)要比索引結(jié)構(gòu)更靈活。如果系統(tǒng)能將兩種結(jié)構(gòu)集成,勢(shì)必能將性能發(fā)揮到最優(yōu)。

            實(shí)現(xiàn)這種集成的方法是將設(shè)備定義成若干個(gè)分區(qū),每個(gè)分區(qū)相互獨(dú)立,不同分區(qū)可以使用不同的文件模式。這樣,不同類型的數(shù)據(jù)就可以根據(jù)自己的屬性選擇存放的分區(qū)。比如系統(tǒng)數(shù)據(jù)存放在使用索引線性結(jié)構(gòu)的分區(qū),用戶數(shù)據(jù)存放在使用鏈?zhǔn)椒蔷€性結(jié)構(gòu)的分區(qū)。

            

           

            壞塊處理

            FLASH中的壞塊處理是一件很棘手的問(wèn)題,如果沒(méi)有有效的管理,對(duì)系統(tǒng)的穩(wěn)定性會(huì)造成嚴(yán)重影響。一個(gè)可行的解決方法是生成一張壞塊表,壞塊表中記錄所有壞塊的塊號(hào),并且按塊號(hào)從小到大排序,壞塊表在讀寫(xiě)過(guò)程中動(dòng)態(tài)更新。當(dāng)讀寫(xiě)數(shù)據(jù)時(shí),遍歷壞塊表中的塊號(hào),將文件的邏輯地址轉(zhuǎn)換成對(duì)應(yīng)FLASH物理地址,以保證所用的FLASH地址空間不存在壞塊。

          存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理



          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: FLASH NAND

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();