施辰光 張陽
摘 要:本文以MPC8349處理器所搭建的嵌入式系統(tǒng)為例,分析了國內外幾種NOR FLASH芯片在選型、布局、焊接時所需要注意的事項,并針對傳統(tǒng)的NOR FLASH自測試方法提出了改進意見。
關鍵詞:MPC8349;NOR FLASH;Power PC;嵌入式系統(tǒng);脫焊
隨著當今計算機技術的迅猛發(fā)展,國防、通訊、醫(yī)療儀器、工業(yè)控制等領域對計算機的要求也變得越來越高。
嵌入式系統(tǒng)的功耗低、可靠性高、處理能力強、實時性強等優(yōu)點使得嵌入式系統(tǒng)能夠滿足機載計算機的各項要求,成為當代機載計算機的主要實現(xiàn)方式。
Freescale公司推出的Power PC嵌入式處理器集成度高,接口豐富,應用廣泛,在全球處理器市場上處于無可爭議的領先地位。
Power PC處理器上電后會從其存儲接口讀取引導程序,來對處理器進行初始化,接著再從存儲接口中讀取操作系統(tǒng)和需要運行的應用程序,因而存儲器是Power PC嵌入式系統(tǒng)中不可或缺的一部分。
FLASH已經(jīng)成為了目前最成功、最流行的一種固態(tài)內存,與EPROM、EEPROM相比FLASH的讀寫速度更快,而與SRAM相比FLASH具有非易失、以及價廉等優(yōu)勢,因而絕大多數(shù)PowerPC嵌入式系統(tǒng)都采用FLASH作為其數(shù)據(jù)存儲單元。
1 NAND FLASH與NOR FLASH
FLASH用于存儲系統(tǒng)運行所必需的系統(tǒng)程序、應用程序和重要的數(shù)據(jù),它的優(yōu)點是掉電后其中的數(shù)據(jù)不會丟失。常用的FLASH有NOR型和NAND型兩種。NOR FLASH是由Intel公司在1988年開發(fā),以替代EPROM和E2PROM,徹底改變了原先由EPROM和EEPROM一統(tǒng)天下的局面。隨后,東芝公司在1989年發(fā)布了Nand Flash[ 1 ]。
NAND FLASH能提供極高的單元密度,并且寫入和擦除的速度也很快,是大容量數(shù)據(jù)存儲的最佳選擇[ 2 ]。但它的缺點也同樣明顯,NAND FLASH讀取速度較慢,它的I/O端口只有8個,數(shù)據(jù)地址線共用,傳送數(shù)據(jù)時,速度遠遠比不上NOR FLASH的并行模式。再加上NAND FLASH的邏輯為電子盤模塊結構,內部不存在專門的存儲控制器,一旦出現(xiàn)數(shù)據(jù)壞塊將無法修正, 可靠性較NOR FLASH要差[ 3 ]。
NOR FLASH采用NOR SGC(Stacked Gate Cell)存儲單元,接口都是單獨的地址、數(shù)據(jù)和控制信號,讀寫方式為并行讀寫,便于直接讀取,隨機讀取速度快,但擦除和寫入速度較慢。NOR FLASH最主要的特點是芯片內執(zhí)行XIP(eXecute-In-Place),這樣應用程序可以直接在FLASH內運行,不必再把代碼讀到系統(tǒng)RAM中。NOR FLASH的傳輸效率很高,在小容量時具有很高的成本效益,不過在大容量時就顯得力不從心。
以上這些特性使得NAND FLASH適合存儲數(shù)據(jù),而NOR FLASH適合存儲程序。
本文接下來討論的幾種FLASH都屬于NOR FLASH,用來存儲嵌入式引導程序,操作系統(tǒng)等。
2 MPC8349處理器單板計算機設計
本文以MPC8349處理器單板計算機為例對PowerPC處理器的嵌入式系統(tǒng)FLASH設計進行分析。MPC8349嵌入式計算機主要應用于信號處理與數(shù)據(jù)計算領域,其系統(tǒng)功能框圖如圖1所示。
MPC8270嵌入式系統(tǒng)的硬件結構包括以下幾個功能電路:電源及復位電路,時鐘電路,處理器電路,存儲器電路以及對外接口電路。
本系統(tǒng)中的串行接口、網(wǎng)絡接口和PCI總線均采用MPC8349上集成的協(xié)議控制器來實現(xiàn)。
本系統(tǒng)中的存儲空間包含以下幾個方面:
DDR:采用4片16位256MB的DDR2芯片MT47H128M16HG
-3IT,以地址線共用、數(shù)據(jù)線拼接的方式為處理器提供了64位1GB的動態(tài)存儲空間,還有1片連接ECC 校驗位,進行校驗,以上5片DDR2芯片作為整個系統(tǒng)的動態(tài)存儲單元,為軟件的運行提供空間;
系統(tǒng)FLASH:采用2片16位32MB的FLASH芯片,以地址線共用、數(shù)據(jù)線拼接的方式為處理器提供了32位64MB的系統(tǒng)FLASH,用于存儲引導程序、操作系統(tǒng)等系統(tǒng)程序;
應用FLASH:采用2片16位32MB的FLASH芯片,以地址線共用、數(shù)據(jù)線拼接的方式為處理器提供了32位64MB的應用FLASH,用于存儲簡單的應用程序。
2.1 國內外主要FLASH選型差異
MPC8270嵌入式系統(tǒng)中我們總共選用了4片16位32MB的FLASH芯片。國內外先后有許多電子元器件廠家生產(chǎn)過這類FLASH芯片,他們大致相同,但選用不同的FLASH芯片在細節(jié)上有許多需要注意的問題。
2.1.1 扇區(qū)大小
這種規(guī)格的FLASH芯片最早是由AMD公司生產(chǎn)的AM29LV256,該FLASH的扇區(qū)大小為64KB。如今AMD的FLASH停產(chǎn)了,這種規(guī)格的FLASH芯片主要由國外的SPANSION公司和國內的國微公司進行生產(chǎn),但是SPANSION公司和國微公司的FLASH扇區(qū)大小為128KB。
出于通用化考慮,由于不同類型的FLASH的設備ID是不一樣的,因此我們可以在引導程序中通過讀取設備ID來識別扇區(qū)大小。
2.1.2 SPANSION公司的兩種FLASH芯片
SPANSION公司生產(chǎn)過兩種8/16位可配置,32MB的FLASH芯片,它們的型號分別為S29GL256N11TFI01和S29GL256P10TFI010。這兩種FLASH芯片的扇區(qū)大小,扇區(qū)總數(shù),讀寫操作都是一致的。但由于在制作工藝上略有差別,使得它們在進行校驗運算時有所不同。
FLASH芯片在擦除、寫入等操作后需要采用toggle的方式進行查詢,判斷操作是否完成。兩種FLASH的toggle算法最大的差異在于S29GL256N11TFI01為讀兩次之后判斷toggle位是否還在變化,而S29GL256P10TFI010為讀三次之后進行判斷。如果沒有按照正確的算法進行校驗,在數(shù)據(jù)量比較小的時候或許也能使用,但進行數(shù)據(jù)量比較大的操作時經(jīng)常會出現(xiàn)錯誤。因此也推薦使用讀FLASH的設備ID號來區(qū)分不同的FLASH芯片,使用相應的算法。
2.1.3 國微公司的四種FLASH芯片
深圳國微公司對SPANSION公司的S29GL256N11TFI01芯片進行了國產(chǎn)化研制,質量等級為國軍標級,校驗算法與S29GL256N11TFI01一致,但是國微公司的FLASH芯片具有四種封裝形式。
除了最初的SM29LV256M,國微公司還提供管腳二次成型的FLASH芯片,從芯片頂端出管腳的飛翼FLASH芯片,以及馬上完成定型的塑封FLASH芯片。
由于前三種FLASH芯片均為金屬封裝,導致芯片質量較大,因此使用時建議在FLASH芯片的兩側點封高強度的膠加以固定,可以有效減少FLASH脫焊現(xiàn)象。
二次成型的FLASH芯片對管腳進行了處理,增加了應力釋放環(huán),用于分攤不同溫度時芯片管腳處產(chǎn)生的應力。飛翼FLASH芯片由于其從芯片頂端出管腳的特性,可極大程度減少焊點處的應力,但由于暴露在外的管腳過長,容易在運輸、使用過程中遭受外力造成管腳損壞,建議增加蓋板進行保護。
2.2 PCB布局
對于FLASH芯片,由于其管腳非常細密,相對來說更加容易出現(xiàn)脫焊。我們對3種模塊近兩年產(chǎn)生的14起脫焊事件進行了分析,有11起脫焊都發(fā)生在距離處理器芯片較近一邊的FLASH芯片上,僅有3起脫焊發(fā)生在距離處理器芯片較遠一邊的FLASH芯片上。
我們對其中一個模塊進行了熱仿真,環(huán)境溫度為30℃,仿真結果見圖2。
從上圖中我們可以看出,處理器芯片是整個模塊中最大的發(fā)熱源。模塊加電工作時處理器芯片附近的溫度會非常高,不斷地加電掉電產(chǎn)生非常大的冷熱溫差,使得靠近處理器芯片的FLASH受到很大的溫度應力,導致脫焊。因此我們在進行PCB布局的時候應該把FLASH芯片盡可能遠離處理器等發(fā)熱量較大的芯片。FLASH芯片在走線的時候為了保證信號質量,不要從開關電源、晶振等噪聲較大的芯片下方穿過。FLASH芯片的讀周期時間一般在100ns左右,不屬于高速信號,因此走線要求比較寬松,不需要嚴格等長。
2.3 FLASH芯片焊接
FLASH芯片如果采取回流焊,會使得管腳淌錫過少,容易出現(xiàn)脫焊。因此建議回流焊之后再進行手工補焊,增加管腳處的錫量。另外,F(xiàn)LASH芯片在維修、更換時一定要將芯片下方的印制板清洗干凈,如果有殘留的松香等雜物,會將FLASH芯片墊高,使得芯片管腳浮空,容易出現(xiàn)脫焊現(xiàn)象。
如果焊接國微公司金屬封裝的FLASH芯片,由于其自重過大,在震動時容易出現(xiàn)脫焊。因此焊接完成這類FLASH芯片時,需要在芯片的兩側點封高強度膠,對芯片進行固定。
2.4 數(shù)據(jù)保護
我們將引導程序存儲在FLASH中,但是在使用過程中常常由于誤操作,對存放引導程序的區(qū)域進行擦寫,導致引導程序錯誤,整個模塊無法啟動,以至于我們重新需要從處理器芯片的JTAG接口來配置處理器并重新編程,對于一些裝有殼體的模塊十分麻煩。因此可以采取一些措施對我們的引導程序進行保護。
在FLASH芯片上有引腳WP#/ACC,當這個信號為低時,可以保護最后一個扇區(qū)不被擦寫。但是最后一個扇區(qū)的地址為0xFFFE0000-0xFFFFFFFF,而PowerPC處理器的上電自啟動地址為0xFFF00100,所以采用該方式不能保護引導程序。因此需要采用控制FLASH的寫信號來完成保護,可以在FPGA中設置控制寫信號使能寄存器,上電時為“1”。
當寫FLASH地址0XFFF00000—0XFFF20000這段地址時,依據(jù)該控制寄存器來決定是否產(chǎn)生寫信號。這種方法可以有效保護我們的引導程序不被誤操作改寫。
2.5 FLASH測試
FLASH一般有兩種類型的測試:FLASH讀測試和FLASH寫測試。FLASH讀測試通常將FLASH中的數(shù)據(jù)讀取出來,與事先設置好的校驗和進行比較,若比較結果一致則說明讀取FLASH數(shù)據(jù)正常。FLASH寫測試則是將測試范圍內的數(shù)據(jù)擦除,再寫入新的數(shù)據(jù)。寫入完成后讀取FLASH中新的數(shù)據(jù),如果和需要寫入的數(shù)據(jù)一致則說明FLASH寫入數(shù)據(jù)正常。
由于FLASH寫入數(shù)據(jù)時具有固定的寫序列,如果在寫序列執(zhí)行過程中處理器收到中斷,跳轉到中斷服務程序,等中斷服務程序執(zhí)行完畢之后再繼續(xù)進行寫序列會有可能會造成寫入失敗,因此在每一個FLASH寫序列過程中需要關閉中斷,等到寫序列執(zhí)行完畢后再使能中斷。
傳統(tǒng)的FLASH寫測試一般的操作順序為擦除單個扇區(qū),寫入數(shù)據(jù),比較數(shù)據(jù),擦除下個扇區(qū)。我們在實際應用中發(fā)現(xiàn)有個別FLASH芯片在寫入文件時報錯,但是對FLASH進行寫測試卻沒有發(fā)現(xiàn)錯誤。對FLASH管腳進行檢測時發(fā)現(xiàn)高位地址線橋連或者脫焊。高位地址線橋連或者脫焊使得FLASH芯片在對扇區(qū)內的數(shù)據(jù)進行讀寫操作時沒有影響,但是在扇區(qū)選擇時會發(fā)生錯誤。傳統(tǒng)的測試程序是對單個扇區(qū)進行操作,無法檢測出這類故障。針對這類問題我們對傳統(tǒng)測試程序進行了改進,改進后的操作順序為將所有測試范圍內的扇區(qū)進行擦除,向每個扇區(qū)寫入各自不同的數(shù)據(jù),等所有測試扇區(qū)的數(shù)據(jù)全部寫入完成后進行讀取,再與需要寫入的數(shù)據(jù)進行比較。改進后的測試程序不再局限于單個扇區(qū),而是對整個測試區(qū)域進行讀寫操作,可以檢測出高位地址線異常而產(chǎn)生的問題。
2.6 其他需要注意的問題
在對FLASH進行擦除或者寫入操作過程中,如果因為突發(fā)情況導致模塊掉電,會使得正在擦除或者寫入的扇區(qū)中的數(shù)據(jù)不穩(wěn)定。重新上電后該扇區(qū)中的個別數(shù)據(jù)會不斷跳變,如果這時對FLASH進行讀測試會報出錯誤。出現(xiàn)這類現(xiàn)象時只需要對該扇區(qū)重新進行擦除,即可消除故障。
3 結束語
由于航空航天領域對國產(chǎn)化的要求,我們在芯片選型時具有一些限制。但隨著國內芯片廠家的發(fā)展,將有越來越多的國產(chǎn)芯片可供選擇。S29GL01GP11TFI010等更大容量的NOR FLASH也將進行國產(chǎn)化研制,對此我們拭目以待。
參考文獻:
[1] 周書林,邱磊,唐桂軍.同時支持Nand Flash和Nor Flash啟動的啟動加載程序設計實現(xiàn).科學技術與工程,2010(02).
[2] 張起貴,裴科,張剛,趙哲峰.基于不同類型Flash-ROM的Bootloader設計.計算機工程與應用,2007(33).
[3] 劉錦萍.閃存與數(shù)碼相機.嘉興學院學報,2006(S1).
作者簡介:施辰光(1988-),男,上海人,助理工程師,研究方向:嵌入式技術。