Flash Memory作為數(shù)據(jù)存儲器在E5中的應(yīng)用
1. E5的特點及體系結(jié)構(gòu)
E5是位于美國硅谷的公司Triscend 推出的一款全新的CPU,它是基于8051的內(nèi)核,但將微處理器的內(nèi)核,ASCI及可重構(gòu)邏輯陣列集成與一體,構(gòu)成一款CSOC(可配置系統(tǒng))芯片。Triscend E5的主要特點有:
1.1 它的主控制器是一個增強型的8032,與工業(yè)標(biāo)準(zhǔn)的8051指令上完全兼容。
1.2 它包含一個嵌入式的可重構(gòu)系統(tǒng)邏輯矩陣(CSL)。共有2048 個可配置系統(tǒng)邏輯(CSL)單元(約40000 個邏輯門)。
1.3 擁有一個高性能的系統(tǒng)總線(CSI),連接微處理器,存儲器和可重構(gòu)系統(tǒng)邏輯矩陣。
1.4 增加了一個存儲器接口單元(MIU),負(fù)責(zé)連接外部存儲器。
1.5 片上64k 字節(jié)的系統(tǒng)專用RAM(XDATA RAM)
由此可知,E5的主要部件是:8032增強型CPU,可重構(gòu)系統(tǒng)邏輯矩陣(CSL),內(nèi)部系統(tǒng)總線(CSI),片上64KRAM,可編程I/O口以及一些專用外設(shè)。
2. E5存儲區(qū)的映射關(guān)系
E5內(nèi)部含有64K的SRAM供數(shù)據(jù)存取之用,但不含ROM。因此須接以External Memory供程序運行。在使用E5的系統(tǒng)中,E5可以從Internal RAM或External Memory中取得指令運行。一般情況下,E5從External Memory中取得運行指令,而External Memory一般為FLASH。
E5使用增強型的8051內(nèi)核,其邏輯尋址能力遵循8051的規(guī)則,即邏輯地址上CODE、XDATA區(qū)各64KByte。在傳統(tǒng)的8051系統(tǒng)中,指針DPTR可利用指令MOVC、MOVX分別尋址CODE、XDATA的64KByte。但E5利用其MIU(Memory Interface Unit)將實際物理尋址范圍作了極大的提升。在使用E5的系統(tǒng)中,合理利用TRISCEND提供的地址映射器CMAP、DMAP,使得尋址范圍達(dá)到32位的物理地址空間。圖1為邏輯地址空間與物理地址空間的映射關(guān)系。
500)this.style.width=500;" border="0" />
從圖中可知E5的物理地址劃分如下:
0000_0000~0000_FFFF Primary Initialization Code ROM(初始化代碼ROM空間)
0001_0000~0001_FFFF Internal RAM(內(nèi)部RAM空間)
0002_0000~0002_FFFF Configuration Register Unit(可配制寄存器單元)
0003_0000~0003_FFFF CPU Debug Registers(CPU仿真寄存器)
0004_0000~0007_FFFF Initialization Memory(初始化存儲器空間)
0008_0000~0009_FFFF Reserved(保留空間)
0010_0000~007F_FFFF CSL-based Soft Module Registers Decoded via Selectors(軟件IP庫寄存器空間)
0080_0000~00FF_FFFF External Memory(外部存儲器空間)
下面再分析實際使用中FLASH MEMORY的空間分配問題。
在本文利用E5所設(shè)計的應(yīng)用系統(tǒng)中,使用29LV800BA-90PFTN,作為External Memory程序存儲器。它的容量是8M (1M * 8/512K * 16)BIT,并以64K分段(SECTORED)。它的段(SECTOR)空間與E5的物理地址的對應(yīng)關(guān)系如圖2所示。
500)this.style.width=500;" border="0" />
500)this.style.width=500;" border="0" />
在實際應(yīng)用中,F(xiàn)astChip自動將E5 CSL數(shù)據(jù)存放在FLASH的SA12,如果這部分?jǐn)?shù)據(jù)需要占用的空間超過64KByte,則向后繼續(xù)占用SA13,并依此類推;其余SA0~SA11作為程序代碼存放區(qū)。實際上程序代碼所需要的存儲空間并不是總需要那么大,多數(shù)情況下甚至少于64KByte。因此我們可以將FLASH中的部分區(qū)域劃做數(shù)據(jù)存儲,用于保存需要在掉電或硬件復(fù)位后可再恢復(fù)的數(shù)據(jù)。
3. FLASH 做DATA MEMORY的說明
使用FLASH中的部分區(qū)域作數(shù)據(jù)存儲,必然涉及到數(shù)據(jù)的改寫。對FLASH而言,在進(jìn)行數(shù)據(jù)改寫時,必須先將該數(shù)據(jù)所在的SECTOR完全擦除(ERASE),然后再執(zhí)行寫(WRITE)操作。受FLASH操作的限制,在對FLASH進(jìn)行EREASE、WRITE操作時,相應(yīng)部分功能程序代碼不可能從FLASH內(nèi)取得,所以必須預(yù)先將它們轉(zhuǎn)移到適當(dāng)?shù)奈恢?SRAM),以保證讀、寫FLASH的程序正常運轉(zhuǎn),完成這一部分操作完成后,可以恢復(fù)從FLASH內(nèi)取得程序代碼繼續(xù)執(zhí)行其他功能。
在這些應(yīng)用中,內(nèi)部SRAM由CODE與XDATA地址空間共享。E5內(nèi)部有一定容量(64K)的SRAM,故可以從SRAM取得程序代碼完成規(guī)定的操作。但是這個RAM的容量有限(具體:E502-8KByte,E505-16KByte,E512-32KByte,E520-40KByte),而且SRAM本身還必須預(yù)留足夠的空間作為中間數(shù)據(jù)的存放,所以轉(zhuǎn)移到RAM的程序代碼應(yīng)該盡可能精簡。
要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后能正確運行,代碼的絕對起始地址應(yīng)該為0。
這部分代碼應(yīng)該利用FastChip的CODE BANK存放在單獨的BANK內(nèi)。如一般功能應(yīng)用程序占用BANK0~N,則這部分代碼存放在BANKN+1。
進(jìn)行程序代碼轉(zhuǎn)移時,需要確定的參數(shù)包括:被轉(zhuǎn)移程序代碼的首地址、被轉(zhuǎn)移程序代碼的長度、被轉(zhuǎn)入?yún)^(qū)間的首地址。在進(jìn)行該項工作之前,確認(rèn)改變地址映射器的設(shè)置不會導(dǎo)致程序運行的混亂。
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í)行。當(dāng)然,這些都是在XDATA中處理的。
4.對FLASH的操作
在這個設(shè)計中,感興趣的是FLASH作數(shù)據(jù)存儲區(qū)使用,而不是作為程序存儲區(qū)使用時的操作,所以,下面的描述是針對FLASH作數(shù)據(jù)存儲區(qū)使用時的關(guān)注事項。
在進(jìn)行操作前,要事先進(jìn)行地址映射器的配置,使DPTR能正確指向。
讀(READ)--類似于標(biāo)準(zhǔn)的RAM??稍谌我鈺r候進(jìn)行。
寫(WRITE)--FLASH片內(nèi)任一位都只能從1寫為0,要從0寫為1,必須使用擦除操作。
擦除(ERASE)--擦除操作不能針對特定的字節(jié),最少必須以扇區(qū)為單位進(jìn)行,也可以選擇將整個器件內(nèi)的字節(jié)全部擦除。
對FLASH的讀、擦除操作,必須按照其Datasheet給定的步驟進(jìn)行。如:
擦除: 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ū)擦除)
很顯然,在我們的應(yīng)用中,不能使用整片擦除操作,只能按需要將要改寫的扇區(qū)進(jìn)行擦除以保存我們的數(shù)據(jù)。
寫:xxAAA/AA-xx555/55-xxAAA/A0-PA/PD
寫FLASH時,每個命令序列只能寫一個字節(jié)。其中PA是所要改寫的字節(jié)的地址,PD是將要寫入的內(nèi)容。
5.總結(jié)
在很多場合,如何將數(shù)據(jù)保護(hù)而不受掉電的影響是很重要的。本文作者創(chuàng)新點:說明了在E5微處理器中如何將FALSH MEMORY用與存取、保護(hù)數(shù)據(jù),提供了FLASH與SRAM在XDATA空間中映射的方法,希望對使用E5 CPU的研發(fā)人員能有所幫助。