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

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 實(shí)例分析MCU的Data Flash訪問控制

          實(shí)例分析MCU的Data Flash訪問控制

          作者: 時(shí)間:2017-10-24 來源:網(wǎng)絡(luò) 收藏

            筆者在家用火災(zāi)報(bào)警系統(tǒng)項(xiàng)目的開發(fā)過程中,在進(jìn)行主從機(jī)通訊和從機(jī)自身任務(wù)處理時(shí),需要經(jīng)常與從機(jī)進(jìn)行運(yùn)行數(shù)據(jù)的存取。過去傳統(tǒng)的方法是在上外掛EEPROM或?qū)?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/MCU">MCU內(nèi)部的部分存儲單元專門劃分出來,以存取運(yùn)行數(shù)據(jù)。這兩種方法的不利之處是:外掛EEPROM需要增加MCU與EEPROM的讀寫接口,增加了MCU的管腳負(fù)擔(dān),減慢了數(shù)據(jù)的讀寫速度的同時(shí)還增加了功耗;專門為運(yùn)行數(shù)據(jù)劃分存儲單元?jiǎng)t減少了程序代碼的存儲空間,同時(shí)存儲空間的讀寫、擦除等操作會比較麻煩,另外還要非常小心,以防擦掉了有用的程序代碼。

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

            MCU內(nèi)嵌2KB的DATA FLASH,省去了用戶單獨(dú)外擴(kuò)數(shù)據(jù)FLASH的麻煩。MCU還支持BGO操作,程序指令在DATA FLASH讀寫時(shí)仍可正常執(zhí)行。其對DATA FLASH存儲單元的寫操作壽命高達(dá)1百萬次以上,非常適合于需要頻繁存取數(shù)據(jù)的應(yīng)用場合。

            與有些半導(dǎo)體廠商的控制芯片不同,并沒有直接將DATA FLASH的讀寫操作完全開放給用戶,而是提供了一套叫做PFDL(Pico Data Flash Library,即微型數(shù)據(jù)閃存訪問庫)的軟件接口,來實(shí)現(xiàn)對閃存系統(tǒng)的操作。用戶使用時(shí)只需要調(diào)用相應(yīng)的庫函數(shù)即可進(jìn)行DATA FLASH的讀寫、校驗(yàn)、擦除等操作,而不必關(guān)心底層驅(qū)動(dòng)函數(shù)的具體實(shí)現(xiàn)方式。這在很大程度上方便了用戶程序的設(shè)計(jì),縮短了開發(fā)周期。

            1)DATA FLASH結(jié)構(gòu)和PFDL

            RL78的存儲結(jié)如圖1所示。其中Data Flash memory物理地址為F1000H-F17FFH,被分成了兩個(gè)BLOCK區(qū),每個(gè)BLOCK區(qū)1KB,共2KB。

            圖1:MCU的存儲結(jié)構(gòu)

            PFDL由表1所示的庫文件組成。

            表1:PFDL庫文件

            2)Data Flash的存儲結(jié)構(gòu)和使用方法

            首先有必要將RL78系列MCU關(guān)于DATA FLASH操作的幾個(gè)問題進(jìn)行說明。RL78系列DATA FLASH的擦除操作只能以BLOCK為單位,不支持單字或單字節(jié)擦除。所以當(dāng)有一項(xiàng)長度為若干字節(jié)的數(shù)據(jù)要寫入DATA FLASH時(shí),不可能將數(shù)據(jù)每次都寫入固定的物理地址所對應(yīng)的存儲單元中,而是必須在新的空存儲單元中寫入。這就意味著用戶在設(shè)計(jì)DATA FLASH的存儲結(jié)構(gòu)時(shí),必須有尋址功能。

            RL78系列DATA FLASH同一時(shí)刻只能有1個(gè)BLOCK處于激活狀態(tài),是有效的,此時(shí)另一個(gè)BLOCK不可訪問,是無效的。習(xí)慣上,我們常將DATA FLASH的一個(gè)BLOCK稱為一頁,當(dāng)一個(gè)有效頁被寫滿數(shù)據(jù)時(shí),要想繼續(xù)寫入數(shù)據(jù)的話,則只能在下一頁中寫入,同時(shí)還需要將前一頁中有用的其他數(shù)據(jù)項(xiàng)拷貝到下一頁中,并將下一頁標(biāo)記為當(dāng)前的有效頁,將上一頁標(biāo)記為無效頁,即必須有DATA FLASH的頁標(biāo)記和導(dǎo)頁機(jī)制。

            為此,筆者將整個(gè)DATA FLASH分成兩頁(每個(gè)BLOCK自然形成一頁,兩頁交替使用),每頁的起始地址作為頁標(biāo)記單元,見表2。每次進(jìn)行DATA FLASH操作前應(yīng)先讀取該標(biāo)記單元來確認(rèn)當(dāng)前有效頁。


          表2:頁標(biāo)記

            如前所述,各種數(shù)據(jù)項(xiàng)同時(shí)在DATA FLASH中存在時(shí),其存儲地址是不固定的,如不加以區(qū)分,將不能識別數(shù)據(jù),所以為實(shí)現(xiàn)DATA FLASH的尋址功能,我們引入數(shù)據(jù)項(xiàng)索引的概念。在每頁DATA FLASH中,將存儲單元一分為二,上半部分用于存放數(shù)據(jù)項(xiàng)索引,數(shù)據(jù)項(xiàng)索引用于在DATA FLASH中區(qū)別各種不同的數(shù)據(jù)項(xiàng),并指示其代表的數(shù)據(jù)項(xiàng)在DATA FLASH中存儲的相對地址。下半部分用于存放各種數(shù)據(jù)項(xiàng)。

            為進(jìn)一步描述的方便,我們不妨舉例說明,假設(shè)用戶有A、B、C、D四種數(shù)據(jù)項(xiàng)需要在DATA FLASH中存取,每種數(shù)據(jù)項(xiàng)的數(shù)據(jù)長度分別為1、2、3、4字節(jié),其定義如表3所示。

            表3:數(shù)據(jù)項(xiàng)定義

            一個(gè)典型的DATA FLASH存儲結(jié)構(gòu)的例子如圖2所示。頁標(biāo)記占用每頁的相對起始地址單元。相對地址0x0001~0x01FF定義為數(shù)據(jù)項(xiàng)索引區(qū),每個(gè)數(shù)據(jù)項(xiàng)索引包含3個(gè)字節(jié),分別是數(shù)據(jù)項(xiàng)索引、索引數(shù)據(jù)地址低字節(jié)、索引數(shù)據(jù)地址高字節(jié)。相對地址0x0200~0x03FF定義為數(shù)據(jù)項(xiàng)存儲區(qū)。

            向DATA FLASH寫入數(shù)據(jù)時(shí),先找到當(dāng)前有效頁,然后在當(dāng)前頁中查找是否有可供寫入數(shù)據(jù)的數(shù)據(jù)存儲空間和索引空間。查找時(shí)可采取自上而下的查找順序,先分別從每頁數(shù)據(jù)項(xiàng)索引區(qū)和數(shù)據(jù)項(xiàng)存儲區(qū)的相對起始地址開始查找空白單元,若有滿足該數(shù)據(jù)項(xiàng)存儲要求的連續(xù)空白存儲單元,則調(diào)用寫FLASH庫函數(shù)將數(shù)據(jù)項(xiàng)索引和數(shù)據(jù)項(xiàng)寫入該存儲空間。

            圖2:DATA FLASH存儲結(jié)構(gòu)

            從DATA FLASH讀取數(shù)據(jù)時(shí),先找到當(dāng)前有效頁,然后在當(dāng)前頁中查找所要讀取的數(shù)據(jù)位于何處,即尋址。查找時(shí)應(yīng)采取自下而上的查找順序(可確保每次查找到的是該種數(shù)據(jù)項(xiàng)的最新數(shù)據(jù)),從每頁數(shù)據(jù)項(xiàng)索引區(qū)的相對結(jié)束地址開始查找數(shù)據(jù)項(xiàng)索引,若索引匹配則表明數(shù)據(jù)項(xiàng)找到,若未找到匹配索引則表明要讀取的數(shù)據(jù)項(xiàng)未找到(未寫入DATA FLASH),可設(shè)計(jì)函數(shù)返回不同值來表示是否找到數(shù)據(jù)項(xiàng)。當(dāng)索引匹配時(shí),讀出存儲在索引數(shù)據(jù)地址單元中的數(shù)據(jù)項(xiàng)地址,調(diào)用讀FLASH庫函數(shù)讀出數(shù)據(jù)項(xiàng)即可。

            3)總結(jié)

            使用上述DATA FLASH存儲結(jié)構(gòu)和存取規(guī)則,實(shí)現(xiàn)了數(shù)據(jù)存儲的可尋址和頁交替,比較充分的利用數(shù)據(jù)存儲空間。另外,數(shù)據(jù)項(xiàng)索引區(qū)和數(shù)據(jù)項(xiàng)存儲區(qū)的劃分并不一定要各占一半存儲空間,而應(yīng)根據(jù)實(shí)際的各種數(shù)據(jù)項(xiàng)長度來選擇優(yōu)化,當(dāng)每種數(shù)據(jù)項(xiàng)字節(jié)數(shù)較多時(shí),可適當(dāng)增加數(shù)據(jù)項(xiàng)存儲區(qū)的空間,避免存儲空間浪費(fèi)。為了使數(shù)據(jù)存儲更加可靠,可使用數(shù)據(jù)的三備份存儲機(jī)制:實(shí)際存儲的每個(gè)數(shù)據(jù)項(xiàng),均按順序地址依次進(jìn)行三備份存儲,讀取時(shí)必須有兩個(gè)備份相同才能確認(rèn)數(shù)據(jù)有效。



          關(guān)鍵詞: MCU DataFlash 瑞薩 RL78系列

          評論


          相關(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); })();