歡迎您光臨本站 登入註冊首頁

Nios II與CF卡的介面設計

admin @ 2014-03-26 , reply:0

概述

 1CF卡的特點及應用   CF卡是最近幾年蓬勃發展固態非易失的存儲介質,由於CF卡具有攜帶方便、易於升級、存儲量大、抗震性好等優點,在大容量攜帶型數據存儲和傳……

 1 CF卡的特點及應用
    CF卡是最近幾年蓬勃發展固態非易失的存儲介質,由於CF卡具有攜帶方便、易於升級、存儲量大、抗震性好等優點,在大容量攜帶型數據存儲和傳輸過程中,CF 有著非常廣泛的應用前景,如數碼相機、MP3播放器、PDA(個人數字助理)、數字式錄音機、筆記本電腦、手提電話、機頂盒等。預計今後在其他領域將有更為廣泛的應用。另外CF卡的兼容性佳,不僅同時支持3.3 V和5 V的電壓,而且不同的CF卡都可以用單一的機構讀寫,特別是CF卡升級換代時也可以保證舊設備的兼容性。而純電子運動的CF卡耗電量很低,僅為IBM 微型硬碟的5%。目前,CF卡容量從最早的2 MB到現今的8 GB,數據傳輸從最早的5 MB/s發展到現在的20 MB/s。
    CF卡由2個基本部分構成:內部控制器和快閃記憶體模塊。CF卡的快閃記憶體模塊基本上都使用NAND型快閃記憶體,用於存儲數據。內部控制器用來實現CF卡與主機的介面以及控制數據的傳輸。CF卡內部控制器的設計完全模擬硬碟,使用標準的ATA/IDE介面。
    CF 的存取方式有3種:PC Card Memory模式、PC Card I/O模式以及True IDE模式。PC Card模式與PCMCIA標準兼容。True IDE模式與ATA標準兼容。
    3種方式相比,在True IDE模式下,CF卡與主機通信的信號最少,硬體介面最簡單、軟體易於實現,因此本設計採用True IDE模式。

2 CF卡介面控制器的寄存器的定義
    在設計中,採用Altera提供的一個CF介面控制器內核實現CF卡數據的傳輸.該內核提供一個連接片外CF卡的Avalon匯流排介面,通過使用適當的時序把Avalon匯流排信號映射到CF卡,提供了對標準的實IDE模式寄存器的訪問,允許設計者在Nios II系統中簡易連接就可以使用CF卡。圖1所示為CF卡介面控制器內核的結構框圖。
 
圖1 CF卡控制器內核結構框圖
    該內核提供2個Avalon匯流排從埠.第一個是為了訪問CF設備內部的寄存器組,第二個是為了訪問控制器內核內部的寄存器文件,CF核提供2個高有效的中斷請求輸出,一個是CF插入或移除的中斷信號,另一個是把設備上的中斷信號傳送到Avalon主設備。
    對於CF卡的操作(如:讀/寫),其實就是對CF卡控制器的寄存器進行操作。所以,必須對CF卡的寄存器十分熟悉。這些寄存器統稱為任務文件(task file)寄存器:
(1)數據寄存器(讀/寫),用於CF卡的讀寫操作。主機通過該寄存器向CF卡數據緩衝寫入或從CF卡數據緩衝讀出數據。
(2)錯誤寄存器(讀)和特性寄存器(寫) 讀操作時,此寄存器為錯誤寄存器,用於指明錯誤的原因;寫操作時,此寄存器為特性寄存器。
(3)扇區數寄存器(讀/寫)。用來記錄讀、寫扇區的數目。
(4)扇區號寄存器(讀/寫),用來記錄讀、寫和校驗命令指定的起始扇區號或邏輯塊地址(LBA)的BIT7:0。
(5)柱面號寄存器(讀/寫),用來記錄讀、寫、校驗和定址命令指定的柱面號或LBA的BIT23:8。
(6)驅動器/磁頭寄存器(讀/寫),記錄讀、寫、校驗和尋道命令指定的驅動器號、磁頭號或LBA的BIT27:24,其中BIT6(LBA)用來設置CF卡扇區的定址方式(LBA=0,採用CHS模式;LBA=1。採用LBA模式)。
(7)狀態寄存器(讀)和命令寄存器(寫),在讀操作時,該寄存器是狀態寄存器,指示CF卡控制器執行命令后的狀態,讀狀態寄存器則返回CF卡的當前狀態;在寫操作時,該寄存器是命令寄存器,接收主機發送給CF卡的控制命令。

3 Nios II處理器與CF卡的硬體介面設計
    在Altera公司提供的SoPC軟體中對該軟核進行配置時,選用Nios II CPU、內部定時器、CF卡介面控制器、SDRAM 控制器、FLASH 存儲器介面、LCD 介面和EPCS4串列配置器件控制器介面。其框圖如圖2所示。
 
