新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Flash Memory作為數據存儲器在E5中的應用

        Flash Memory作為數據存儲器在E5中的應用

        作者: 時間:2009-04-01 來源:網絡 收藏

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

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

        4.對FLASH的操作
        在這個設計中,感興趣的是FLASH作數據存儲區使用,而不是程序存儲區使用時的操作,所以,下面的描述是針對FLASH作數據存儲區使用時的關注事項。
        在進行操作前,要事先進行地址映射器的配置,使DPTR能正確指向。
        讀(READ)--類似于標準的RAM。可在任意時候進行。
        寫(WRITE)--FLASH片內任一位都只能從1寫為0,要從0寫為1,必須使用擦除操作。
        擦除(ERASE)--擦除操作不能針對特定的字節,最少必須以扇區為單位進行,也可以選擇將整個器件內的字節全部擦除。
        對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(按扇區擦除)
        很顯然,在我們的應用中,不能使用整片擦除操作,只能按需要將要改寫的扇區進行擦除以保存我們的數據。
        寫:xxAAA/AA-xx555/55-xxAAA/A0-PA/PD
        寫FLASH時,每個命令序列只能寫一個字節。其中PA是所要改寫的字節的地址,PD是將要寫入的內容。

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


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 邳州市| 鹿泉市| 尼玛县| 南城县| 高陵县| 阳原县| 红原县| 永嘉县| 于田县| 鄱阳县| 灵璧县| 达州市| 喀喇| 通山县| 罗定市| 无棣县| 安陆市| 广水市| 盈江县| 旬邑县| 斗六市| 塘沽区| 西贡区| 东乌| 湘西| 颍上县| 黄骅市| 江城| 偃师市| 佛教| 饶平县| 政和县| 阜新| 东丰县| 申扎县| 南皮县| 辉县市| 永城市| 土默特右旗| 福安市| 佛冈县|