《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > 超大容量存儲器K9F2G08U0M及其在管道通徑儀中的應(yīng)用

超大容量存儲器K9F2G08U0M及其在管道通徑儀中的應(yīng)用

《電子技術(shù)應(yīng)用》2007年第1期
2007-10-30
作者:張元凱,,靳世久,李一博,,牛 永

摘 要: 新型超大容量" title="超大容量">超大容量Flash存儲器K9F2G08U0M的基本組織結(jié)構(gòu),,給出了存儲器與C8051F020單片機(jī)外部存儲器接口" title="存儲器接口">存儲器接口(EMIF)的硬件連接方式以及存儲器的主要操作流程和部分C語言代碼。

關(guān)鍵詞: K9F2G08U0M 外部存儲器接口? 管道通徑儀

?

閃存(Flash Memory)是一種可以進(jìn)行電擦寫并且掉電后信息不丟失(非易失,,Non-Volatile)的存儲器,,具有功耗低、擦寫速度快等特點,,被廣泛應(yīng)用于外部存儲領(lǐng)域,。
管道運(yùn)輸作為當(dāng)前油氣資源的主要輸送手段,其運(yùn)行安全性受到越來越多的重視,。由于不同的要求使得鋪設(shè)的管道直徑不盡相同,,并且管道在長期運(yùn)行過程中也會存在各種變形,,這對管道缺陷檢測器的運(yùn)行有相當(dāng)大的影響,容易造成卡死等后果,。通徑儀就是鑒于此研制的記錄管徑變動情況的儀器,。一般情況下,通徑儀連續(xù)運(yùn)行幾百公里,,相應(yīng)記錄的數(shù)據(jù)將達(dá)到上百兆字節(jié),。32MB、64MB的閃存已經(jīng)不能滿足需求,。因此選用了Samsung公司開發(fā)的K9F2G08U0M,,其單片容量高達(dá)264MB,可滿足工程需求,。
本文將介紹該存儲器的主要性能及其在管道通徑儀中的應(yīng)用,。
1 K9F2G08U0M存儲器簡介
從接口角度看,雖然K9F2G08U0M的容量和尋址范圍遠(yuǎn)遠(yuǎn)超過常見單片機(jī)的容量和尋址范圍,,但由于芯片上的寫控制器能自動控制所有編程和擦除功能,,提供必要的重復(fù)脈沖、內(nèi)部確認(rèn)和數(shù)據(jù)空間,,而且只通過I/O" title="I/O">I/O接口接收單片機(jī)的命令和數(shù)據(jù)而不需要地址線,,因此實際操作起來非常方便。另外芯片是通過“與非”單元結(jié)構(gòu)增大容量,,所以沒有因此而削弱自身性能,;芯片具有獨(dú)立的1頁大小的數(shù)據(jù)存儲器和緩存存儲器,因此可以在0.2ms內(nèi)完成2112B的頁編程操作,,在2ms內(nèi)完成128KB的塊擦除操作,,同時數(shù)據(jù)區(qū)內(nèi)的數(shù)據(jù)能以30ns/B的速度讀出。
整個存儲區(qū)被分為2 048個相互獨(dú)立的塊,,可從邏輯上和物理上對塊的組織結(jié)構(gòu)分類,。
圖1為塊的邏輯結(jié)構(gòu),每個塊分為64頁,,每頁為2 112B(2 048B+額外存儲區(qū)的64B),。芯片通過頁地址和頁內(nèi)字節(jié)地址訪問每一個字節(jié)。通常頁地址稱為行地址" title="行地址">行地址,,而頁內(nèi)字節(jié)地址稱為列地址,即264MB=2048塊×64頁/塊×2112字節(jié)/頁=217行×2112列,。因此,,行地址需要3個字節(jié),列地址2個字節(jié),,輸入順序如表1所示,。

?

?


從物理結(jié)構(gòu)上看,,該芯片為“與非”結(jié)構(gòu)存儲器,每個塊由兩個“與非”結(jié)構(gòu)串組成,,每個“與非”結(jié)構(gòu)串包含16 896個“與非”結(jié)構(gòu),,每個“與非”結(jié)構(gòu)由32個基本單元(每個基本單元為1位)組成,這32個基本單元分別位于不同的頁內(nèi),,由此得到每個塊的物理結(jié)構(gòu),,如圖2所示。

?


2 硬件連接設(shè)計
管道通徑儀的結(jié)構(gòu)框圖如圖3所示,。管道檢測時MCU采集參數(shù)并存儲在Flash中,,檢測完畢后通過USB接口傳輸至上位機(jī)進(jìn)行數(shù)據(jù)分析。

?


