李明磊,潘文亮
(中國科學院南海海洋研究所,廣東廣州510301)
基于SPI接口和FIFO緩沖器的大容量高速實時數據存儲方案
李明磊,潘文亮
(中國科學院南海海洋研究所,廣東廣州510301)
以海洋湍流觀測樣機中的數據存儲接口電路為例,介紹一種基于C8051單片機的SPI(串行外設接口)、FIFO(先入先出)緩沖器IDT72v01和閃存M25P64的大容量高速實時數據存儲方案。該方案具有簡易實用、運行穩定、低功耗、易擴展的特點,已成功應用于已開發的湍流監測儀器樣機。
大容量存儲;高速;SPI;FIFO
現代海洋儀器工作過程中,由于長時間以及高速數據采集的工作配置,對存儲器容量、存取速度以及穩定性都有了更高的要求。如果是以電池供電的自容式系統,還常常需要降低系統功耗,延長電池續航時間。隨著硬件技術的發展,出現了文件格式為FAT16或FAT32的微型移動硬盤,CF卡、SD卡、TF卡等大容量微型存儲設備,嵌入式單片機技術也為這些設備的應用提供了良好的硬件支持。但是這些設備要求的功耗相對比較大,適合于電池艙容量大或其他供電方式的儀器,并且電路、程序設計比較復雜,寫入速率低,僅適用采樣率比較低的海洋儀器。本文提出一種基于C8051單片機的SPI接口、FIFO緩沖器IDT72v01和大容量閃存M25P64的低功耗、大容量高速實時數據存儲方案。
系統結構圖如圖1所示,存儲部分硬件由FIFO芯片、大容量閃存M25P64和微處理器組成。FIFO緩存輸入端為A/D轉換模塊,它負責把A/D轉換后的數據寫入緩存。實際應用中,這部分可根據需要(轉換精度,速率等)變更,本文不做詳細介紹。在本方案中,考慮到Flash芯片的性能,充分利用M25P64的頁編程(一次寫入256 byte數據)特性,選用存儲空間為512*9 bit的FIFO芯片IDT72v01。數據轉換點按時間順序寫入FIFO,達到一定容量后以塊形式讀出。這有別于一般應用中,通常通過485/232總線把數據發送到MCU再轉存。MCU頻繁進入串口中斷,造成CPU使用效率低下。當采樣率調高的時候,存儲容易出錯。系統工作過程為:系統啟動后,首先對硬件初始化,然后啟動數據采集系統把數據存到IDT72v01,當數據占據IDT72V01一半空間的時候,IDT72v01發出信號給單片機,單片機把數據取出,通過SPI接口,存儲到閃存M25P64中。

圖1 系統結構圖
M25P64是意法ST公司生產的低功耗、用于嵌入式系統的大容量串行Flash存儲器。M25P64的存儲空間為64 Mbit,由32768個頁面組成,每個頁面為256字節。芯片支持頁編程(256 Bytes);支持扇區擦除(512 Kbit)和塊擦除(64 Mbit)。最高時鐘頻率50 MHz;可循環使用100 000次;保存數據年限超過20 a。功耗方面:2.7~3.6 V的工作電壓;15 mA典型編程/擦除電流;4 mA典型讀電流(20 mHz時鐘頻率);50 μA典型Standby電流。它具有超薄雙面封裝VDFPN8和貼片SO16兩種封裝。芯片引腳及說明見表1。工作方式上,芯片工作于3/4線串行總線方式,與同系列的芯片復用串行總線,可擴展更大容量的存儲空間,芯片的讀寫電路接口見圖2所示。
在本方案中,C8051F040片上集成SPI控制器,它的I/O口P0.2可復用為時鐘輸出連接到M25P64的時鐘輸入,P0.3復用為MISO(主控制器輸入)連接到M25P64的數據輸出,P0.4復用為MOSI(主控制器輸出)連接到M25P64的輸入端。然后使用其他I/O口控制M25P64的片選和通信狀態--為高阻態或正常工作狀態。筆者在實際設計中采用了一片C8051F040控制3片M25P64,總容量擴展到192 Mb。為簡化起見,圖3給出與兩片M25P64之間的接口電路圖。

表1 M25P64芯片引腳及說明

圖2 M25P64與SPI總線控制器的接口電路圖

