摘 "要: 由于目前采用的串口和USB 2.0檢測(cè)壞塊、實(shí)現(xiàn)數(shù)據(jù)讀取的方法存在數(shù)據(jù)讀取慢以及數(shù)據(jù)穩(wěn)定性低的問(wèn)題,而在高速大容量存儲(chǔ)裝置設(shè)計(jì)中,存儲(chǔ)器通常采用NAND FLASH,故提出一種基于USB 3.0總線的NAND FLASH數(shù)據(jù)存儲(chǔ)設(shè)計(jì)。采用FPGA作為邏輯主控單元,選用USB 3.0芯片CYUSB3014作為FPGA與上位機(jī)的通信橋梁,并在FPGA軟件上設(shè)計(jì)ECC數(shù)據(jù)校驗(yàn)糾錯(cuò)以及NAND FLASH的壞塊管理。用戶可通過(guò)上位機(jī)實(shí)現(xiàn)數(shù)據(jù)讀取、擦除以及分析。實(shí)驗(yàn)結(jié)果表明,所設(shè)計(jì)系統(tǒng)可通過(guò)USB 3.0接口將NAND FLASH中存儲(chǔ)的數(shù)據(jù)傳輸?shù)缴衔粰C(jī),傳輸速度實(shí)際可達(dá)39 MB/s。
關(guān)鍵詞: 數(shù)據(jù)存儲(chǔ); NAND FLASH; FPGA; USB 3.0; 壞塊管理; 數(shù)據(jù)校驗(yàn); 高速數(shù)據(jù)處理; 上位機(jī)
中圖分類(lèi)號(hào): TN791?34; TP391 " " " " " " " " " 文獻(xiàn)標(biāo)識(shí)碼: A " " " " " " " " " " "文章編號(hào): 1004?373X(2024)18?0101?06
Design of NAND FLASH data storage based on USB 3.0
BAI Haoyu, YU Hongying, NIU Yankun
(School of Electrical and Control Engineering, North University of China, Taiyuan 030051, China)
Abstract: In allusion to the problems of slow data reading and low data stability in the current serial port and USB 2.0 methods for detecting bad blocks and implementing data reading, NAND FLASH is commonly used in the design of high?speed and high?capacity storage devices. A NAND FLASH data storage design based on the USB 3.0 bus is designed. FPGA is used as the logic control unit, the USB 3.0 chip CYUSB3014 is used as the communication bridge between FPGA and upper computer, and ECC data verification and error correction as well as bad block management for NAND FLASH are designed on FPGA software. Users can read, erase, and analyze data by means of the upper computer. The experimental results show that the designed system can transfer the data stored in NAND FLASH to the upper computer by means of the USB 3.0 interface, and the actual transmission speed can reach 39 MB/s.
Keywords: data storage; NAND FLASH; FPGA; USB 3.0; bad block management; data verification; high?speed data processing; upper computer
0 "引 "言
NAND FLASH數(shù)據(jù)存儲(chǔ)廣泛應(yīng)用于航空航天的高速數(shù)據(jù)采集存儲(chǔ)設(shè)備中[1]。在進(jìn)行數(shù)據(jù)分析時(shí),F(xiàn)PGA向計(jì)算機(jī)高速傳輸數(shù)據(jù),最常用的數(shù)據(jù)連接方式有串口、USB 2.0或千兆以太網(wǎng)等[2]。文獻(xiàn)[3]中采用千兆以太網(wǎng)的方式,其理論速度為125 MB/s,速度較慢,且開(kāi)發(fā)周期長(zhǎng)。文獻(xiàn)[4]中則建議采用USB 2.0總線方法,讀出8 MB的數(shù)據(jù)不足1 s。雖然可以使用上位機(jī)進(jìn)行實(shí)時(shí)的壞塊管理,但缺乏數(shù)據(jù)校驗(yàn),且傳輸速度較慢。
針對(duì)以上總線傳輸以及NAND FLASH控制等問(wèn)題,選用USB 3.0總線作為FPGA與上位機(jī)的通信接口,其理論通信速度為5 Gb/s。較為常用的USB 3.0方案為Cypress Semiconductor(賽普拉斯半導(dǎo)體)的CYUSB3014、TI(德州儀器)的TUSB1310、FDTI的FT600等[5]。其中,TUSB1310沒(méi)有USB 3.0通信協(xié)議控制器,需要加入外部控制,或直接由主控芯片控制,軟件驅(qū)動(dòng)程序以及開(kāi)發(fā)資源較少,開(kāi)發(fā)時(shí)間較長(zhǎng);FT600芯片相較于其他芯片成本較高,可自主編程性較低,不適合自主開(kāi)發(fā);CYUSB3014內(nèi)置一個(gè)ARM9內(nèi)核處理器,集成了USB 3.0通信協(xié)議控制器,可依據(jù)用戶自身需求設(shè)計(jì)不同的固件程序進(jìn)行燒寫(xiě)。芯片公司提供豐富的軟件開(kāi)發(fā)工具和套件,簡(jiǎn)化了開(kāi)發(fā)過(guò)程;并且針對(duì)NAND FLASH數(shù)據(jù)存儲(chǔ)的問(wèn)題,設(shè)計(jì)ECC數(shù)據(jù)校驗(yàn)糾錯(cuò)和NAND FLASH壞塊管理,保證在高速數(shù)據(jù)記錄中,數(shù)據(jù)能夠高速穩(wěn)定傳輸,為高速大容量數(shù)據(jù)采集和存儲(chǔ)提供技術(shù)保障。本文選用CYUSB3014芯片作為USB 3.0通信的主控芯片,選用ALTERA(阿爾特拉)公司的EP4CE10F17C8N作為主控芯片,其具有傳輸速度快、硬件設(shè)計(jì)簡(jiǎn)單、可自主開(kāi)發(fā)、USB 3.0適用場(chǎng)景多等優(yōu)點(diǎn)。針對(duì)NAND FLASH的固有數(shù)據(jù)存儲(chǔ)問(wèn)題,在FPGA軟件系統(tǒng)中設(shè)計(jì)數(shù)據(jù)校驗(yàn)和壞塊管理,保證實(shí)驗(yàn)數(shù)據(jù)存儲(chǔ)的準(zhǔn)確性。
1 "總體方案設(shè)計(jì)
基于USB 3.0總線NAND FLASH的控制總體設(shè)計(jì)方案由USB 3.0通信單元、FPGA主控單元和上位機(jī)單元組成,如圖1所示。選用CYUSB3014芯片實(shí)現(xiàn)FPGA主控單元與PC之間的通信。以FPGA為主控單元設(shè)計(jì)通用I/O口,并合理利用FPGA中的存儲(chǔ)單元,實(shí)現(xiàn)對(duì)于NAND FLASH的讀、寫(xiě)、擦、數(shù)據(jù)校驗(yàn)以及壞塊管理等工作。設(shè)計(jì)上位機(jī)通過(guò)USB 3.0通信單元與FPGA主控單元完成數(shù)據(jù)交互、命令傳輸以及數(shù)據(jù)分析等工作。選擇K9WBG08U1M型NAND FLASH作為數(shù)據(jù)存儲(chǔ)單元。
2 "USB 3.0硬件及固件程序設(shè)計(jì)
選擇賽普拉斯(CYPRESS)公司的FX3USB 3.0芯片CYUSB3014,相較于USB 2.0,解決了USB 2.0的帶寬限制和單獨(dú)開(kāi)發(fā)USB協(xié)議困難等難題[6]。賽普拉斯公司把這代USB 3.0芯片CYUSB3014稱為EZ?USB FX3。在使用此芯片時(shí)只需下載固件庫(kù)進(jìn)行開(kāi)發(fā),具有高靈活性。
USB 3.0芯片工作的目的是實(shí)現(xiàn)PC機(jī)和FPGA信息交流、數(shù)據(jù)傳輸以及命令傳輸。USB 3.0與FPGA連接的接口為GPIF Ⅱ接口。EZ?USB FX3的GPIF Ⅱ接口可完美實(shí)現(xiàn)USB 2.0的GPIF接口以及Slave FIFO接口的功能。GPIF Ⅱ支持32位并行數(shù)據(jù)總線,接口時(shí)鐘的傳輸頻率最大為100 MHz。
采用GPIF Ⅱ接口將EZ?USB FX3配置為SLAVE FIFO模式,CYUSB3014與FPGA的接口如圖2所示。選擇FPGA作為EZ?USB FX3的控制器,通過(guò)GPIF Ⅱ接口進(jìn)行數(shù)據(jù)讀取,實(shí)現(xiàn)FPGA與上位機(jī)之間的數(shù)據(jù)通信[7],具體接口信號(hào)如表1所示。EZ?USB FX3通過(guò)Micro?B接口與計(jì)算機(jī)連接,完成數(shù)據(jù)傳輸以及固件程序的燒寫(xiě)。24LC256為一個(gè)E2PROM為EZ?USB FX3的儲(chǔ)存固件程序。
通過(guò)Cypress官方提供的SDK軟件進(jìn)行具體的固件程序配置,首先配置兩個(gè)SLAVE FIFO,F(xiàn)LAGB為FIFO寫(xiě)滿標(biāo)志,為FPGA向計(jì)算機(jī)發(fā)送的數(shù)據(jù)緩沖區(qū),為線程0;FLAGC為FIFO讀空標(biāo)志,為計(jì)算機(jī)向FPGA發(fā)送命令或數(shù)據(jù)的緩沖區(qū),為線程1。FX3_IFCLK接口時(shí)鐘通過(guò)FPGA向GPIF Ⅱ接口提供。FX3_SLWR和FX3_SLRD根據(jù)FLAGB與FLAGC信號(hào)進(jìn)行驅(qū)動(dòng),數(shù)據(jù)通信總線[8?9]為32位。將固件程序配置好之后,燒寫(xiě)入EZ?USB FX3,完成USB 3.0固件設(shè)計(jì)。
3 "FPGA軟件設(shè)計(jì)
Altera公司的EP4CE10F17C8N使用Verilog語(yǔ)言在Quartus Ⅱ開(kāi)發(fā)環(huán)境下進(jìn)行軟件開(kāi)發(fā)。FPGA內(nèi)部邏輯結(jié)構(gòu)如圖3所示。FPGA內(nèi)部結(jié)構(gòu)主要包括USB 3.0通信模塊、NAND FLASH控制模塊、數(shù)據(jù)校驗(yàn)?zāi)K以及壞塊管理模塊等。
3.1 "USB 3.0通信
USB 3.0通信模塊主要功能有兩個(gè),一是接收來(lái)自NAND FLASH中讀出的數(shù)據(jù),通過(guò)SLAVE FIFO將該數(shù)據(jù)打包發(fā)送至EZ?USB FX3芯片,實(shí)現(xiàn)數(shù)據(jù)發(fā)送;二是把EZ?USB FX3芯片收到的上位機(jī)命令進(jìn)行進(jìn)一步解析,來(lái)控制NAND FLASH完成數(shù)據(jù)讀寫(xiě)。
整個(gè)USB通信模塊使用狀態(tài)機(jī)實(shí)現(xiàn),如圖4所示。上電時(shí)進(jìn)入復(fù)位狀態(tài)FX3_RESET,在FX3_RESET之后的一個(gè)時(shí)鐘進(jìn)入下一個(gè)狀態(tài)。
在FX3_IDLE狀態(tài),此時(shí)等待上位機(jī)發(fā)送命令,當(dāng)收到命令后,進(jìn)入下一個(gè)狀態(tài)FX3_WAIT狀態(tài),分析上位機(jī)傳來(lái)的數(shù)據(jù),獲得NAND FLASH讀取的目標(biāo)片、塊地址和頁(yè)地址,然后判斷FLAGB是否為1,若不為1,則進(jìn)入下一狀態(tài),F(xiàn)X3_WRITE從NAND FLASH的目標(biāo)片、目標(biāo)塊和頁(yè)中讀數(shù)據(jù)寫(xiě)入到SLAVE FIFO端口中;否則返回FX3_BUSY狀態(tài),等待SLAVE FIFO可寫(xiě)入數(shù)據(jù)時(shí),進(jìn)入FX3_WRITE狀態(tài)。當(dāng)數(shù)據(jù)寫(xiě)完成后進(jìn)入FX3_BUSY,然后返回FX3_IDLE等待下一個(gè)命令接收。綜上所述,這樣就完成了FPGA通過(guò)EZ?USB FX3實(shí)現(xiàn)與上位機(jī)的通信。
因FX3與FPGA數(shù)據(jù)總線為32位并行接口,且NAND FLASH為8位接口,在數(shù)據(jù)讀取時(shí),在FPGA將8位數(shù)據(jù)拼成32位數(shù)據(jù)后賦給FIFO,進(jìn)而寫(xiě)入EZ?USB FX3的SLAVE FIFO接口。
3.2 "ECC校驗(yàn)算法設(shè)計(jì)
漢明碼是ECC編碼中最簡(jiǎn)單且使用最廣泛的編碼方式。漢明碼編碼的實(shí)際應(yīng)用可理解為異或以及二分法。如在4 096個(gè)數(shù)據(jù)作為數(shù)據(jù)校驗(yàn)單元進(jìn)行數(shù)據(jù)校驗(yàn)時(shí),本文把4 096個(gè)數(shù)據(jù)劃分為8列4 096行,每個(gè)字節(jié)中的每1位為1列,每1字節(jié)數(shù)據(jù)代表1行;然后對(duì)行和列的每1位進(jìn)行異或,得到6個(gè)列校驗(yàn)值以及24個(gè)行校驗(yàn)值[10?11]。具體編碼流程如圖5所示。
圖5中,CP0~CP5為列校驗(yàn)結(jié)果。將4 096個(gè)數(shù)據(jù)按照輸入的位進(jìn)行異或,如CP0為Bit0、Bit2、Bit4和Bit6異或的結(jié)果,以此類(lèi)推可得到剩下的CP。具體計(jì)算公式如下:
[CP0=Bit0⊕Bit2⊕Bit4⊕Bit6CP1=Bit1⊕Bit3⊕Bit5⊕Bit7CP2=Bit0⊕Bit1⊕Bit4⊕Bit5CP3=Bit2⊕Bit3⊕Bit6⊕Bit7CP4=Bit0⊕Bit1⊕Bit2⊕Bit3CP5=Bit4⊕Bit5⊕Bit6⊕Bit7]
LP0~LP23為行校驗(yàn)結(jié)果,選擇以n(n=0,1,2,…,11)為最小單位進(jìn)行分組。奇數(shù)行和偶數(shù)行分別作為組別,對(duì)于每一組別的數(shù)據(jù)按位異或,得到LP0~LP23共24位的校驗(yàn)值。將LP0所對(duì)應(yīng)的偶數(shù)行組別的數(shù)據(jù)(Byte 0,Byte 2,Byte 4,…,Byte 4 092,Byte 4 094)按位異或得出每一個(gè)字節(jié)的異或結(jié)果,進(jìn)而把這2 048個(gè)異或結(jié)果進(jìn)行異或得出LP0。將LP2所對(duì)應(yīng)的偶數(shù)行組別的數(shù)據(jù)(Byte 0,Byte 2,Byte 4,…,Byte 4 092,Byte 4 094)按位異或得出每一個(gè)字節(jié)的異或結(jié)果,進(jìn)而把這2 048個(gè)異或結(jié)果進(jìn)行異或得出LP2。由上文可推導(dǎo)4 096個(gè)8位數(shù)據(jù)的校驗(yàn)碼為30位的校驗(yàn)值(6位列校驗(yàn)值,24位行校驗(yàn)值),按照表2將這30位校驗(yàn)值拼接成4個(gè)字節(jié)的校驗(yàn)數(shù)據(jù)。
3.2.1 "數(shù)據(jù)驗(yàn)證
首先將FLASH存儲(chǔ)的4 096個(gè)字節(jié)的數(shù)據(jù)讀出,將讀出的數(shù)據(jù)進(jìn)行一次新的漢明碼編碼,得到新的30位(CP0~CP5、LP0~LP23)校驗(yàn)碼。將新得到的數(shù)據(jù)校驗(yàn)碼與寫(xiě)入數(shù)據(jù)時(shí)的數(shù)據(jù)校驗(yàn)碼按位異或,得到30位數(shù)據(jù)校驗(yàn)結(jié)果N。若N的30位數(shù)據(jù)全為0時(shí),說(shuō)明數(shù)據(jù)正確;N的30位數(shù)據(jù)每?jī)晌幌喈惢蛟賹惢虻慕Y(jié)果相與,若結(jié)果為1時(shí)說(shuō)明有一位數(shù)據(jù)錯(cuò)誤;若N的數(shù)據(jù)不為以上兩種情況,說(shuō)明數(shù)據(jù)有2位或2位以上發(fā)生錯(cuò)誤。
3.2.2 "錯(cuò)誤糾正
如上文發(fā)現(xiàn)1位數(shù)據(jù)錯(cuò)誤時(shí),選擇漢明碼解碼的形式對(duì)錯(cuò)誤的單位數(shù)據(jù)進(jìn)行地址尋址。將數(shù)據(jù)存入和讀取之后的校驗(yàn)碼排序,得到兩組數(shù)據(jù),進(jìn)而對(duì)于兩組數(shù)據(jù)進(jìn)行按位異或,得到15位數(shù)據(jù)C。
錯(cuò)誤的位置在總共4 096個(gè)字節(jié)中的第C[14:3]字節(jié),并且錯(cuò)誤數(shù)據(jù)的位是該字節(jié)數(shù)據(jù)的第C[2:0]位,將該位的數(shù)據(jù)取反,完成錯(cuò)誤糾正。
3.3 "NAND FLASH控制
NAND FALSH使用前,需識(shí)別初始化無(wú)效塊并建立壞塊表。在之后存儲(chǔ)數(shù)據(jù)時(shí),如果出現(xiàn)了使用壞塊應(yīng)及時(shí)更新壞塊表以保證數(shù)據(jù)存儲(chǔ)的可靠性。出現(xiàn)使用壞塊有三種情況。
1) 頁(yè)編程結(jié)束后,讀取編程狀態(tài),如果編程失敗標(biāo)記為使用壞塊。
2) 塊擦除結(jié)束后,讀取擦除狀態(tài),如果擦除失敗標(biāo)記為使用壞塊。
3) 頁(yè)讀取結(jié)束后,使用ECC校驗(yàn)發(fā)現(xiàn)讀取過(guò)程中出現(xiàn)的位反轉(zhuǎn)錯(cuò)誤,若發(fā)生位反轉(zhuǎn)錯(cuò)誤,不標(biāo)記為壞塊。
標(biāo)記為壞塊的塊不會(huì)再進(jìn)行頁(yè)編程、塊擦除和頁(yè)讀取操作[12?13]。在以上思路的基礎(chǔ)上,本文設(shè)計(jì)了一種基于ECC校驗(yàn)算法的NAND FLASH可靠數(shù)據(jù)管理方法,流程如下[14]。
3.3.1 "識(shí)別初始化無(wú)效塊
根據(jù)使用的芯片官方手冊(cè),芯片出廠時(shí)會(huì)在出廠之前除了帶有初始無(wú)效塊信息的位置沒(méi)有被擦除,其余所有位置都會(huì)被擦除。初始無(wú)效塊的狀態(tài)記錄在備用空間的第1 B。芯片廠家保證在初始無(wú)效塊的第1頁(yè)和第2頁(yè)的第2 048 B地址上的數(shù)據(jù)不是FFh。由于初始無(wú)效塊也是能被擦除的,而且一旦擦除就不可恢復(fù),因此系統(tǒng)必須在第一次使用之前通過(guò)隨機(jī)讀指令識(shí)別出初始無(wú)效塊。
3.3.2 "建立壞塊表
識(shí)別初始無(wú)效塊后,根據(jù)初始無(wú)效塊建立一張壞塊表。該壞塊表一共有2 KB數(shù)據(jù),其中每一個(gè)bit代表一個(gè)塊的好壞(0表示好塊,1表示壞塊),前1 KB數(shù)據(jù)代表芯片第一片的 8 192個(gè)塊,后1 KB數(shù)據(jù)代表芯片第二片的8 192個(gè)塊。將壞塊表建立完成之后,由于芯片廠家保證第1個(gè)塊,也就是塊地址為00h的塊一定是有效塊,因此將壞塊表經(jīng)過(guò)ECC編碼后存入第1片第1塊的第1頁(yè)中。
3.3.3 "擦除塊
由于NAND FLASH的特性,在每個(gè)塊寫(xiě)入數(shù)據(jù)之前,都要確保該塊已經(jīng)被擦除成功。使用的NAND FLASH芯片有一個(gè)狀態(tài)寄存器,可以通過(guò)讀取這個(gè)狀態(tài)寄存器來(lái)判斷是否已完成編程和擦除操作以及這兩種操作已經(jīng)成功完成。
擦除塊之前要先從NAND FLASH中讀出存儲(chǔ)在第1片第1塊的第1頁(yè)中的壞塊表并保存在FPGA的RAM中。擦除時(shí)根據(jù)壞塊表只對(duì)好塊進(jìn)行擦除,在塊擦除操作完成后,讀取狀態(tài)寄存器,如果寄存器顯示擦除失敗,則將該塊在壞塊表中的對(duì)應(yīng)位置寫(xiě)為1。全部塊擦除完成后將更新的壞塊表重新寫(xiě)入到NAND FLASH中。
3.3.4 "頁(yè)編程
頁(yè)編程是往NAND FLASH中寫(xiě)入數(shù)據(jù)。與擦除塊一樣,在頁(yè)編程之前要將壞塊表讀到FPGA的RAM中。頁(yè)編程時(shí)要跳過(guò)壞塊并且要對(duì)每頁(yè)數(shù)據(jù)進(jìn)行ECC編碼,將存儲(chǔ)數(shù)據(jù)和校驗(yàn)數(shù)據(jù)分別放在NAND FLASH的數(shù)據(jù)存儲(chǔ)區(qū)和數(shù)據(jù)備用區(qū)中。頁(yè)編程的具體操作以頁(yè)為基本單位,當(dāng)命令輸入完成判斷芯片是否完成頁(yè)編程,當(dāng)該頁(yè)頁(yè)編程完成后讀取狀態(tài)寄存器,如果頁(yè)編程失敗,將正在執(zhí)行頁(yè)編程的塊更新到壞塊表中,并且將該塊數(shù)據(jù)復(fù)制到下一個(gè)好塊中。同樣在頁(yè)編程完成后將更新的壞塊表重新寫(xiě)入到NAND FLASH中。
3.3.5 "讀數(shù)據(jù)
在讀數(shù)據(jù)之前將壞塊表讀到FPGA的RAM中,讀出數(shù)據(jù)后在FPGA中進(jìn)行漢明碼譯碼和糾錯(cuò),最后發(fā)送給上位機(jī)。如果漢明碼譯碼過(guò)程中發(fā)現(xiàn)位反轉(zhuǎn),則將該頁(yè)所在塊標(biāo)定為壞塊,更新到壞塊表中。在讀數(shù)據(jù)完成后將更新的壞塊表重新寫(xiě)入到NAND FLASH中[15]。
4 "FPGA驗(yàn)證
4.1 "ECC校驗(yàn)算法驗(yàn)證
ECC編碼模塊每4 096 B數(shù)據(jù)生成4 B校驗(yàn)碼,編碼模塊設(shè)計(jì)為并行接口,實(shí)現(xiàn)了對(duì)NAND FLASH整頁(yè)數(shù)據(jù)進(jìn)行編碼。漢明碼編碼結(jié)果仿真如圖6所示。圖中,data_in為寫(xiě)入數(shù)據(jù);data_out為編碼得到的校驗(yàn)碼;“i”表示第幾個(gè)周期,如第0個(gè)數(shù)據(jù)為0x80,第1個(gè)數(shù)據(jù)為0x2A。經(jīng)過(guò)4 096個(gè)周期,漢明碼編碼完成,漢明碼編碼為256A569A。
將剛才編碼中的第4 095個(gè)數(shù)據(jù)0xD1更改為0xD0。如圖7所示,譯碼模塊檢測(cè)出數(shù)據(jù)的第data_ram_addr_n個(gè)字節(jié)出現(xiàn)錯(cuò)誤,對(duì)應(yīng)為這個(gè)字節(jié)數(shù)據(jù)的第data_ram_data_n位出現(xiàn)位翻轉(zhuǎn)。由仿真結(jié)果看出,該ECC校驗(yàn)算法成功實(shí)現(xiàn)了對(duì)4 096個(gè)字節(jié)的校驗(yàn)和糾錯(cuò)。
4.2 "數(shù)據(jù)讀取速度實(shí)測(cè)結(jié)果
經(jīng)過(guò)多次重復(fù)的數(shù)據(jù)讀取速度測(cè)試,接口速度基本穩(wěn)定在39 MB/s。速度測(cè)試結(jié)果如圖8所示。
4.3 "數(shù)據(jù)讀取實(shí)測(cè)結(jié)果
利用數(shù)字信號(hào)發(fā)生器產(chǎn)生一路周期為10 Hz、峰峰值為488 mV的正弦信號(hào),如圖9所示。通過(guò)A/D轉(zhuǎn)換模塊采集該信號(hào)并存儲(chǔ)在NAND FLASH中。通過(guò)連接上位機(jī)讀出數(shù)據(jù)并將數(shù)據(jù)顯示成波形,如圖10所示。實(shí)驗(yàn)結(jié)果證明,該系統(tǒng)可以對(duì)模擬信號(hào)實(shí)現(xiàn)精確顯示,并且存儲(chǔ)性能完好。
4.4 "測(cè)試結(jié)果分析
根據(jù)第4.1~4.3節(jié)的各種測(cè)試結(jié)果可得,在NAND FLASH數(shù)據(jù)傳輸?shù)接?jì)算機(jī)的過(guò)程中,數(shù)據(jù)傳輸穩(wěn)定有效,沒(méi)有數(shù)據(jù)的丟失或錯(cuò)誤。相較于USB 2.0和串口的數(shù)據(jù)傳輸方式,NAND FLASH數(shù)據(jù)存儲(chǔ)的速度有較大提升,且對(duì)于NAND FLASH的一些存儲(chǔ)可靠性問(wèn)題,本文設(shè)計(jì)了數(shù)據(jù)校驗(yàn)和壞塊管理模塊。
5 "結(jié) "論
本文設(shè)計(jì)一個(gè)基于USB 3.0的NAND FLASH數(shù)據(jù)存儲(chǔ)系統(tǒng),選用CYUSB3014 USB 3.0芯片作為上位機(jī)與FPGA的通信模塊,提升了數(shù)據(jù)與命令傳輸速度;并且設(shè)計(jì)了NAND FLASH讀寫(xiě)、數(shù)據(jù)校驗(yàn)和壞塊管理來(lái)保證數(shù)據(jù)存儲(chǔ)的準(zhǔn)確性。經(jīng)過(guò)FPGA實(shí)際驗(yàn)證,數(shù)據(jù)傳輸速度達(dá)到39 MB/s,且根據(jù)上位機(jī)的數(shù)據(jù)分析,通過(guò)原數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)的比較,后者具有較高的穩(wěn)定性。綜上,所設(shè)計(jì)的NAND FLASH數(shù)據(jù)存儲(chǔ)系統(tǒng)有效解決了實(shí)驗(yàn)數(shù)據(jù)傳輸速度較慢的問(wèn)題。
參考文獻(xiàn)
[1] 喬立巖,李元亨,王戈,等.一種NAND FLASH壞塊管理優(yōu)化方法的實(shí)現(xiàn)[J].電子測(cè)量技術(shù),2015,38(7):19?21.
[2] 馬賢.基于FPGA的高速數(shù)據(jù)傳輸接口設(shè)計(jì)[D].桂林:桂林電子科技大學(xué),2023.
[3] 喬衛(wèi)東,李躍,郭梁.航空航天相機(jī)成像性能測(cè)試系統(tǒng)研究[J].電子測(cè)量與儀器學(xué)報(bào),2020,34(9):9?16.
[4] 申曉敏,錢(qián)禮華,杜劍英,等.基于USB 2.0總線的NAND FLASH檢測(cè)及控制方法[J].電子技術(shù)應(yīng)用,2023,49(6):44?48.
[5] 李錦明,鄭志旺.基于LVDS和USB 3.0的高速數(shù)據(jù)傳輸接口的設(shè)計(jì)[J].電子測(cè)量技術(shù),2021,44(7):1?6.
[6] 鄭芳芳,牛廣越,易亮,等.基于USB 3.0的多通道葉尖間隙數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].傳感技術(shù)學(xué)報(bào),2023,36(6):874?880.
[7] 陳松.基于USB 3.0的高速數(shù)據(jù)傳輸系統(tǒng)的研究與設(shè)計(jì)[D].成都:電子科技大學(xué),2014.
[8] 劉林仙,喬楠楠,童強(qiáng),等.基于FPGA的USB 3.0通信接口設(shè)計(jì)[J].測(cè)試技術(shù)學(xué)報(bào),2021,35(3):261?265.
[9] 華嘉駿.基于AXI總線的USB 3.0控制器的設(shè)計(jì)與驗(yàn)證[D].西安:西安電子科技大學(xué),2021.
[10] 趙寬.基于同步FLASH的高速數(shù)據(jù)記錄儀的設(shè)計(jì)與實(shí)現(xiàn)[D].太原:中北大學(xué),2021.
[11] 朱金瑞,王代華,蘇尚恩,等.存儲(chǔ)式彈載數(shù)據(jù)記錄儀存儲(chǔ)可靠性技術(shù)研究[J].兵器裝備工程學(xué)報(bào),2019,40(1):159?162.
[12] 文豐,王雨婷,薛志超,等.某記錄器存儲(chǔ)模塊關(guān)鍵技術(shù)的研究[J].電子測(cè)量技術(shù),2020,43(22):137?141.
[13] 寧飛.大容量存儲(chǔ)中NAND FLASH壞塊的管理方法[J].電子測(cè)試,2010(12):64?68.
[14] LI X, NIU Y, YU J, et al. A bad block management design based on space?borne nand FLASH parallel storage system [C]// 2022 14th International Conference on Communication Software and Networks (ICCSN). Chongqing: IEEE, 2022: 114?118.
[15] 張朗,張建華,王鳴濤,等.適用于FPGA與NAND FLASH陣列星載固態(tài)存儲(chǔ)器的壞塊管理方法[J].空間電子技術(shù),2023,20(4):98?103.