新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Nios II 軟核處理器的SD卡接口設計

        基于Nios II 軟核處理器的SD卡接口設計

        作者: 時間:2013-09-12 來源:網絡 收藏

        接著要對選中的Nios標準內核進行配置,這里要考慮的問題是如何如何分配片內存儲器和片外存儲器的使用。片內存儲器的資源是很寶貴的,所以要先確定系統運行所需要的片內ROM或RAM,在滿足性能的條件下,盡可能使用較少的片內存儲器。

        對于一個實際的系統,光有片內存儲器一般是不夠的,尤其是考慮到要進行嵌入式操作系統的移植,所以還要增加片外存儲器。Niso II通過Avalon總線和片外存儲器以及外部設備連接。外部存儲器件的類型包括SRAM、SDRAM、DDR2、Flash等,外部設備包括UART串行口等。本設計采用SDRAM.

        接著是添加PIO端口,定義輸入輸出端口,主要的目的是用于Nios II讀取數字量。Nios II所采用的時鐘和FPGA 的時鐘密切相關,一般是通過鎖相環PLL 把外部輸入的時鐘進行倍頻之后再送給Nios II來作為主頻使用,同時外部設備也使用時鐘信號。外部時鐘信號為25MHz,而經過倍頻后為50MHz.

        至此,主要的配置過程就結束了。但是還是需要配置如下部分:

        (1) 分配存儲器和外部設備的基地址和中斷請求優先級;

        (2) 設定處理器的啟動地址,本設計把片內存儲器設定為Nios II的啟動地址。

        (3) 在生成NiosⅡ系統時,可以選擇生成Verilog語言還是VHDL 語言,本設計采用VHDL語言進行設計;

        (4) 最后生成的qsf文件,相當于整個工程的文件,但是關于配置管腳使用的部分,需要用戶去生成。生成的方法可以在圖形界面下配置,也可以通過寫tcl文件的方法。寫tcl文件的方法一般來講,對于大型工程,還是比較方便的。

        (5) 編譯整個NiosⅡ系統,在Altera 提供的開發環境Quartus II 中進行編譯。頂層設計文件可以使VHDL 也可以是原理圖的形式。

        (6) 采用JATG口進行下載,把生成的的SOF文件下載到FPGA里。

        2系統軟件設計

        Altera公司為了用戶方便使用Nios II來快速研制產品,提供了功能強大、易于使用的Nios II集成開發環境,與一般的嵌入式系統開發設計比較類似。在生成的過程中已經自動生成了需要使用的頭文件(一般是C語言的頭文件),同時一般外圍設備的驅動程序也可以生成。對于嵌入式操作系統,可以使用用戶自己裁剪的ucLinux內核也可以使用Altera提供的操作系統內核。本設計使用Altera公司提供的Nios II 9.0版本的開發環境。

        2.1 初始化

        在對SD 卡進行讀/寫之前,必須知道卡的類型、卡的容量、卡的大小等信息。具體來說,初始化函數主要完成以下工作:

        (1) 微處理器(這里指Nios II)復位,激活內部控制電路進行初始化處理,使SD卡進入SPI 模式;

        (2) 發送命令查詢SD卡是否支持3.3V供電;

        (3) 調整SPI時鐘頻率;

        (4) 根據編譯選項使能或者禁止通信過程中的CRC校驗;

        (5) 設置用于讀/寫操作的塊數據長度;

        (6) 最后是初始化全局變量sds.

        SD卡初始化函數INTSU SD_Initialize(viod)就是用于完成以上任務的,它讀取SD卡內部CSD寄存器,然后對全局變量sds進行賦值。

        2.2 SD卡讀寫操作

        對SD卡的讀寫操作需要知道SD 卡的一些基本的屬性:插入卡座中SD卡的型號;SD卡中全部塊的數量;SD卡的最大數據塊的長度;一次可擦除的塊數量;卡的讀取、寫入、擦除操作的超時時間。

        SD卡讀/寫軟件包中定義了一個全局變量sds,軟件包的很多地方使用了這個全局變量。SD卡的寫操作包括寫單塊和寫多塊兩種方式。SD卡的初始化函數SD_Initialixe()已經調用SD_SetBlockLen()函數設定了讀/寫數據的長度為SD_BLOCKSIZE 字節,所以卡初始化以后,讀寫都必須以塊為單位。

        3 SD卡驅動設計

        Nios II軟件架構是建立在HAL(Hardware Abstraction Layer)基礎之上的。HAL為Nios II的軟件開發者提供了操作底層硬件的編程接口。設備驅動驅動程序的編制一般要使用HAL提供的API函數以及C標準庫等。HAL提供的功能以及它與底層設備驅動程序之間的關系如圖3所示,這種模塊化的設計架構可以加速應用程序的開發。使用這種分層的體系架構,HAL層把應用程序和底層硬件驅動程序之間隔離開來,使得應用程序的開發不依賴于底層HAL和硬件的變化,增加了應用程序的可移植性。設計驅動程序最重要的是理解具體SD卡的讀寫操作的過程,之后是如何和嵌入式操作系統連接起來。在編制好SD卡的驅動程序后,在應用程序中操作SD卡就簡單了。所以編制SD卡的驅動在本設計中是重要的一部分。

        基于HAL的系統層次結構

        圖3 基于HAL的系統層次結構

        結束語

        本文基于Nios II實現了對于SD卡的控制,不僅包括硬件設計還包括系統軟件設計。傳統的系統設計是基于硬核處理器的架構,系統的硬件設計受到了限制。SOPC的設計思想使得片上系統的設計更加靈活,硬件設計的限制因素基本不存在了。在一個FPGA的芯片上幾乎可以實現一個整個系統,對于系統的小型化的作用是顯著的。本文對基于NiosⅡ的嵌入式系統的設計進行了深入的研究,并在此基礎上,設計完成了以Altera公司的Cyclone III系列中的EP3C16 FPGA為核心芯片的SOPC開發平臺。另外本文在此平臺之上,移植了嵌入式操作系統,并在此環境下實現了SD卡的接口設計,因此包括了整個的硬件和軟件設計。在系統設計的過程中,分析了Nios II 的Avalon總線的系統架構、SD 卡的通信協議。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 娱乐| 巴里| 民勤县| 南昌市| 冷水江市| 迁西县| 林甸县| 宜丰县| 九江县| 女性| 会泽县| 平原县| 东乡| 竹溪县| 乐都县| 神农架林区| 杂多县| 武鸣县| 新巴尔虎右旗| 茌平县| 双柏县| 呼和浩特市| 洛扎县| 同江市| 瑞金市| 宜黄县| 剑阁县| 宾阳县| 南华县| 会宁县| 堆龙德庆县| 新绛县| 金平| 祥云县| 花垣县| 朝阳县| 大理市| 浏阳市| 晋州市| 舟曲县| 宝清县|