如前所述,,對K9F2G08U0M的操作可以通過只向I/O接口發(fā)送數(shù)據(jù)(包括命令碼,、行列地址碼等)來實現(xiàn),因此最直接的方式是使用單片機(jī)的一個端口作為與芯片的數(shù)據(jù)接口,,并以單片機(jī)的GPIO引腳連接CE,、ALE、CLE以及,,編程時按照手冊中的時序圖控制這些引腳,。但是由于每次操作這些引腳都需要大量的控制線電平轉(zhuǎn)換,使程序十分繁冗,。
由于C8051F020提供了外部存儲器接口(EMIF),,而接口時序由EMIF硬件產(chǎn)生,使其對片外擴(kuò)展的器件操作像對內(nèi)存單元的尋址一樣簡便快捷,。下面采用這種硬件連接方式,,對K9F2G08U0M的主要操作進(jìn)行介紹。電路如圖4所示,,C8051F020只畫出了EMIF接口部分,,選用非復(fù)用方式,以IO7~0作為數(shù)據(jù)線,,CE,、ALE、CLE作為地址線,。由于通徑儀中需要隨時寫入數(shù)據(jù),,因此寫保護(hù)端接高電平。
采用外部存儲器接口對器件編程時,,最重要的是保證總線時序與器件時序一致,。C8051F020的EMIF接口時序能夠以系統(tǒng)時鐘周期為單位編程,因此允許連接具有不同建立時間和保持時間要求以及不同/WR、/RD選通脈沖寬度的器件,。

?


單片機(jī)EMIF在非復(fù)用方式,,一次片外XRAM 操作的最小執(zhí)行時間為5 個SysClk 周期(用于 脈沖的1 個SysClk+4個額外SysClk)。若單片機(jī)系統(tǒng)采用20MHz晶振,,一次MOVX操作的最小執(zhí)行時間為250ns,,而K9F2G08U0M交流參數(shù)中最小建立保持時間的上界為100ns,則即使采用EMI0TC最小的時序參數(shù)也不需要在程序中額外加入延時指令,。
3 軟件設(shè)計
本系統(tǒng)采用C語言編程,,提高了開發(fā)速度并降低了維護(hù)難度。下面分別介紹存儲器的主要操作,。
3.1 按頁讀
K9F2G08U0M中有一個2112B即1頁大小的數(shù)據(jù)寄存器,,這就決定了存儲器的讀操作是以1頁為基本單元進(jìn)行的。如圖5所示,,寫入30H后,,行地址所指定的頁中的數(shù)據(jù)將在25?滋s內(nèi)傳輸?shù)綌?shù)據(jù)寄存器中,然后在脈沖的作用下,,不但可以從指定的列地址開始連續(xù)讀到該頁末尾,,也可以按照流程圖中的虛線部分輸入隨機(jī)讀指令碼,任意讀取該頁中的內(nèi)容,,并且不受次數(shù)限制,。

?


