付紹凱,盧俊強(qiáng),鞠曉東,陳光建,門(mén)百永
(1.中國(guó)石油大學(xué)(北京)油氣資源與探測(cè)國(guó)家重點(diǎn)實(shí)驗(yàn)室,北京102249;2.北京市地球探測(cè)與信息技術(shù)重點(diǎn)實(shí)驗(yàn)室,北京102249;3.中國(guó)石油集團(tuán)測(cè)井有限公司生產(chǎn)測(cè)井中心,河北任丘062552)
與傳統(tǒng)電纜測(cè)井不同,在隨鉆聲波測(cè)井中,測(cè)井儀器需要在井下獨(dú)立工作,地面測(cè)井系統(tǒng)無(wú)法對(duì)井下儀器進(jìn)行控制,所有的儀器工作模式和數(shù)據(jù)采集、處理都需要井下控制器完成[1]。并且受泥漿傳輸速率的影響(中國(guó)5 bit/s左右),除少量必要的處理結(jié)果被實(shí)時(shí)傳輸?shù)降孛嫦到y(tǒng)外,大量處理結(jié)果和原始測(cè)量波形數(shù)據(jù)是被存儲(chǔ)在儀器存儲(chǔ)器內(nèi)[2]。與傳統(tǒng)聲波測(cè)井儀器相比,新型聲波測(cè)井儀器向著規(guī)?;㈥嚵谢某上駵y(cè)井儀器發(fā)展,這一方面提高了儀器探測(cè)深度和精度;另一方面也大大增加了測(cè)井?dāng)?shù)據(jù)量。由于數(shù)據(jù)量的大增,目前遙測(cè)系統(tǒng)已不能完成數(shù)據(jù)的實(shí)時(shí)傳輸,所以測(cè)井時(shí)僅上傳部分?jǐn)?shù)據(jù)作為觀測(cè),所有測(cè)井?dāng)?shù)據(jù)存儲(chǔ)在井下存儲(chǔ)器內(nèi)。
將數(shù)據(jù)存儲(chǔ)在井下存儲(chǔ)器上,面臨的另一個(gè)問(wèn)題就是數(shù)據(jù)的存儲(chǔ)和讀取方式。受測(cè)井條件高溫高壓和振動(dòng)等因素的影響,井下存儲(chǔ)器一般選用大容量非易失性的NAND Flash存儲(chǔ)器。目前,中國(guó)聲波測(cè)井儀器井下存儲(chǔ)幾乎未采用文件系統(tǒng)進(jìn)行測(cè)井?dāng)?shù)據(jù)的有效管理,而是采用直接驅(qū)動(dòng)物理存儲(chǔ)器的方式進(jìn)行數(shù)據(jù)操作。受NAND Flash結(jié)構(gòu)限制,采用地址、數(shù)據(jù)和命令復(fù)用的接口形式,只能按頁(yè)進(jìn)行數(shù)據(jù)的寫(xiě)入和讀取,且復(fù)寫(xiě)數(shù)據(jù)前需要以塊為單位擦除后才能寫(xiě)入。在進(jìn)行儀器開(kāi)發(fā)時(shí),開(kāi)發(fā)人員直接面對(duì)的是底層驅(qū)動(dòng)的開(kāi)發(fā),而且儀器設(shè)計(jì)后,必須詳細(xì)說(shuō)明數(shù)據(jù)的寫(xiě)入及讀取方式,供后續(xù)軟件和地面系統(tǒng)開(kāi)發(fā)人員進(jìn)行下一步開(kāi)發(fā)。這種方式不僅數(shù)據(jù)管理復(fù)雜、使用靈活性差,還會(huì)加大儀器開(kāi)發(fā)的周期、增加數(shù)據(jù)存取過(guò)程中的錯(cuò)誤。為更好滿足越來(lái)越復(fù)雜的井下存儲(chǔ)的需要,有必要將“文件系統(tǒng)”引入聲波測(cè)井儀器對(duì)測(cè)井?dāng)?shù)據(jù)進(jìn)行文件式管理,實(shí)現(xiàn)數(shù)據(jù)的“按名存取”。
聲波測(cè)井儀器井下數(shù)據(jù)文件系統(tǒng)是基于DSP+FPGA+NAND Flash的硬件平臺(tái)實(shí)現(xiàn)的(見(jiàn)圖1)。該硬件平臺(tái)主要實(shí)現(xiàn)了測(cè)井的數(shù)據(jù)采集、實(shí)時(shí)處理和數(shù)據(jù)的存儲(chǔ)控制。井下存儲(chǔ)控制電路以DSP(digital signal process)控制器為核心,設(shè)計(jì)選用TI公司的32 bit浮點(diǎn)處理器TMS320F28335。以DSP為核心,通過(guò)外部存儲(chǔ)器接口(XINTF)擴(kuò)展FPGA接收命令實(shí)現(xiàn)對(duì)NAND Flash的數(shù)據(jù)、地址和命令信號(hào)的控制[2],實(shí)現(xiàn)測(cè)井?dāng)?shù)據(jù)的寫(xiě)入和讀出。通過(guò)XINTF接口擴(kuò)展SRAM實(shí)現(xiàn)對(duì)DSP程序和數(shù)據(jù)空間的擴(kuò)展。通過(guò)擴(kuò)展CAN總線模塊和SCI模塊實(shí)現(xiàn)存儲(chǔ)控制電路與前端機(jī)和上位機(jī)的命令、數(shù)據(jù)的交互。
TMS320F28335的XINTF接口可以分別映射到3個(gè)固定的存儲(chǔ)器映射區(qū)域Zone0/6/7,通過(guò)片選信號(hào)置低控制每個(gè)區(qū)域。XINTF接口可以通過(guò)軟件編程設(shè)定獨(dú)立的等待時(shí)間、保持時(shí)間和選通信號(hào)的建立時(shí)間。XINTF接口共有31根數(shù)據(jù)線、20根地址線及片選、讀寫(xiě)使能、輸出時(shí)鐘等信號(hào)線[3-4]。設(shè)計(jì)選用CYPRESS的256 kB×16 bit的SRAM芯片映射到區(qū)域7。為提高電路的復(fù)用性,設(shè)計(jì)了XA0~XA18共19根地址線分別與XINTF接口的地址引腳相連,因此也可使用512 kB×16 bit的SRAM。SRAM的IO0-15分別連接X(jué)INTF接口的XD0~XD15引腳,SRAM的片選、讀/寫(xiě)信號(hào)線分別連接X(jué)INTF接口的XZCS7/XWE/XRD引腳,高低字節(jié)選擇BHE和BLE直接接地。
井下存儲(chǔ)板選用的是SAMSUNG公司的K9**M[5]型NAND Flash。K9**M包括I/O0-7數(shù)據(jù)輸入輸出、命令/地址使能、片選、讀/寫(xiě)使能、寫(xiě)保護(hù)、忙狀態(tài)等引腳。NAND Flash接口的設(shè)計(jì)稍微復(fù)雜,DSP沒(méi)有NAND Flash接口,通過(guò)FPGA擴(kuò)展實(shí)現(xiàn):FPGA通過(guò)XINTF接口接收DSP的命令和數(shù)據(jù),控制整個(gè)NAND Flash的操作,包括片選、命令、數(shù)據(jù)、地址的選擇,而NAND Flash讀寫(xiě)信號(hào)是直接由XINTF接口的讀/寫(xiě)控制信號(hào)XRD和XWE控制,輸入輸出引腳I/O0~I(xiàn)/O7直接接X(jué)INTF接口的XD0~XD7引腳。
圖1 井下存儲(chǔ)控制電路結(jié)構(gòu)圖 圖2 井下數(shù)據(jù)文件系統(tǒng)軟件結(jié)構(gòu)圖
(1)CAN通訊接口。設(shè)計(jì)井下存儲(chǔ)控制電路時(shí),為了能夠兼容EILog測(cè)井系統(tǒng),系統(tǒng)設(shè)計(jì)了CAN通信模塊。F28335中集成了2個(gè)增強(qiáng)型CAN總線控制器eCAN。eCAN集成了CAN協(xié)議的物理層和數(shù)據(jù)鏈路層功能。CAN總線使用差分電壓進(jìn)行信號(hào)傳送,為了使CAN模塊的電平符合高速CAN總線電平特性,在eCAN模塊和CAN接口之間增加CAN的驅(qū)動(dòng)芯片MAX305X,實(shí)現(xiàn)單端和差分信號(hào)的轉(zhuǎn)換。為了抑制總線回波折射,在差分信號(hào)CAN_H和CAN_L之間串聯(lián)120 Ω的電阻作為終端匹配電阻,當(dāng)該設(shè)備不作為終端時(shí),可以摘除跳帽。
(2)RS232及RS485通訊接口。串口通信接口SCI采用2根信號(hào)線的異步串行通信接口。F28335集成了3個(gè)SCI接口,在井下存儲(chǔ)控制電路中,擴(kuò)展了其中2路SCI接口:一路用作監(jiān)測(cè)設(shè)備運(yùn)行狀態(tài);一路作為井下數(shù)據(jù)與上位機(jī)的傳輸通道。作為監(jiān)測(cè)作用的SCI,只是簡(jiǎn)單的將SCIC接口進(jìn)行擴(kuò)展,與上位機(jī)進(jìn)行串口通信。而作為數(shù)據(jù)通道的一路采用的是RS485接口,井下電路選用SN65LBC184D芯片作為驅(qū)動(dòng)芯片將SCIB擴(kuò)展為RS485接口。
在嵌入式設(shè)備中很難應(yīng)用基于Linux環(huán)境開(kāi)發(fā)的JFFS系列和YAFFS系列[6]等專用文件系統(tǒng)??紤]到井下儀器管理數(shù)據(jù)的特殊性,只需要實(shí)現(xiàn)測(cè)井?dāng)?shù)據(jù)的文件化管理。本文提出了井下數(shù)據(jù)文件管理系統(tǒng)分層實(shí)現(xiàn)的軟件結(jié)構(gòu)思路:移植嵌入式FatFS文件系統(tǒng)到DSP中,通過(guò)設(shè)計(jì)閃存轉(zhuǎn)換層(FTL)[7]實(shí)現(xiàn)FatFS對(duì)NAND Flash存儲(chǔ)器的管理,從而實(shí)現(xiàn)了在NAND Flash上穩(wěn)定運(yùn)行FAT型文件系統(tǒng)。
井下數(shù)據(jù)文件系統(tǒng)軟件結(jié)構(gòu)見(jiàn)圖2。整個(gè)系統(tǒng)從上到下包括3部分:頂層應(yīng)用層作為用戶接口層,給用戶提供必要的API函數(shù),實(shí)現(xiàn)對(duì)文件系統(tǒng)進(jìn)行管理和開(kāi)發(fā);文件管理層是井下文件系統(tǒng)的具體實(shí)現(xiàn)部分,主要包括FAT層和FTL層;底層驅(qū)動(dòng)層作為底層物理設(shè)備接口層,是根據(jù)底層具體物理設(shè)備實(shí)現(xiàn)文件管理層預(yù)留的讀寫(xiě)接口函數(shù)。
2.1.1FAT層實(shí)現(xiàn)
FatFS的FAT文件系統(tǒng)[8]支持FAT12/16/32。標(biāo)準(zhǔn)C編寫(xiě),不受硬件平臺(tái)限制,易于移植。代碼量小,且支持多種配置。基于FatFS文件系統(tǒng)的FAT層移植主要包括以下3步[9]。
第1步數(shù)據(jù)類型修改,修改源碼中數(shù)據(jù)類型頭文件,使其定義的數(shù)據(jù)類型與F28335的開(kāi)發(fā)環(huán)境CCS5.2編譯器相對(duì)應(yīng)。第2步配置選項(xiàng)修改(見(jiàn)表1)。第3步編寫(xiě)底層接口,底層磁盤(pán)I/O與FatFS模塊是完全分開(kāi)的,需要編寫(xiě)表2所示的6個(gè)接口函數(shù):底層物理磁盤(pán)的讀、寫(xiě)和獲取當(dāng)前時(shí)間等函數(shù)。
表1 FatFS配置選項(xiàng)
表2 FatFS底層接口函數(shù)
通過(guò)以上3步,基本完成了FatFS的移植工作,但是要實(shí)現(xiàn)FatFS文件系統(tǒng)管理NAND Flash存儲(chǔ)器,還需要完成閃存轉(zhuǎn)換層的設(shè)計(jì)。
2.1.2FTL層設(shè)計(jì)
為在NAND Flash上運(yùn)行塊設(shè)備文件系統(tǒng),需要在底層NAND Flash設(shè)備之上設(shè)計(jì)FTL層,使FatFS文件系統(tǒng)像控制磁盤(pán)設(shè)備那樣管理NAND Flash存儲(chǔ)器。由于NAND Flash的物理特點(diǎn)和使用要求的獨(dú)特性,在設(shè)計(jì)FTL層時(shí)需要包含以下幾個(gè)功能模塊[7]:地址映射、壞塊管理、ECC糾錯(cuò)、均衡擦除等(見(jiàn)圖3)。
(1)頂層接口。它是針對(duì)FatFS文件系統(tǒng)底層給用戶預(yù)留的接口,主要包括3個(gè)函數(shù)(見(jiàn)表3):初始化函數(shù)、寫(xiě)指定扇區(qū)函數(shù)和讀指定扇區(qū)函數(shù)。這3個(gè)函數(shù)供FatFS文件系統(tǒng)中的底層調(diào)用。
表3 FTL頂層接口函數(shù)
圖3 FTL結(jié)構(gòu)圖
(2)地址映射。由于NAND Flash在出廠和使用過(guò)程中可能會(huì)出現(xiàn)壞塊且數(shù)據(jù)更新采用異地更新策略,造成了物理地址的不連續(xù)性,因此,需要將邏輯地址動(dòng)態(tài)的映射到物理地址上。地址映射按照映射單位可以分為頁(yè)映射、塊映射和混合映射[10]??紤]到井下控制器內(nèi)存資源有限,采用塊映射方式。
圖4 系統(tǒng)映射關(guān)系
程序中通過(guò)在邏輯地址和物理地址之間維護(hù)一張映射表實(shí)現(xiàn)塊映射,如圖4為某一時(shí)刻系統(tǒng)映射關(guān)系。程序中采用直接映射和間接映射實(shí)現(xiàn)物理-邏輯映射:上電后,掃描整個(gè)NAND Flash在RAM中建立映射表為直接映射。斷電后,該映射表需要存儲(chǔ)到NAND Flash中,以便每次上電后重建而不丟失。系統(tǒng)是將該映射表存儲(chǔ)在每個(gè)Block的第1個(gè)Page的空閑區(qū),稱為間接映射??臻e區(qū)的分配情況見(jiàn)表4。
(3)壞塊管理。NAND Flash中的壞塊不能被映射到邏輯地址,所以必須對(duì)壞塊進(jìn)行標(biāo)記并保存,避免使用壞塊。NAND Flash中壞塊存在的形式主要有2種:①出廠時(shí)存在的固有壞塊;②在使用過(guò)程中產(chǎn)生的動(dòng)態(tài)壞塊。對(duì)于出廠壞塊,通常在每個(gè)壞塊的第1個(gè)Page(第2個(gè)備份)的空閑區(qū)的第1個(gè)字節(jié)以非0xFF的值來(lái)表示。對(duì)于動(dòng)態(tài)產(chǎn)生的壞塊,通過(guò)在第1個(gè)Page的空閑區(qū)第1個(gè)字節(jié)寫(xiě)入0xAA進(jìn)行標(biāo)記。
表4 空閑區(qū)分配表
常用的壞塊管理技術(shù)有2種[11-12]:①壞塊跳過(guò),這種方法實(shí)現(xiàn)簡(jiǎn)單,但占用內(nèi)存大、耗時(shí)長(zhǎng)且不能實(shí)現(xiàn)壞塊的透明化管理;②塊保留區(qū)替換法。系統(tǒng)采用的是保留區(qū)替換法,通過(guò)將所有塊劃分為數(shù)據(jù)區(qū)和保留區(qū)(見(jiàn)圖4)。程序中設(shè)定數(shù)據(jù)區(qū)占93%,保留區(qū)占7%。數(shù)據(jù)區(qū)用于正常的邏輯映射進(jìn)行數(shù)據(jù)存儲(chǔ),保留區(qū)作為產(chǎn)生壞塊時(shí)的替換區(qū)域。當(dāng)產(chǎn)生壞塊后,就將該壞塊的邏輯地址映射到保留區(qū)有效塊的物理地址上。通過(guò)這種方法簡(jiǎn)單、高效的實(shí)現(xiàn)了壞塊的管理。
(4)ECC糾錯(cuò)。NAND Flash由于自身物理結(jié)構(gòu)和工作原理的特點(diǎn),存儲(chǔ)單元可能會(huì)出現(xiàn)“位反轉(zhuǎn)”現(xiàn)象,造成寫(xiě)入數(shù)據(jù)與讀出數(shù)據(jù)的不一致[13]。
ECC(Error Checking and Correction),是一種對(duì)傳輸數(shù)據(jù)的錯(cuò)誤檢測(cè)和糾正的算法。K9**M為SLC結(jié)構(gòu),基于Hamming Code的ECC校驗(yàn)?zāi)軌驖M足SLC結(jié)構(gòu)Flash的糾錯(cuò)要求。Hamming Code是通過(guò)計(jì)算數(shù)據(jù)包得到2個(gè)ECC校驗(yàn)值(奇校驗(yàn)值和偶校驗(yàn)值),為了計(jì)算ECC校驗(yàn)值,首先需要將數(shù)據(jù)包數(shù)據(jù)進(jìn)行分割,按1/2組、1/4組、1/8組直到其精度達(dá)到單比特為止。然后按分組后形成的奇數(shù)組和偶數(shù)組后分別組內(nèi)異或,最后按1/2組異或結(jié)果構(gòu)成ECC校驗(yàn)的最高位,依次類推分別得到偶校驗(yàn)值和奇校驗(yàn)值。在數(shù)據(jù)讀取時(shí)將2次ECC校驗(yàn)數(shù)值進(jìn)行按位“異或”,就可以判斷是否出現(xiàn)錯(cuò)誤。如果計(jì)算結(jié)果為全“0”,說(shuō)明數(shù)據(jù)在讀寫(xiě)過(guò)程中未發(fā)生變化。如果計(jì)算的結(jié)果為全“1”,表明發(fā)生了1 bit錯(cuò)誤,其他情況,則表明至少有2 bits數(shù)據(jù)出現(xiàn)了錯(cuò)誤。將原有奇校驗(yàn)值和新奇校驗(yàn)值進(jìn)行按位“異或”可以得到出錯(cuò)地址。
以512 B為數(shù)據(jù)包計(jì)算ECC校驗(yàn)值,將會(huì)產(chǎn)生24 bits的校驗(yàn)值,即3 B(212=4 096 bit=512 B,12×2=24 bit)。系統(tǒng)將ECC校驗(yàn)值存儲(chǔ)在NAND Flash中的空閑區(qū)中,為了便于寫(xiě)入和讀出,采用3 B+1 B的形式進(jìn)行存儲(chǔ),即第4個(gè)字節(jié)默認(rèn)為0xFF。設(shè)計(jì)采用的NAND Flash存儲(chǔ)器是4 kB大小的Page,需要32B來(lái)存儲(chǔ)1個(gè)Page生成的ECC校驗(yàn)值。表4為ECC校驗(yàn)值在空閑區(qū)的分配情況。
(5)均衡摩擦。由于NAND Flash每塊的擦寫(xiě)次數(shù)有一定上限,如果頻繁對(duì)某一塊進(jìn)行擦寫(xiě)會(huì)導(dǎo)致該塊提前達(dá)到上限成為壞塊,從而影響整片F(xiàn)lash的性能。在設(shè)計(jì)閃存轉(zhuǎn)換層時(shí)應(yīng)采用必要的負(fù)載均衡算法[14],使擦寫(xiě)均勻分布在各塊上,從而提高整片F(xiàn)lash的性能,延長(zhǎng)其使用壽命??紤]到聲波測(cè)井井下數(shù)據(jù)存儲(chǔ)的實(shí)際情況,系統(tǒng)主要從空閑塊搜尋和復(fù)寫(xiě)數(shù)據(jù)2個(gè)方面實(shí)現(xiàn)存儲(chǔ)器的均衡摩擦。
空閑塊搜尋[15],FTL采用隨機(jī)數(shù)產(chǎn)生函數(shù)rand()和種子函數(shù)srand()生成指定范圍內(nèi)的隨機(jī)數(shù)。以時(shí)間為種子,那么每次產(chǎn)生的隨機(jī)數(shù)將是隨機(jī)的。當(dāng)系統(tǒng)需要分配1個(gè)空閑塊時(shí),就從產(chǎn)生的隨機(jī)數(shù)開(kāi)始搜尋空閑塊,這樣使空閑塊有均等的機(jī)會(huì)被分配使用,從而實(shí)現(xiàn)了一定程度上磨損均衡。
(6)復(fù)寫(xiě)數(shù)據(jù)。當(dāng)文件系統(tǒng)向某一已經(jīng)寫(xiě)過(guò)數(shù)據(jù)的數(shù)據(jù)塊中寫(xiě)入新的數(shù)據(jù)時(shí),由于NAND Flash必須先擦除塊才能寫(xiě)入新數(shù)據(jù),一般是將整塊數(shù)據(jù)讀到緩存中,然后在緩存中改寫(xiě)需要寫(xiě)入的新數(shù)據(jù),擦除該塊,再將緩存中的數(shù)據(jù)重新寫(xiě)入該塊。這種方式,一是非常耗時(shí);二是會(huì)對(duì)某一塊頻繁進(jìn)行擦寫(xiě);三是就設(shè)計(jì)使用的NAND Flash而言單塊大小為(256+8) kB,如果將整塊數(shù)據(jù)讀到緩存中將耗費(fèi)大量RAM空間。所以在設(shè)計(jì)FTL時(shí),利用NAND Flash的同一plane內(nèi)頁(yè)拷貝的功能,無(wú)需將整塊數(shù)據(jù)讀出,只需要在頁(yè)拷貝的過(guò)程中,在需要改寫(xiě)的地址處寫(xiě)入需要更新的數(shù)據(jù)就可實(shí)現(xiàn)數(shù)據(jù)的復(fù)寫(xiě)。作為頁(yè)拷貝的目的塊,系統(tǒng)是通過(guò)搜尋空閑塊實(shí)現(xiàn)的。這樣的設(shè)計(jì)不僅提高了復(fù)寫(xiě)數(shù)據(jù)的效率,另外也在一定程度上實(shí)現(xiàn)了均衡摩擦。為了能夠不頻繁擦除某塊提高整片F(xiàn)lash的壽命,應(yīng)該預(yù)留足夠的保留塊。
(7)底層接口。底層接口是和底層硬件相關(guān)的具體實(shí)現(xiàn)函數(shù),FTL提供的底層接口主要是供給用戶針對(duì)具體硬件設(shè)備的初始化、讀寫(xiě)頁(yè)、擦除塊和頁(yè)復(fù)制等函數(shù)接口。
根據(jù)設(shè)計(jì)使用的底層物理設(shè)備K9**M NAND Flash,編寫(xiě)閃存轉(zhuǎn)換層預(yù)留的底層接口函數(shù)[5]。
NAND Flash初始化。①對(duì)NAND Flash進(jìn)行復(fù)位;②讀取設(shè)備ID,并與已設(shè)定ID比較,若相同則進(jìn)行相應(yīng)參數(shù)的設(shè)置(頁(yè)大小、有效數(shù)據(jù)區(qū)大小、空閑區(qū)大小、單塊包含頁(yè)數(shù)、1個(gè)plane包含的block數(shù)、總塊數(shù)等),若沒(méi)有相同項(xiàng)則初始化失敗。
寫(xiě)入物理頁(yè)。通過(guò)NAND Flash寫(xiě)入命令實(shí)現(xiàn)數(shù)據(jù)寫(xiě)入,除了寫(xiě)入數(shù)據(jù)外,還針對(duì)NAND Flash的物理特性,設(shè)計(jì)了ECC校驗(yàn)功能,通過(guò)調(diào)用校驗(yàn)函數(shù)求取ECC校驗(yàn)值,利用隨機(jī)寫(xiě)入命令將ECC校驗(yàn)值寫(xiě)入到空閑區(qū)中。
讀取物理頁(yè)。通過(guò)NAND Flash讀取命令,實(shí)現(xiàn)數(shù)據(jù)讀取,另外利用隨機(jī)讀取命令讀取空閑區(qū)ECC校驗(yàn)值。將讀取后的數(shù)據(jù)進(jìn)行ECC校驗(yàn)產(chǎn)生ECC校驗(yàn)值,與存儲(chǔ)在空閑區(qū)的ECC校驗(yàn)值進(jìn)行比較,可以得出是否發(fā)生位反轉(zhuǎn)錯(cuò)誤,如發(fā)生1 bit錯(cuò)誤,則可以通過(guò)糾錯(cuò)函數(shù)將數(shù)據(jù)糾錯(cuò),如果發(fā)生2 bit的ECC校驗(yàn)錯(cuò)誤,則會(huì)報(bào)告的2 bit ECC數(shù)據(jù)錯(cuò)誤。
擦除塊。先寫(xiě)入擦除命令1,然后寫(xiě)入根據(jù)塊號(hào)換算的塊地址,最后寫(xiě)入擦除命令2,通過(guò)寫(xiě)入狀態(tài)命令,獲得I/O的0值即可判斷擦除是否成功。
Plane內(nèi)頁(yè)拷貝。頁(yè)拷貝分為有數(shù)據(jù)寫(xiě)入和無(wú)數(shù)據(jù)寫(xiě)入2種,在有數(shù)據(jù)寫(xiě)入時(shí)還需要進(jìn)行ECC校驗(yàn)值計(jì)算,將ECC校驗(yàn)值寫(xiě)入空閑區(qū)。
頂層應(yīng)用層是系統(tǒng)為用戶提供一系列API函數(shù),是供用戶開(kāi)發(fā)、管理系統(tǒng)的接口層。該系列API函數(shù)是針對(duì)井下數(shù)據(jù)文件系統(tǒng)的具體需求對(duì)FatFS文件系統(tǒng)的接口函數(shù)層進(jìn)行進(jìn)一步封裝形成的,便于用戶調(diào)用,圖5為井下數(shù)據(jù)文件系統(tǒng)通用的開(kāi)發(fā)流程。
圖5 井下數(shù)據(jù)文件系統(tǒng)開(kāi)發(fā)流程
(1)性能測(cè)試。文件系統(tǒng)的讀寫(xiě)速度是用戶最關(guān)心的性能,該文件系統(tǒng)的讀寫(xiě)速度測(cè)試結(jié)果見(jiàn)表5。
(2)應(yīng)用測(cè)試。以中國(guó)石油大學(xué)(北京)聲波測(cè)井實(shí)驗(yàn)室研制的方位遠(yuǎn)探測(cè)反射聲波測(cè)井儀[16-17]為例,對(duì)該系統(tǒng)進(jìn)行實(shí)際應(yīng)用測(cè)試,該儀器接收短節(jié)共有10站,每站有8個(gè)通道,共有80個(gè)接收通道。在常規(guī)測(cè)井單極、偶極均工作的情況下,單次工作每個(gè)通道會(huì)產(chǎn)生4 kB的數(shù)據(jù),則接收短節(jié)產(chǎn)生的數(shù)據(jù)量多達(dá)320 kB。以測(cè)量200 m井段為例,儀器每米采集5個(gè)點(diǎn),則將產(chǎn)生312 MB的數(shù)據(jù)量。
將采集數(shù)據(jù)連續(xù)存入同一文件中,通過(guò)文件系統(tǒng)對(duì)該文件連續(xù)寫(xiě)入400 MB數(shù)據(jù)(多于實(shí)際測(cè)井?dāng)?shù)據(jù)量),共用時(shí)14 min 50 s(460 kB/s)。將寫(xiě)入數(shù)據(jù)全部讀出,共用時(shí)11 min 31 s(593 kB/s)。數(shù)據(jù)準(zhǔn)確率符合測(cè)井要求。
表5 讀寫(xiě)速度測(cè)試
從性能和應(yīng)用2個(gè)方面對(duì)該文件系統(tǒng)進(jìn)行相應(yīng)測(cè)試,結(jié)果表明井下數(shù)據(jù)文件系統(tǒng)完成了最初設(shè)計(jì)的要求。該系統(tǒng)能夠向用戶提供必要的API函數(shù)實(shí)現(xiàn)對(duì)文件系統(tǒng)的管理,包括新建文件、文件讀/寫(xiě)、文件刪除、獲取文件大小、獲取根目錄下文件名等功能,從而實(shí)現(xiàn)了以文件形式管理井下測(cè)井?dāng)?shù)據(jù)。在讀寫(xiě)速度方面,以目前儀器的采集速度和儀器設(shè)計(jì)的數(shù)據(jù)上傳速度,該系統(tǒng)實(shí)現(xiàn)的平均412 kB/s寫(xiě)入速度(非復(fù)寫(xiě))和583 kB/s的讀取速度能夠滿足聲波測(cè)井儀井下數(shù)據(jù)的存儲(chǔ)要求。作為目前聲波測(cè)井中采集數(shù)據(jù)量最大的方位遠(yuǎn)探測(cè)反射聲波測(cè)井儀,該系統(tǒng)也能夠?qū)崿F(xiàn)對(duì)大容量文件連續(xù)寫(xiě)入和讀出操作,滿足測(cè)井儀器上的實(shí)際應(yīng)用。
由于井下數(shù)據(jù)文件系統(tǒng)不同于普通嵌入式文件系統(tǒng),井下高溫高壓環(huán)境再加上資源有限限制了文件系統(tǒng)設(shè)計(jì),進(jìn)一步提高該文件系統(tǒng)的穩(wěn)定性是其中一項(xiàng)重要任務(wù)。另外,隨著聲波測(cè)井儀器的進(jìn)一步發(fā)展,對(duì)讀寫(xiě)速度的要求也會(huì)越來(lái)越高,深入研究閃存轉(zhuǎn)換的關(guān)鍵技術(shù)是解決該問(wèn)題的突破口。
在中國(guó)聲波測(cè)井儀器尚未引入以文件系統(tǒng)的形式管理井下數(shù)據(jù)的背景下,本文以嵌入式文件系統(tǒng)FatFS為基礎(chǔ)設(shè)計(jì)了一款適用于井下數(shù)據(jù)存儲(chǔ)管理的分層結(jié)構(gòu)的文件系統(tǒng),詳細(xì)介紹了井下數(shù)據(jù)文件管理系統(tǒng)的實(shí)現(xiàn)過(guò)程,并進(jìn)行相應(yīng)測(cè)試。測(cè)試結(jié)果表明該系統(tǒng)實(shí)現(xiàn)了最初的設(shè)計(jì)要求,系統(tǒng)提供了一系列API函數(shù)使用戶能夠以文件的形式對(duì)井下數(shù)據(jù)進(jìn)行管理,很大程度上提高了數(shù)據(jù)管理的穩(wěn)定性?!拔募到y(tǒng)”的引入是目前聲波測(cè)井儀器井下數(shù)據(jù)存儲(chǔ)管理的有效解決方案,該設(shè)計(jì)的實(shí)現(xiàn)不僅有利于提高聲波測(cè)井儀器的開(kāi)發(fā)和升級(jí)效率,同時(shí)也對(duì)其他測(cè)井儀器的井下數(shù)據(jù)管理方案提供了參考。后續(xù)的研究可以從FTL層關(guān)鍵技術(shù)設(shè)計(jì)方面進(jìn)一步提高系統(tǒng)的讀寫(xiě)性能和穩(wěn)定性。