圖2 硬體介面框圖

4 CF卡的介面控制器的軟體操作
    在Nios II系統中,應用軟體架構在HAL(硬體抽象層)和C標準庫函數上。在Nios II IDE 中建立新的軟體工程時,IDE會根據SoPC Builder對系統的硬體配置自動生成一個定製HAL系統庫。這個庫能為程序和底層硬體的通信提供介面驅動程序,HAL系統庫為CF卡介面控制器內核提供了兩組直接訪問設備寄存器的API函數,其中一個是針對IDE任務文件(ATA)寄存器的,主要提供了對標準的實IDE模式寄存器的訪問設,另一個是針對CF介面控制寄存器的,主要提供了對電源,複位,插入或移除檢測和中斷的控制。設計者只需要調用這些函數就可以訪問外部設備。
    由於CF卡的讀寫是以一個扇區為基本單位的。在讀寫一個扇區之前必須先指明當前需要讀寫的柱面、頭和扇區或LBA地址,然後發送讀寫命令。一個扇區的512 B需要一次性連續讀出或寫入。主機讀/寫CF卡上一個文件的過程是這樣的:
(1)CF卡檢測。調用:
IORD_ALTERA_AVALON_CF_CTL_STATUS(CF_CTI_BASE)。
(2)CF卡內部控制器向CF卡某些寄存器填寫必要的信息。如向扇區號寄存器填寫讀寫數據的起始扇區號或I.BA地址、向扇區數寄存器填寫讀寫數據所佔的扇區個數、設置CF卡的扇區定址方式等。調用:
IOWR_ALTERA_AVALON_CF_IDE_SECTOR_COUNT(CF_IDE_BASE,Sector_cunt);
IOWR_ALTERA_AVALON_CF_IDE_SECTOR_NUMBER(CF_IDE_BASE,Sector_num);
IOWR_ALTERA_AVALON_CF_IDE_CYLINDER_LOW(CF_IDE_BASE,0x00);
IOWR_ALTERA_AVALON_CF_IDE_CYLINDER_HIGH(CF_IDE_BASE,0x00);
IOWR_ALTERA_AVALON_CF_IDE_DEVICE_HEAD(CF_IDE_BASE,0xe0)。
(3)向CF卡的命令寄存器寫入操作CF卡的命令。如寫操作向CF卡的命令寄存器寫入30H,讀操作向CF卡的命令寄存器寫入20H。調用:
IOWR_ALTERA_AVALON_CF_IDE_COMMAND(CF_IDE_BASE,0x30);
IOWR_ALTERA_AVALON_CF_IDE_COMMAND(CF_IDE_BASE,0x20)。
(4)CF卡有數據傳輸請求之後,主機讀寫CF卡的數據寄存器,從而實現從CF卡數據緩衝讀出數據或向CF卡數據緩衝寫入數據。調用:
IORD_ALTERA_AVAlON_CF_IDE_DATA (CF_IDE_BASE);
IOWR_ALTERA_AVALON_CF_IDE_DATA(CF_IDE_BASE,Data_Write)。
(5)在執行以上操作的過程中,每執行一步。都應該檢測狀態寄存器,確定CF卡的當前狀態,從而確定下一步應該執行什麼操作(參考狀態寄存器的BIT位的意義,編寫檢測代碼)。調用:
IORD_ALTERA_AVALON_CF_IDE_STATUS(CF_IDE_BASE)。
    由於CF卡由ATA控制器和FLASH存儲器2部分構成,處理器訪問FLASH存儲器的速度遠遠小於訪問內存的速度,如果系統頻繁訪問CF卡,勢必會影響系統的實時性和工作效率。所以必須考慮CF卡讀寫程序的設計技巧 。根據存儲器訪問的局部性原理,CPU 存取數據所訪問的存儲單元都趨向於聚集在一個較小的連續區域。從時間上看,如果一個信息項正在被訪問,那麼在近期他很可能還會被再次訪問。從空間上看,在最近將用到的信息很可能與目前正在使用的信息在空間地址上是臨近的。在Nios II硬體系統設計中,添加了片上的存儲空間,用於存儲最近訪問過的扇區數據。另外還設置了兩個全局變數:一個保存最近備份的扇區編號;另一個說明備份數據是否與CF卡中的相應數據一致,如果一致,其值為0,否則為1。這樣不但可以減少讀寫CF卡的次數。而且提高了訪問速度,通過添加硬體緩衝區,滿足嵌入式操作系統的實時性要求。目前,該設計已經在開發板上實現,運行穩定可靠。


[admin via 研發互助社區 ] Nios II與CF卡的介面設計已經有2391次圍觀

http://cocdig.com/docs/show-post-43058.html