下面是按頁讀操作函數(shù)的C語言代碼。
sbit RdyorBsy=P0^0,;
unsigned char xdata?* data pK9F,;
void PageRead(unsigned int ColAdd,unsigned long
RowAdd,,unsigned int len)
{
unsigned int i=0,;
unsigned char ColTemp,RowTemp,;
ColTemp=(unsigned char)(ColAdd>>8),;
RowTemp=(unsigned char)(RowAdd>>16);
ColTemp &=0x0F,;
RowTemp &=0x01,;

pK9F=0x8002;
?* pK9F=0x00,;
pK9F=0x8001,;
?* pK9F=(unsigned char)(ColAdd);
?* pK9F=ColTemp,;
?* pK9F=(unsigned char)(RowAdd),;
?* pK9F=(unsigned char)(RowAdd>>8),;
?* pK9F=RowTemp;
?pK9F=0x8002,;
?* pK9F=0x30;

while(RdyorBsy),;
while(!RdyorBsy),;
pK9F=0x8000;
for(i=0,;i??OutputData[i]= * pK9F;
}
3.2 頁編程
向器件寫入數(shù)據(jù)時先將數(shù)據(jù)寫入數(shù)據(jù)寄存器中,,器件寫入操作是基于頁進(jìn)行的,,同時允許在一個頁編程周期內(nèi)對一頁內(nèi)的連續(xù)部分編程。若不進(jìn)行擦除,,則對同一頁的連續(xù)部分編程不能超過4次,。
器件支持在1頁范圍內(nèi)的隨機(jī)數(shù)據(jù)輸入,由隨機(jī)輸入命令碼85H啟動,,如圖6中虛線框內(nèi)部分所示,,在1頁范圍內(nèi)可以啟動任意多次隨機(jī)輸入操作。數(shù)據(jù)輸入完畢后,,寫入頁編程確認(rèn)命令10H,,將數(shù)據(jù)寄存器中的內(nèi)容寫入存儲區(qū)。寫入完成后,,需要讀狀態(tài)寄存器" title="狀態(tài)寄存器">狀態(tài)寄存器(通過寫入70H實現(xiàn))判斷操作是否成功,。若未能成功寫入,應(yīng)將當(dāng)前塊聲明為壞塊,,并進(jìn)行塊數(shù)據(jù)替換操作,,以保證整個系統(tǒng)的可靠性。
此外應(yīng)注意,,同一塊內(nèi)頁編程時必須從地址最低的頁開始向高地址的頁依次編程,,頁地址隨機(jī)的頁編程是被禁止的。
下面是頁編程子函數(shù)的C語言代碼,。

?


unsigned char PageWrite(unsigned int ColAdd,,unsigned long
RowAdd)
{
unsigned int data i=0;
unsigned char data Status=0,;
unsigned char data ColTemp,,RowTemp;

ColTemp=(unsigned char)(ColAdd>>8),;
RowTemp=(unsigned char)(RowAdd>>16),;
ColTemp &=0x0F;
RowTemp &=0x01;

pK9F=0x8002,;
?* pK9F=0x80,;
pK9F=0x8001;
?* pK9F=(unsigned char)(ColAdd),;
?* pK9F=ColTemp,;
?* pK9F=(unsigned char)(RowAdd);
?* pK9F=(unsigned char)(RowAdd>>8),;
?* pK9F=RowTemp,;
pK9F=0x8000;
for(i=0,;i<2112,;i++)
??* pK9F=InputData[i];
pK9F=0x8002,;
? * pK9F=0x10,;

while(RdyorBsy);
while(!RdyorBsy),;

pK9F=0x8002,;
?* pK9F=0x70;
pK9F=0x8000,;
Status=* pK9F,;
Status &=0x01;
return (Status),;
}
3.3 塊擦除
擦除操作以塊為單位進(jìn)行,,由于器件分為2 048塊,因此輸入的地址碼中只有A18~A2的11位有效,,其余位將被忽略,。通過輸入確認(rèn)命令碼來啟動擦除以防止誤操作。塊擦除流程如圖7所示,。同頁編程操作類似,,擦除完畢后也應(yīng)該讀狀態(tài)寄存器并處理返回結(jié)果。

?


3.4 頁復(fù)制
頁復(fù)制操作用來快速有效地實現(xiàn)頁間數(shù)據(jù)移動,,這是由于省去了比較費(fèi)時的與片外設(shè)備之間的讀寫操作,。這一特性的優(yōu)勢在塊替換操作用于頁間數(shù)據(jù)復(fù)制時體現(xiàn)尤為明顯。其實該操作是按頁讀與頁編程操作的復(fù)合,,頁復(fù)制讀命令35H將頁中數(shù)據(jù)移至數(shù)據(jù)寄存器中,,而頁復(fù)制寫命令85H將數(shù)據(jù)復(fù)制到目標(biāo)頁中。頁復(fù)制流程圖如圖8所示,。

?


該操作也可以將原始頁中的數(shù)據(jù)修改后寫入目標(biāo)頁,,如流程圖8中虛線框內(nèi)部分,。
需要注意的是,頁復(fù)制操作只能在奇數(shù)頁之間或偶數(shù)頁之間進(jìn)行,,奇偶頁之間的數(shù)據(jù)移動將被禁止,。
3.5 緩存區(qū)編程
芯片中除1頁大小的數(shù)據(jù)寄存器外,還有一個1頁大小的緩沖寄存器,。該緩沖寄存器可以在數(shù)據(jù)寄存器參與頁編程的同時接收外部數(shù)據(jù),,等待數(shù)據(jù)寄存器空閑時將數(shù)據(jù)轉(zhuǎn)移其中,然后繼續(xù)接收數(shù)據(jù),。因此,采用緩存區(qū)編程操作在連續(xù)寫入多頁數(shù)據(jù)時將會大大提高效率,。
緩存區(qū)編程流程如圖9所示,。當(dāng)?shù)谝唤M數(shù)據(jù)寫入緩沖寄存器時,寫入緩存命令15H,,將數(shù)據(jù)傳遞給數(shù)據(jù)寄存器并啟動頁編程,,然后使緩沖寄存器空閑,準(zhǔn)備接收下一組數(shù)據(jù),。在這個過程中芯片將處于忙狀態(tài),,若內(nèi)部編程操作未完成,忙狀態(tài)持續(xù)的時間將被延長,。


需要注意的是,,該操作只能在同一塊內(nèi)進(jìn)行,因此在多塊數(shù)據(jù)寫入時需要注意每塊的最后一頁,。若系統(tǒng)僅僅通過芯片的Ready/Busy引腳監(jiān)測編程進(jìn)度,,則最后一頁的寫入操作應(yīng)該由頁編程命令10H啟動。另外也可以通過讀狀態(tài)寄存器中的I/O 5位來判斷,。
K9F2G08U0M是一種新型的超大容量Flash存儲器,,以其非易失、功耗低,、操作簡單而在單片嵌入式系統(tǒng)中得到廣泛應(yīng)用,。本文在管道通徑儀的開發(fā)過程中,根據(jù)對外部存儲器接口的深入理解,,將存儲器芯片的兩個控制線ALE和CLE用作地址線,,使得對存儲器的操作更簡捷高效。文中的程序已經(jīng)過實際驗證,,限于篇幅,,只給出按頁讀和頁編程部分的代碼。
參考文獻(xiàn)
[1] K9F2G08U0M數(shù)據(jù)手冊.SAMSUNG Electronics CO.,,LTD,,2005.
[2] 潘琢金譯.C8051F020數(shù)據(jù)手冊.Silicon Laboratories,,2005.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點,。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問題,,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com,。