??? 摘 要: 以AT45DB041B為例,,將FPGA和大容量" title="大容量">大容量串行flash存儲芯片" title="存儲芯片">存儲芯片的優(yōu)點有效地結合起來,,實現(xiàn)了FPGA對串行存儲芯片的高效讀寫操作,,完成了對大量測量數(shù)據(jù)的存儲處理和與上位機" title="上位機">上位機的交換,,并在某電力局項目工頻場強環(huán)境監(jiān)測儀中成功應用,。
??? 關鍵詞: FPGA; 串行flash; 存儲交換" title="存儲交換">存儲交換; UART; VHDL
?
??? 現(xiàn)場可編程門陣列(FPGA)采用基于芯片的設計方法,,具有穩(wěn)定可靠,、抗干擾能力強,、可以反復編程、易于修改等特點,,極大地增強了設計的靈活性,,提高了設計的實現(xiàn)速度;大容量串行flash存儲芯片價格低,,管腳少,,結構簡單,使用SPI對數(shù)據(jù)進行訪問,,方便了硬件規(guī)劃,,增強了系統(tǒng)可靠性,減少了轉換噪聲,縮小了封裝尺寸,,也節(jié)省了大量的FPGA的I/O口,。兩者的有效結合可以使得大量數(shù)據(jù)的存儲交換更加高效穩(wěn)定可靠。
1 設計背景
??? 在筆者的多通道工頻場強環(huán)境監(jiān)測儀項目中,,需要在無人監(jiān)控的情況下,,長期定時采集高壓架空線和變電站周圍的電磁場強度及溫濕度數(shù)據(jù),并及時進行存儲處理,,隨時供上位機通過UART訪問分析,。這必然涉及到大量測量數(shù)據(jù)的存儲交換。本設計選用ALTRERA公司的Cyclone系列芯片EP1C3T144C8作為主控芯片,,實現(xiàn)對數(shù)據(jù)的采集和交換,,選用ATMEL公司的串行flash—AT45DB041B,用以對測量數(shù)據(jù)的存儲,。本文以實際項目為例,,闡述利用FPGA和大容量串行flash存儲芯片的優(yōu)點,有效解決大量測量數(shù)據(jù)存儲交換問題的方法,。
2 芯片介紹
2.1 EP1C3T144C8
??? EP1C3T144C8采用了基于全層銅SRAM工藝,,支持多種I/O標準,2 910個LEs,,1個內部PLL,,13個M4K RAM塊,59 904個RAM位,,104個可供使用的I/O。
2.2 AT45DB041B
2.2.1 基本原理
??? 該存儲器主要由主存儲器和兩個264B的緩存構成,,主存儲器容量約為4Mbit,,分為2 048頁,每頁也為264B,。
??? AT45DB041B具有多種封裝形式,,圖1是SOIC-8封裝下的管腳圖。其各管腳的定義與功能如下:
??? 1腳:SI,,串行數(shù)據(jù)輸入端,;
??? 2腳:SCK,串行時鐘信號,。數(shù)據(jù)在SCK上升沿輸入,,下降沿輸出;
??? 3腳:復位信號,,低電平有效,。由于芯片內部有上電復位電路,不用時此管腳可直接接高電平,;
??? 4腳:片選信號,,低電平有效,;
??? 5腳:寫保護信號,低電平有效,。若此腳為低,,則主存儲區(qū)前256頁不能被擦寫編程,如果不用此功能,,可直接接高電平,;
??? 6腳:VCC,電源輸入端,;
??? 7腳:GND,,電源地;
??? 8腳:SO,,串行數(shù)據(jù)輸出端,。
?
2.2.2 器件操作
??? AT45DB041B的操作命令分為讀命令、編程和擦寫命令以及附加命令,,其具體的指令和讀寫操作方式很多文章和資料已有介紹,,限于篇幅,本文只將要用到的命令作簡要的介紹,。
??? (1)讀主存儲區(qū)
??? 不經過緩沖區(qū)讀主存儲區(qū)任一頁,,緩沖區(qū)內容不會改變。指令格式后續(xù)的SCK信號將使數(shù)據(jù)依次從SO端輸出,。如果讀到了指定頁的最后字節(jié),,將自動跳回到頁首起始位置,循環(huán)讀取,。整個過程中,,/CS必須保持為低電平,/CS從低到高的跳變將中止讀操作,,并三態(tài)SO引腳,。
??? (2)連續(xù)讀主存儲區(qū)
??? 不經過緩沖區(qū)直接讀任意存儲單元的內容,緩沖區(qū)內容也不會改變,。指令格式后續(xù)的SCK時鐘信號將使數(shù)據(jù)依次從SO端輸出,。如果讀到了整個主存儲區(qū)的最后字節(jié),將自動跳回主存儲區(qū)起始位置,,循環(huán)讀取,,頁與頁之間及主存儲區(qū)首尾之間沒有延時。整個過程中,,/CS必須保持為低電平,,/CS從低到高的跳變將中止讀操作,并三態(tài)SO引腳。
??? (3)寫緩沖區(qū)
??? 數(shù)據(jù)能夠通過SI端被寫入任意一個緩沖區(qū),。當寫到緩沖區(qū)結尾后仍有數(shù)據(jù)寫入時,,數(shù)據(jù)將從緩沖區(qū)起始字節(jié)依次寫入。只要/CS保持為低,,在SCK時鐘信號配合下,,數(shù)據(jù)將一直循環(huán)寫入,/CS從低到高的跳變將中止寫操作,。
??? (4)緩沖區(qū)寫入主存儲頁(帶擦除)
??? 事先寫入緩沖區(qū)的數(shù)據(jù)可通過編程寫到主存儲頁中,。當指令寫完后,/CS由0變?yōu)?時,,芯片首先擦除待寫入頁,,然后再將指定緩沖區(qū)內的數(shù)據(jù)寫入主存儲頁。頁擦除和寫入操作由內置時鐘控制,,最長時間為tEP,。
2.2.3 時序
??? AT45DB041B的命令、地址,、附加位和數(shù)據(jù)都是通過SI,、SO引腳以位的形式輸入和輸出的,因此要采用FPGA產生讀寫時序時除正確理解其操作過程外,,另一個關鍵點在于正確理解位的發(fā)送和接收時序,,也就是數(shù)據(jù)如何按位移入或移出AT45DB041B。工作于SPI的inactive clock polarity high模式的時序如圖2所示,。
?
3 實際應用
3.1 硬件接線
??? 硬件電路如圖3所示,。EP1C3T144C8的I/O和AT45DB041B的SI、SO,、SCK,、/RST、/CS引腳相連,,/WP接高電平,實現(xiàn)對串行flash的讀寫操作,;再由TXD,、RXD通過MAX232和9芯串口" title="串口">串口與上位機實現(xiàn)UART通信,完成數(shù)據(jù)的交換工作,。
?
3.2 軟件設計
??? 一般的串行flash存儲芯片提供了許多操作命令,,可以根據(jù)不同的設計目的選擇不同的操作命令組合,實現(xiàn)對串行flash存儲芯片的不同操作,,滿足不同的設計要求,。
??? 在本設計中,要定時地采集高壓架空線和變電站周圍的電磁場強度及溫濕度數(shù)據(jù),每次12個字節(jié),,并進行及時的存儲處理,,隨時供上位機通過UART讀取。
??? 在Quartus II中用VHDL編寫FPGA與AT45DB041B的接口程序,,其程序框圖如圖4所示,。
?
??? 寫操作使用了寫緩沖區(qū)和緩沖區(qū)寫入主存儲頁(帶擦除)兩個命令。寫信號到時將規(guī)定寫入的數(shù)據(jù)寫入緩沖區(qū)后,,立即將緩沖區(qū)寫入主存儲頁,;寫完之后,再將當前的位置信息(主存儲區(qū)頁地址和頁內行地址)通過緩沖區(qū)寫到主存儲區(qū)的最后一頁,,供每次程序啟動時讀取來恢復存儲器的狀態(tài),,之后就進入idle狀態(tài)。
??? 讀操作使用了讀主存儲區(qū)和連續(xù)讀主存儲區(qū)命令,。讀存儲區(qū)是為了恢復每次寫入的位置信息,,以便在程序復位后繼續(xù)接著寫入數(shù)據(jù)或讀取數(shù)據(jù);讀信號到即發(fā)送連續(xù)讀主存儲區(qū)命令,,每讀完一個字節(jié)便通過串口發(fā)送到上位機,,接到串口發(fā)送完當前字節(jié)信號后,再繼續(xù)讀下一字節(jié),。當讀完寫操作時記錄的主存儲區(qū)當前頁或上位機給出發(fā)送出錯信號時,,結束讀操作。
??? 程序的實現(xiàn)采用了VHDL中的狀態(tài)機(state machine),,它是描述一系列狀態(tài)轉換的時序電路,,它能夠很好地完成本設計中各狀態(tài)的條件的判斷和轉換。在程序設計過程中要特別注意幾個問題:
??? (1)程序剛啟動時的延時:這是為了使芯片工作在inactive clock polarity high模式,,保證芯片的正常運行,;
??? (2)讀過程中的延時:由于對flash訪問的時鐘(AT45DB041B可達20MHz)和用于UART發(fā)送的波特率(本設計中為9 600b/s)速度不匹配,而如果不作延時處理,,直接給一個周期的UART發(fā)送使能,,發(fā)送模塊就可能在自身時鐘的邊沿捕捉不到發(fā)送使能信號,為了保證正常發(fā)送,,必須對發(fā)送使能信號進行延時,;
??? (3)寫過程中的延時:由于擦除主存儲區(qū)并將緩沖區(qū)寫入所需的最長時間為tEP,為了確保每次都將數(shù)據(jù)成功寫入,,必須延時一段時間tEP再轉入其他狀態(tài),。
??? VHDL實現(xiàn)的基于RS232標準的UART簡單穩(wěn)定可靠,有很多文獻資料可供參考,,這里不再贅述,。
??? 本文采用FPGA結合VHDL編程來模擬SPI接口時序的方法實現(xiàn)了對大容量串行存儲器的訪問,,在UART的配合下完成了對大量測量數(shù)據(jù)的存儲交換工作,并在筆者設計的儀表中成功地應用,,運行穩(wěn)定可靠高效,。這里雖然是以ATMEL公司的AT45DB041B為例,但使用相同的方法,,對一系列其他類型的串行存儲芯片如Megawin公司的flash存儲器MM36SBO10等,,也可以進行類似的操作,對以后解決此類問題具有一定的參考價值,。
參考文獻
[1]?http://www.altera.com Cyclone Device Hand book, Volume 1
[2]?http://www.atmel.com AT45DB041B-SC datasheet
[3]?王勝輝,,律方成,張正平,,等.串行FLASH存儲器AT45DB041與單片機的接口設計及應用.電測與儀表,,2007,44(1):65-68.
[4]?孫鵬. 大容量串行flash存儲器AT45DB041的原理與應用[J]. 電子制作,2007,,(1):42-44.
[5]?黃智偉. FPGA系統(tǒng)設計與實踐.北京: 電子工業(yè)出版社,2005.
[6]?李現(xiàn)勇. Visual C++串口通信技術與工程實踐(第二版).北京:人民郵電出版社,,2002.