高性能FLASH存儲器在DSP電機智能保護(hù)中的應(yīng)用
關(guān)鍵詞:Flash存儲器 DSP 嵌入式算法 Am29F010B
國內(nèi)的電動機保護(hù)裝置種類繁多,但隨著現(xiàn)代大中型電動機對保護(hù)要求的不斷提高和VLSI技術(shù)的不斷進(jìn)步,傳統(tǒng)的基于熱敏電阻、機械式繼電器和電子式等保護(hù)模式均因可靠性不高,容易出現(xiàn)誤操作等缺點已不能滿足需要;而以單片機為核心的數(shù)字或保護(hù)裝置的運算速度不高、資源有限、數(shù)據(jù)處理能力和可擴展性不好等問題日益突出。新的相關(guān)理論和技術(shù)(如小波變換、自適應(yīng)保護(hù)、故障診斷、模糊整定等)的出現(xiàn)加速了高性能和綜合型微機保護(hù)的發(fā)展,但這不僅要求更高性能的CPU(如近年飛速發(fā)展的系列DSP芯片)的支持,而且還要有與之相適應(yīng)的外圍存儲器的支持。鑒于此,筆者在開發(fā)基于DSP的大中型智能電動機保護(hù)裝置(系統(tǒng)結(jié)構(gòu)功能如圖1)時,在外擴存儲器方面采用了AMD公司生產(chǎn)的Flash芯片Am29F010B。該Flash memory因容量大、體積小、功耗低、成本低等優(yōu)點而被廣泛應(yīng)用于消費類電子、軍事、航空航天等領(lǐng)域。它可以在線更新,并具有較高的靈活性,因而可與高性能CPU芯片TMS320C32達(dá)到良好的配合,從而可顯著提高系統(tǒng)性能和可靠性。
1 硬件設(shè)計
1.1 TMS320C32芯片的特點
美國TI公司生產(chǎn)的TMS320系列DSP芯片以其改進(jìn)的哈佛總線結(jié)構(gòu)、獨立的指令系統(tǒng)、專用硬件乘法器、多種尋址方式等優(yōu)點以及高速數(shù)據(jù)處理能力廣泛應(yīng)用在通訊、雷達(dá)、工業(yè)控制等領(lǐng)域。TMS320C32是TI的第一代浮點DSP芯片TMS320C3X系列中的一款高性能浮點芯片,是對TMS320C30、TMS320C31中的不常用資源進(jìn)行簡化、并對其性能進(jìn)一步改進(jìn)后的高性價比處理器。它具有增強的外部存儲器接口,可以靈活方便地存取8/16/24/32位數(shù)據(jù)。它支持16/32位外部程序,從而為其外圍接口電路設(shè)計提供了很大的靈活性;其硬件上增加的一個非常有用的程序引導(dǎo)(Bootloader)功能使其程序可以從低速EPROM、PROM或串口裝入到系統(tǒng)的高速RAM中全速運行;它所配備的C編譯器具有很高的效率,可直接用匯編語言或兩者相結(jié)合使用,因而靈活性和實時性都很強;由于中斷矢量表可重設(shè)位,因此,將其應(yīng)用到電動機保護(hù)中可以大大提高整個保護(hù)裝置的各項性能。
1.2 Flash Memory芯片Am29F010B
Am29F010B是AMD公司生產(chǎn)的多功能閃爍內(nèi)存,它的主要技術(shù)特點如下:
*可單電壓(5V)進(jìn)行讀、寫操作;
*高性能,最大存取時間為45ns;
*可靠性極高,可重復(fù)編程不小于10萬次,數(shù)據(jù)保持大于100年;
*低功耗(讀操作,寫/擦除操作以及空閑狀態(tài)的電流典型值分別為12mA、30mA和1μsA);
*具有扇區(qū)擦除能力,對于所分成的8個完全一樣的分扇區(qū),既可以塊擦除,也可以整個芯片一起擦除;
*嵌入式擦除算法可自動地預(yù)編程和擦除芯片,它可以將設(shè)好的扇區(qū)用嵌入式編程算法自動地編程以把數(shù)據(jù)寫到特定的地址;
*帶有JEDEC標(biāo)準(zhǔn)的Flash EEPROM管腳輸出和命令集;
*具有編程周期結(jié)束檢測功能,可縮短等待時間;
Am29F010B存儲器采用PDIP,PLCC,TSOP封裝,圖2給出了Am29F010B的PDIP封裝引腳圖,各引腳的功能如下:
DQ7~DQ0:雙向數(shù)據(jù)線,可用于輸出數(shù)據(jù)或?qū)懭朊詈蛿?shù)據(jù)。
A0~A16:地址線,其中A16~A14為扇區(qū)地址,可用000~111代表8個扇區(qū),A13~A0為扇區(qū)內(nèi)的字節(jié)地址。
CE:片選線,低電平有效,高電平時芯片處于空閑狀態(tài);
OE,WE:分別為讀、寫控制線。圖3給出了對FLASH編程時,CE、OE和WE的狀態(tài)時序。
其中,PD為編程數(shù)據(jù),tch為CE持續(xù)時間,tcs為CE建立時間,tDS為數(shù)據(jù)建立時間,tDH為數(shù)據(jù)維持時間,twp為寫脈沖寬度。
1.3 Am29F010B與TMS320C32的硬件接口
Am29F010B與TMS320C32的硬件接口電路原理圖如圖4所示。圖中,Am29F010B的17根地址線A0~A16分別與TMS320C32的A0~A16相連。每片Am29F010B的容量為128k×8B。在本開發(fā)系統(tǒng)中,數(shù)據(jù)采用的是32位浮點數(shù),連接方法是將四片8位數(shù)據(jù)寬的Am29F010B一起與TMS320C32連接,即將四片Am29F010B的D0~D7依次與TMS320C32的D0~D7、D8~D15、D16~D23及D24~D31連接,總?cè)萘繛?28k×32B。
TMS320C32的外擴存儲器的尋址空間范圍由三組相互獨立的控制信號STRB0、STRB1和IOSTRB來控制,可用于對相互獨立的存取空間進(jìn)行操作而不會出現(xiàn)端口沖突。所不同的是,IOSTRB只能用32位寬的程序或數(shù)據(jù)存儲器進(jìn)行存操作;STRB0和STRB1由各自的四個控制引腳來實現(xiàn),可以用8/16/32位寬的存儲器存取8/16/32位數(shù)據(jù),還可以用16或32位寬的程序存儲器進(jìn)行存取操作,因而比較靈活。
圖4的設(shè)計中使用的是STRB0,F(xiàn)lash所占的128k×32B存取空間的地址范圍為000000H~01FFFFH,外圍程序存儲器配置為32位,可由PRGW置低電平來實現(xiàn)。此時各片的片選信號CE分別由STRB0-B0、STRB0-B1、STRB0-B2、STRB0-B3控制。上電復(fù)位后,外部總線接口控制寄存器STRB0可根據(jù)PRGW引腳電平的高低來決定存儲器的寬度控制位和數(shù)據(jù)位數(shù)控制位的復(fù)位值。
2 Am29F010B的在系統(tǒng)編程技術(shù)
2.1 Am29F010B的基本編程操作
對FLASH的基本操作主要有讀、字節(jié)編程、復(fù)位、扇區(qū)擦除、片擦除等。Am29F010B閃爍存儲器的讀操作與普通的存儲器操作相同,它不需要特定的時序,在電路上電或內(nèi)部編程等操作后可自動進(jìn)入讀數(shù)據(jù)狀態(tài)。而擦除和寫操作相對復(fù)雜一些,它不能簡單的直接寫入,同時,out文件不能load到FLASH中,且CCS和CSource Debugger中的load命令均不能對flash寫入,而需要專門的程序才能寫入一系列Flash Memory的命令寄存器中,然后調(diào)用嵌入式算法的內(nèi)部程序來完成相應(yīng)的命令。Am29F010B編程的一般步驟是復(fù)位、擦除、字節(jié)編程等。
(1)復(fù)位操作
復(fù)位命令用以取消擦除或?qū)懭氩僮鞫勾鎯ζ鲝?fù)位。復(fù)位操作不影響各單元的數(shù)據(jù)。在編程、擦除或正常操作出現(xiàn)錯誤時都要使用復(fù)位命令。向FLASH存儲器的任意一個地址寫入0F0H均可使其復(fù)位并進(jìn)入讀數(shù)據(jù)狀態(tài)。
(2)擦除操作
擦除操作的具體軟件命令序列如表1所列。該操作包括按扇區(qū)擦除和整片擦除兩種方式。二者均為6總線周期操作。使用片擦除操作則可一次清除FLASH芯片內(nèi)的所有數(shù)據(jù)。扇區(qū)擦除操作則用于清除某一個扇區(qū)的所有數(shù)據(jù),這在僅需要改動少量數(shù)據(jù)而不是整片數(shù)據(jù)時特別方便。
(3)字節(jié)編程操作
該操作是一個4總線周期指令,可將任意數(shù)據(jù)寫入Am29F010B獨立使用的編程,只能寫入8位寬的數(shù)據(jù),而本開發(fā)系統(tǒng)每次可寫入32位寬數(shù)據(jù)。具體軟件命令序列如表1所列。
2.2 Am29F010B的編程注意事項及操作技巧
在對Am29F010B進(jìn)行編程操作時,三條關(guān)鍵控制檢測線OE、CE和WE都必須處于正確狀態(tài),當(dāng)CE或WE不是低電平或OE不是高電平時,編程操作將被禁止。
由于在32位浮點芯片TMS320C32進(jìn)行硬件連接時,采用的是4片數(shù)據(jù)寬度為8位的Flash來作為一片數(shù)據(jù)寬度為32位的Flash使用,所以在實際的總線操作過程中,向?qū)?yīng)地址寫入的數(shù)據(jù)應(yīng)為8位16進(jìn)制數(shù)據(jù)。例如芯片復(fù)位操作時,寫入某一地址的數(shù)據(jù)應(yīng)該是0xF0F0F0,而不應(yīng)是單片時寫入的0xF0。其軟件命令序列可同時參見表1。
表1 Am29F010B編程命令序列表
命令序列 | Flash復(fù)位 | 扇區(qū)擦除 | 整片擦除 | Flash燒錄 | |
總線寫周期1 | 地址 | 5555H | 5555H | 5555H | 5555H |
數(shù)據(jù) | 0AAAAAAAAH | 0AAAAAAAAH | 0AAAAAAAAH | 0AAAAAAAAH | |
總線寫周期2 | 地址 | 2AAAH | 2AAAH | 2AAAH | 2AAAH |
數(shù)據(jù) | 55555555H | 55555555H | 55555555H | 55555555H | |
總線寫周期3 | 地址 | xxxx | 5555H | 5555H | 5555H |
數(shù)據(jù) | 0F0F0F0F0H | 80808080H | 80808080H | 0A0A0A0A0H | |
總線寫周期4 | 地址 | 5555H | 5555H | ||
數(shù)據(jù) | 0AAAAAAAAH | 0AAAAAAAAH | |||
總線寫周期5 | 地址 | 2AAAH | 2AAAH | ||
數(shù)據(jù) | 55555555H | 55555555H | |||
總線官周期6 | 地址 | SA | 5555H | ||
數(shù)據(jù) | 30303030H | 10101010H |
在Am29F010B擦除及編程操作中使用檢測機制可確保操作的正確性和有效性。其核心代碼如下:
flash_rase:
……
check_rase:LDI *AR0,R0
NOP
NOP
XOR *AR2,R0
BNZ check_rase
……
RETS
flash_prog:
……
check_prog:LDI * -AR1,R0
NOP
NOP
XOR *-AR1,R0
BNZ check_prog
……
RETS
在將數(shù)據(jù)或程序燒寫到Am29F010B時,應(yīng)先單步執(zhí)行燒寫程序,同時應(yīng)觀察燒寫程序執(zhí)行過程中有無異常。筆者曾遇到過的FLASH的操作指令代碼執(zhí)行后變成.word XXH的情形,后來經(jīng)檢查發(fā)現(xiàn)是由于芯片Am29F010B的地址線引腳再現(xiàn)虛焊所致;另一方面,還要觀察在仿真開發(fā)環(huán)境的存儲區(qū)查看窗口,以觀察FLASH內(nèi)相應(yīng)單元內(nèi)容的變化有否異常。
圖4 Am29F010B與TM320C32的硬件接口電路原理圖
3 結(jié)束語
本文討論的方法在軟、硬件上均已得到實現(xiàn),對高性能Flash存儲器芯片Am29F010B和高速DSP處理器TMS320C32優(yōu)點的充分利用,使得在硬件和軟件上保證了裝置的先進(jìn)性和高可靠性;目前,該裝置已成功用于WSM2000電動機智能保護(hù)裝置系統(tǒng)中,而且效果理想。