摘要:海洋儀器在后期數據分析處理時數據存儲電路是不可或缺的。針對海洋儀器對數據存儲大容量非易失的要求,,結合實際工作經驗,,給出幾種擴展海量存儲器的方案和實際電路。這些方案是以C8051F340為主控制器,,充分利用C8051F340片上集成的I2C,,SPI和I/O接口資源擴展大容量存儲器,相比于傳統的存儲電路,,省去了譯碼和鎖存電路,,同時簡化了軟件編程。經實際應用,,這些存儲電路工作穩(wěn)定,、功耗低,適用于中低速,,需存儲大量數據的儀器儀表,。
關鍵詞:C8051F340;I2C;SPI,;I/O,;非易失;大容量
在海洋儀器工作過程中,,觀測的周期比較長,,累積的數據量往往比較大,要求使用大容量存儲器,。而且由于海洋環(huán)境惡劣,,很多時候電池耗盡,儀器尚未回收,,為了保證數據安全,,必須采用掉電非易失存儲器。EEPROM和Flash閃存,,既有ROM的特點非易失性,,又有比較高的存取速度,而且易于擦除和重寫,,功耗很小,,集成度高,是比較好的選擇,。但早期的存儲電路通常比較復雜,,因為其存儲器容量小,接口單一,,為了擴大容量需要外加擴展地址線的譯碼和鎖存電路。隨著電子技術的發(fā)展,,各種大容量存儲器層出不窮,。這些存儲器在內部結構、實現技術,、物理外觀和工作電壓等方面有較大差異,,而在硬件接口上常見為I2C接口、 SPI接口和并行接口,。
以Microehip公司生產的C8051F340為主控器,,提出基于多種硬件接口的大容量存儲設計方案,可方便移植到與51兼容的其他單片機系統,。
1 C8051F340特性及硬件接口
C8051F340是Sihcon公司生產的混合信號片上系統型單片機,。它的內核具有標準8052所有外設,包括2個全雙工UART,、1個增強型SPI端口,,1個SMBUS端口,40個I/O引腳,4 352字節(jié)的內部RAM,,128字節(jié)特殊功能寄存器等,。C8051F340片上豐富的硬件資源,使其方便擴展不同的接口存儲器,。圖1是基于C8051F340的硬件接口(I2C,,SPI,GPIO)實現的3種大容量存儲器擴展方案的示意圖,。
2 I2C總線擴展EEPROM存儲器
2.1 I2C總線
在并行總線系統,,CPU要完成與外部RAM或ROM的交換數據,通常需要有3組總線(地址,、數據,、控制總線),采用如此多的并行總線可使控制速度快,,與存儲器交換數據方法簡單,。但是,在繪制電路板時,,這些總線將耗費很大空間,。而I2C存儲器克服了這個缺點,它僅需要數據線SDA和時鐘線SDL 2條總線即可,。數據交換速率要求在ms級的場合,,I2C存儲器可以取代并行存儲器。
2.2 AT24C1024及與C8051F340的軟硬件設計
AT24C1024是l Mb支持I2C數據傳送協議的串行CMOS EEPROM,,其內部結構為512頁,,每頁為256字節(jié),可用電擦除,;它具有2種寫入方式,,一種是字節(jié)寫入方式;另一種是頁寫入方式,。允許在一個寫周期內同時對1個字節(jié)到l頁的若干字節(jié)的編程寫入,,l頁的大小取決于片內頁寄存器的大小。AT24C1024具有256字節(jié)數據的頁面寫能力,。
C8051F340片上集成SMBus端口,。SMBus完全符合系統管理總線規(guī)范1.1版,并與I2C串行總線兼容,。連接在I2C總線上的器件,,SCL和 SDA應該為漏極開路或集電極開路輸出,當總線空閑時,,這2條線都被拉到高電平,。所以,,在配置C8051F340端口時,把SDA,、SCL配置為漏極開路輸出,。為了使開漏極電路輸出“l”時SDA和SCL應是高電平而不是高阻態(tài),這就需要加上拉電阻,。圖2為AT24C1024與C805lF340的硬件連接圖,。對AT24C1024的操作編程,與一般I2C類似,,遵循I2C通信協議,。以寫操作為例,其流程圖如圖3所示,。讀操作與此類似,。
2.3 應用舉例
此電路用于小型的海洋溫度計,在采樣率為1/6 Hz,、采樣精度16位的情況下,,可連續(xù)存儲109 h左右。小型溫度計以體積小,,重量輕等特點使其方便在海上進行多點多深度布設,,用于測試水下溫度場的一天連續(xù)變化。但是AT24C1024存取速率較低,,僅適合于低速存取的場合,。在某些系統中還用于存儲系統配置參數和保存系統工作日志。
3 SHI接口擴展M25P64
3.1 SPI總線
串行外圍接口SPI總線可分為3線和4線工作方式,,支持在同一總線上掛接多個主器件和從器件,。SPI收發(fā)獨立,可同步進行,,通信速率比較高,。
3.2 M25P64及與C8051F340的軟硬件設計
M25P64是低功耗、大容量串行Flash存儲器其存儲空間為64 MB,,由32 768個頁面組成,每個頁面為256字節(jié),。支持頁編程(256字節(jié)),,扇區(qū)擦除(512 KB)和塊擦除(64MB)。最高時鐘頻率50 MHz,;可循環(huán)使用100 000次,;保存數據年限超過20年;該存儲器工作于3/4線串行總線方式,,可擴展更大容量的存儲空間,。
對M25P32的讀寫可以直接將M25P64與C8051F340的GPIO口連接,,采用GPIO口模擬SPI接口時序的方法。使用C8051F340的片上SPI控制接口,,將引腳C與單片機輸出時鐘對接,,數據輸出Q與MISO對接,數據輸入D與MOSI對接,,片選信號與NSS對接,,如圖4所示。
C805lF340上電后首先對硬件接口進行初始化,,把端口設置為SPI特殊功能,。C8051F340通過讀寫SPI數據寄存器(SPIDATO)實現在 SPI通信線上的數據收發(fā)。因此,,對M25P64的讀寫和擦除可歸結為,,按照M25P64數據資料上的命令表,往SPIDAT0里寫入命令和數據,,程序流程的控制
通過判斷從SPIDAT0讀出的狀態(tài)寄存器位,。
3.3 應用實例
此存儲電路中M25P64占用的I/O口線較少。M25P64相比于AT24C1024附加了片選信號,,并且數據輸入和輸出線分開,,使存儲電路的抗干擾性有所提高,降低了軟件設計難度,。M25P64在硬件實現上基于移位寄存器,,所以通信速率較高,達到微秒級,。此存儲電路已成功應用于開發(fā)的湍流觀測儀器樣機,。
4 GPIO口擴展K9WAG08UOA
C8051F340上未被交叉開關分配的端口引腳和未被模擬外設使用的端口引腳都可以作為通用I/O。在設計C8051F340,,若不把選定的引腳配置為特殊功能,,它就默認為通用I/O,利用這些引腳來擴展K9WAG08UOA,。
4.1 K9WAG08UOA的特性
K9WAG08UOA是NAND-Flash架構的Flash,,單電源2.70~3.60 V供電,內部存儲空間為(1 G+32 M)x8 B,,數據寄存器為(2 K+64)x8 B,,可進行任意字節(jié)單元的讀操作(最長25μs),(128 K+4 K)B的塊擦除和(2 K+64)B的頁編程(200μs典型時間),。容量上可堪比一般的SD卡和U盤,,讀寫速度也很快。
4.2 K9WAG08UOA與C8051F340的硬件連接
C8051F340與K9WAG08UOA的連接方法如圖5所示,。K9WAG08UOA的命令,、數據,、地址均通過8根I/O線傳輸,31位地址分5次寫入地址寄存器,,其內部譯碼確定塊號,、塊內頁號、頁內字節(jié)號后尋址相應的單元,,比相同容量的并行存儲器節(jié)省了23根地址線,。地址線的減少簡化了電路設計,同時也提高了編程的復雜程度,。指令,、地址從I/O寫入時,把拉低,,配合CLE和ALE信號線實現I/O口上指令和地址復用,。
4.3 軟件編程
K9WAG08UOA的編程比通常的串、并行存儲器復雜,。實際應用中將頁編程子程序,、塊擦除子程序、讀操作字程序編寫成子程序,,在需要時進行調用,。由圖5 看出,C8051F340對K9WAG08UOA的讀寫操作均通過通用I/O進行,。C805lF340對I/O端口的操作通過訪問對應的端口數據寄存器,。向端口寫入時,數據被鎖存到端口數據寄存器中,,以保持引腳上的輸出數據值不變,;讀端口數據寄存器將返回端口輸入引腳的邏輯狀態(tài)。具體舉例來說,,比如P0=0x80,,表示Ox80被鎖存到端口數據寄存器中,把CE引腳拉低,,引腳產生一個上升沿,,數據就被寫入K9WAG 08UOA中的數據/命令寄存器。Ox8O為命令還是數據取決于CLE和ALE的狀態(tài),,CLE為高,,ALE為低,表示Ox80為命令字段,;CLE為低,ALE為高,,表示Ox80為數據,。下面對K9WAG08UOA的頁編程,、頁讀、塊擦除做詳細的說明,。
4.3.1 頁編程
K9WAG08UOA的頁編程是以頁為單位的,,它允許在一個頁編程周期里寫入1~2 112字節(jié)的數據。數據被加載到數據寄存器,,然后調用內部寫入過程寫入正確的單元,。在寫入之前必須擦除,否則出錯,。頁編程的步驟為:1)寫入串行輸入指令0x80,;2)分5次寫入編程首地址;3)寫人數據,,一次最多2 112字節(jié),;4)最后寫入頁編程指令0x1O。啟動內部編程操作,。為了反饋寫入操作是否成功,,K9WAG08UOA的內部狀態(tài)寄存器記錄了寫入狀態(tài),通過查詢寄存器狀態(tài)位O,,判斷寫入是否成功,。
4.3.2 頁讀操作
K9WAG08UOA讀頁面的操作過程為寫入0x00到命令寄存器,然后輸入5個字節(jié)的地址,,再寫入命令Ox30啟動頁讀操作,。選中頁面的2 112個字節(jié)的數據不是立即輸出到I/0口,而先被復制到K9WAG08UOA的數據寄存器,。通過檢測R/B引腳狀態(tài)來判斷復制操作是否完成,。一旦R/B 為高電平后,表示復制完成,。微處理器器控制RE不斷的高低變化,,數據寄存器中的數據將按照在芯片中的地址排列依次鎖存輸出到I/O口,此時讀取I/O口電平即可,。
4.3.3 塊擦除
K9WACO8UOA的擦除操作以塊為單位進行,。首先寫入擦除指令Ox60,然后分3次寫入行地址,。載入行地址后執(zhí)行擦除確認指令0xd0來初始化內部擦除操作,。通過狀態(tài)引腳R/B了解擦除的進度,R/B為高電平表示內部擦除完成,。通過檢測狀態(tài)位(I/O0)來檢查擦除操作是否發(fā)生錯誤,。
4.4 應用舉例
本設計的單片機P1口與K9WAGO8UOA直接連接,其他控制引腳與PO口的引腳連接,。為防止存儲器誤操作,,在單片機復位后要進行初始化設置,。 K9WAGO8UOA最大的優(yōu)點是容量大,低功耗,。海洋潛標在水下工作的時間通常為3個月以上,,累計的數據量通常上百兆,K9WAG08UOA能夠勝
任這樣的容量要求,。在實驗室水池進行多次長時間測試,,K9WAG08UOA記錄的數據可靠。
5 結束語
利用C805lF340豐富的接口資源,,可以方便地擴展大容量的存儲器,。本文介紹的3種存儲器擴展方案采用不同的硬件連接方式,但都具有非易失,、低功耗的特點,,又各有特點,可以根據系統開發(fā)的具體需求,,進行選擇使用,。通過實踐,總結以下經驗:1)提高系統存取效率,,加入FIFO緩存,。數據按時間順序寫入 FIFO,大到一定容量后再由處理器以塊形式讀出,。這樣可以避免MCU頻繁進入中斷,,提高處理器的工作效率。2)在控制印刷電路板面積及布線復雜度上,,使用I2C接口最為簡潔,,SPI接口次之。3)讀寫速度上,,并口Flash最快,,適應于微秒級存取,;SPI接口次之,,提高時鐘頻率也可達到微秒級;I2C接口最慢,,適合毫秒級的訪問,。4)容量上,NAND架構閃存(K9WAG08UOA)的存儲單元采用串行結構,,一頁包含若干字節(jié),,若干頁組成儲存塊,這種結構最大的優(yōu)點是使得容量可以做得很大。因此,,在容量和存儲密度上,,NAND閃存比其他結構的存儲器大。僅從容量考慮時,,優(yōu)先選擇NAND架構的閃存。