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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > Flash Memory作為數(shù)據(jù)存儲器在E5中的應用

          Flash Memory作為數(shù)據(jù)存儲器在E5中的應用

          作者: 時間:2009-04-01 來源:網(wǎng)絡 收藏

          在實際中,F(xiàn)astChip自動將 CSL存放在FLASH的SA12,如果這部分需要占用的空間超過64KByte,則向后繼續(xù)占用SA13,并依此類推;其余SA0~SA11程序代碼存放區(qū)。實際上程序代碼所需要的存儲空間并不是總需要那么大,多數(shù)情況下甚至少于64KByte。因此我們可以將FLASH中的部分區(qū)域劃做存儲,用于保存需要在掉電或硬件復位后可再恢復的數(shù)據(jù)。

          3. FLASH 做DATA MEMORY的說明
          使用FLASH中的部分區(qū)域作數(shù)據(jù)存儲,必然涉及到數(shù)據(jù)的改寫。對FLASH而言,在進行數(shù)據(jù)改寫時,必須先將該數(shù)據(jù)所在的SECTOR完全擦除(ERASE),然后再執(zhí)行寫(WRITE)操作。受FLASH操作的限制,在對FLASH進行EREASE、WRITE操作時,相應部分功能程序代碼不可能從FLASH內(nèi)取得,所以必須預先將它們轉(zhuǎn)移到適當?shù)奈恢?SRAM),以保證讀、寫FLASH的程序正常運轉(zhuǎn),完成這一部分操作完成后,可以恢復從FLASH內(nèi)取得程序代碼繼續(xù)執(zhí)行其他功能。
          在這些中,內(nèi)部SRAM由CODE與XDATA地址空間共享。內(nèi)部有一定容量(64K)的SRAM,故可以從SRAM取得程序代碼完成規(guī)定的操作。但是這個RAM的容量有限(具體:02-8KByte,E505-16KByte,E512-32KByte,E520-40KByte),而且SRAM本身還必須預留足夠的空間中間數(shù)據(jù)的存放,所以轉(zhuǎn)移到RAM的程序代碼應該盡可能精簡。
          要E5完成對FLASH中部分區(qū)間的數(shù)據(jù)改寫,最少必須具有以下兩個功能:將程序代碼區(qū)的內(nèi)容轉(zhuǎn)移到內(nèi)部RAM區(qū);完成對FLASH的ERASE、WRITE。
          3.1 程序代碼轉(zhuǎn)移
          按照設(shè)計要求,被轉(zhuǎn)移的程序代碼所完成的功能是操作FLASH。為保證該部分代碼轉(zhuǎn)移至E5內(nèi)部RAM后能正確運行,代碼的絕對起始地址應該為0。
          這部分代碼應該利用FastChip的CODE BANK存放在單獨的BANK內(nèi)。如一般功能程序占用BANK0~N,則這部分代碼存放在BANKN+1。
          進行程序代碼轉(zhuǎn)移時,需要確定的參數(shù)包括:被轉(zhuǎn)移程序代碼的首地址、被轉(zhuǎn)移程序代碼的長度、被轉(zhuǎn)入?yún)^(qū)間的首地址。在進行該項工作之前,確認改變地址器的設(shè)置不會導致程序運行的混亂。
          3.2 Internal RAM區(qū)塊說明
          改寫FLASH的功能代碼必須在Internal RAM運行,而且起始地址必須是0000,因此,在設(shè)計時,Internal RAM的低段區(qū)域不要用來保存數(shù)據(jù),我們設(shè)定該區(qū)域長度為4KByte,地址范圍0001_0000~0001_0FFF。即其它數(shù)據(jù)的存取在0001_1000H之上。
          3.3 地址
          為將FLASH區(qū)域內(nèi)的功能代碼轉(zhuǎn)移到Internal RAM指定的位置,我們設(shè)置地址器來分別指向:
          設(shè)置地址映射器DMAP2,使保存有改寫FLASH的功能代碼的FLASH之SECTOR的地址映射至XDATA區(qū)的0000~0FFF。映射器DMAP2各寄存器設(shè)置如下:
          DMAP2_TAR_00x00 ;源映射區(qū)的起始地址
          DMAP2_TAR_10x(80+BANK_No) ;源映射區(qū)的起始地址
          DMAP2_TAR_20x00 ;源映射區(qū)的起始地址
          DMAP2_ SRC0x00 ;目的映射區(qū)的起始地址
          DMAP2_ CTL0x2C ;代碼長度
          設(shè)置地址映射器DMAP4,將Internal RAM低4KByte的地址映射至XDATA區(qū)的1000~1FFF。映射器DMAP4各寄存器設(shè)置如下:
          DMAP4_TAR_00x00 ;源映射區(qū)的起始地址
          DMAP4_TAR_10x01 ;源映射區(qū)的起始地址
          DMAP4_TAR_20x00 ;源映射區(qū)的起始地址
          DMAP4_ SRC0x10 ;目的映射區(qū)的起始地址
          DMAP4_ CTL0x2C ;代碼長度
          完成上述映射后,就可以將FLASM MEMORY的程序按BYTE TO BYTE的方式COPY到INTERNAL SRAM內(nèi)執(zhí)行。當然,這些都是在XDATA中處理的。

          4.對FLASH的操作
          在這個設(shè)計中,感興趣的是FLASH作數(shù)據(jù)存儲區(qū)使用,而不是程序存儲區(qū)使用時的操作,所以,下面的描述是針對FLASH作數(shù)據(jù)存儲區(qū)使用時的關(guān)注事項。
          在進行操作前,要事先進行地址映射器的配置,使DPTR能正確指向。
          讀(READ)--類似于標準的RAM??稍谌我鈺r候進行。
          寫(WRITE)--FLASH片內(nèi)任一位都只能從1寫為0,要從0寫為1,必須使用擦除操作。
          擦除(ERASE)--擦除操作不能針對特定的字節(jié),最少必須以扇區(qū)為單位進行,也可以選擇將整個器件內(nèi)的字節(jié)全部擦除。
          對FLASH的讀、擦除操作,必須按照其Datasheet給定的步驟進行。如:
          擦除: xxAAA/AA-xx555/55-xxAAA/80-xxAAA/AA-xx555/55-xxAAA/10(整片擦除); xxAAA/AA-xx555/55-xxAAA/80-xxAAA/AA-xx555/55-ADDR/30(按扇區(qū)擦除)
          很顯然,在我們的應用中,不能使用整片擦除操作,只能按需要將要改寫的扇區(qū)進行擦除以保存我們的數(shù)據(jù)。
          寫:xxAAA/AA-xx555/55-xxAAA/A0-PA/PD
          寫FLASH時,每個命令序列只能寫一個字節(jié)。其中PA是所要改寫的字節(jié)的地址,PD是將要寫入的內(nèi)容。

          5.總結(jié)
          在很多場合,如何將數(shù)據(jù)保護而不受掉電的影響是很重要的。本文作者創(chuàng)新點:說明了在E5微處理器中如何將FALSH MEMORY用與存取、保護數(shù)據(jù),提供了FLASH與SRAM在XDATA空間中映射的方法,希望對使用E5 CPU的研發(fā)人員能有所幫助。


          上一頁 1 2 下一頁

          評論


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