基于Avalon總線的SD卡讀寫控制器的設計
5 系統(tǒng)硬件設計
為了驗證SD卡讀寫控制器,在DE2開發(fā)平臺上搭建了最基本的硬件系統(tǒng),主要包括:NiosⅡ處理器,PLL鎖相環(huán),片上RAM,JTAG UART和自定義的SD卡讀寫控制器。NiosⅡ作為系統(tǒng)主控制器,PLL用來產(chǎn)生SD卡讀/寫所需的時鐘信號,片上RAM用來存儲代碼和數(shù)據(jù),JTAG UART主要用來調(diào)試,打印數(shù)據(jù)到控制臺驗證寫入的數(shù)據(jù)和讀出的數(shù)據(jù)是否相同。
硬件系統(tǒng)的建立主要利用Altera公司QuartusⅡ開發(fā)工具以及其集成的SoPC Builder完成的,關鍵在于如何用SoPC Builder將SD卡讀寫控制器添加到元件列表中。在SoPC Builder提供的圖形化的界面下,添加控制器Verilog源程序后,設置控制器中各信號在Avalon-MM總線中的信號類型等,圖2即為添加好的SD卡讀寫控制器。本文引用地址:http://www.ex-cimer.com/article/191242.htm
圖2中,各引腳的描述如下:
base_clock:控制器輸入時鐘,該設計采用PLL產(chǎn)生的25MHz時鐘信號;
clk_to_SD:SD卡時鐘信號輸入;
cmd_SD:SD卡命令,響應輸入/輸出信號;
data_SD:SD卡數(shù)據(jù)信號。
根據(jù)SD控制器的寄存器映射,在Nios IDE中編寫C程序控制SD卡控制器進行讀/寫操作,下面代碼為寫SD卡的一段程序,讀SD卡的的過程與其類似。
讀/寫完一個扇區(qū)后,控制器會產(chǎn)生一個中斷,此時即可進行下一次讀/寫操作。由于SD卡讀/寫有比較復雜的時序要求,命令、響應眾多,在設計的初期,采用Modelsim做了各方面的功能仿真,功能仿真完成后采用QuartusⅡ自帶的SignalTapⅡ邏輯分析儀來測試
分析內(nèi)部邏輯的工作狀態(tài),SignalTapⅡ使用簡單方便,更重要的是可以實時觀測內(nèi)部信號變化,而且可以設置觸發(fā)條件,大大提高了開發(fā)的效率。圖3是用SignalTapⅡ邏輯分析儀捕捉到的波形。
圖3中,status_reg為狀態(tài)寄存器,00000900表明卡已處于就緒狀態(tài),control_reg為控制寄存器,00000001H表明已經(jīng)開始了一次對扇區(qū)0的寫傳輸,mread的上升沿即開始了Master端口的讀傳輸,這里的讀指的是將內(nèi)存中buf數(shù)組中的數(shù)據(jù)讀入控制器,再由控制器寫入SD卡中,waitrequest為等待信號,高電平時無法進行數(shù)據(jù)傳輸,waitrequest無效后可以很明顯地看到000000DFH由Master端口讀入控制器,再由讀寫控制邏輯寫入SD卡。
6 結語
該設計采用SoPC技術實現(xiàn)了SD卡讀寫控制器,通過NiosⅡ處理器控制實現(xiàn)了SD卡讀/寫。由于該控制器根據(jù)Avalon接口規(guī)范進行開發(fā),可以很方便以IP核的形式集成到其他SoPC系統(tǒng)中,簡單實現(xiàn)SD卡的讀/寫,大大降低了開發(fā)成本和難度。本文所設計的SD卡讀寫控制器還有一大優(yōu)點就是具有Master端口,可以自主完成數(shù)據(jù)的讀/寫,無需CPU的干預,另外采用了中斷,降低了響應延時,提高了讀/寫速率。該設計滿足了大部分數(shù)據(jù)存儲需求,適用于工業(yè)監(jiān)測控制,一般消費類電子產(chǎn)品等。
評論