圖3 C8051F040和M25P64接口電路圖
FIFO(First In First Out)簡單說就是指先進先出。作為一種新型大規模集成電路,FIFO芯片以其靈活、方便、高效的特性,逐漸在高速數據采集、高速數據處理、高速數據傳輸以及多機處理系統中得到越來越廣泛的應用。IDT72v01是一種高速、低功耗、雙端口存儲器,它內部存儲空間為512*9 bit。采用9 bit的數據格式,第9位為數據奇偶校驗位,在數據通信的時候可以起到抗干擾的作用。芯片容量為l K×9 b,輸入/輸出端口由單獨的時鐘和使能信號控制,具有“空”、“滿”、“半滿”和“幾乎空、幾乎滿”標志。IDT72v01的9位輸入/輸出端口由單獨的時鐘和使能信號控制。輸入端口由寫使能信號(W)控制,當寫使能W為低時,數據被連續寫入FIFO存儲器中。同樣,輸出端口由讀使能信號(R)控制。IDT72v01還有一個復位端(/RS),當/RS為低時,IDT72v01的各個標志位全部回到原始狀態。

圖4 C8051F040與IDT72v01硬件連接圖
在本方案,把FIFO的“半滿”(/HF)接到單片機輸入引腳,這樣單片機可實時查詢FIFO緩沖器狀態;把”R”和”RT”接到單片機輸出引腳,單片機通過設置輸出引腳電平時序實現緩沖器讀操作。
系統軟件設計分為兩部分,AD存儲部分和海量存儲部分。AD存儲部分主要為FIFO寫入端操作流程(見圖5(a)),在“滿”標志無效的情況下,A/D轉換完成后把數據存儲到FIFO緩存即可,相對比較簡單。海量存儲部分則比較復雜,系統上電后,C8051F040對它集成的SPI控制器(如表2所示)進行初始化,使它在電氣特性上與M25P64接口兼容—包括時鐘頻率、極性、工作方式等。對于M25P64的操作,實際應用中將一些常用的操作編寫為子程序,在需要時調用。根據圖3接法和表3命令集,編寫扇區擦除子程序,讀操作子程序和頁編程操作子程序,限于篇幅,略去。如圖5(b)所示,單片機實時查詢/HF狀態,當它為低有效時,把緩存FIFO數據讀出,以頁編程寫入M25P64。

表2 C8051F040 SPI控制寄存器

圖5 程序流程圖
該方案充分利用單片機的SPI接口,在極少占用單片機引腳的情況下,實現了大容量數據存儲器的擴展。利用FIFO緩沖器實現不同時鐘域傳輸的數據匹配,實現了高速傳輸,提高了系統性能。由于采用基于C8051單片機的SPI接口、FIFO緩沖器IDT72v01和大容量閃存M25P6的設計,本方案可以滿足海洋環境監測系統對于大容量高速實時數據存儲的要求,已成功應用于湍流觀測儀器樣機。經實驗室多次實驗,數據存儲完整準確。在容量要求方面,如果需要更大容量的存儲空間,在該系統基礎上略加改進,增加信號線,擴展更多的M25P64芯片則可使該系統適用于有更大存儲空間要求的系統。

表3 M25P32命令表
[1]張培仁.基于C語言C8051F系列微控制器原理與應用[M]北京:.清華大學出版社,2007.
[2]潘琢金.C8051F040/1/2/3/4/5/6/7混合信號ISP FLASH微控制器數據手冊.新華龍電子有限公司.
[3]ST Microelectronics.M25P64 Datasheet,2008.
[4]Integrated Device Technology.IDT72V01 Datasheet,2003.
Abstract:Taking the data storage in the ocean turbulence surveying prototype for example,a large-capacity high-speed real-time data storage scheme is introduced,which is based on the SPI interface embedded in C8051 MCU,the dual-port FIFO buffer IDT72v01 and the large-capacity flash memory M25P64.This data storage scheme has the characteristics of easy configuration,low power consumption and high reliability.It has been used for ocean turbulence surveying prototype successfully.
Key words:mass-storage;high-speed;serial peripheral interface;first-in first-out
Real-time and Large-capability Storage Scheme Based on SPI Interface and FIFO Cache
LI Ming-lei,PAN Wen-liang
(South China Sea Institute of Oceanology,CAS,Guangzhou Guangdong 510301,China)
P71,TP3
B
1003-2029(2010)02-0030-03
2009-12-16
國家高技術研究發展計劃(863計劃)“十一五”資助項目(2007AA09Z104)。
李明磊(1981-),男,廣西容縣人,博士研究生,主要從事海洋監測技術研究。