Nios II與CF卡的接口設(shè)計(jì)
3 Nios II處理器與CF卡的硬件接口設(shè)計(jì)
在Altera公司提供的SoPC軟件中對(duì)該軟核進(jìn)行配置時(shí),選用Nios II CPU、內(nèi)部定時(shí)器、CF卡接口控制器、SDRAM 控制器、FLASH 存儲(chǔ)器接口、LCD 接口和EPCS4串行配置器件控制器接口。其框圖如圖2所示。
圖2 硬件接口框圖
4 CF卡的接口控制器的軟件操作
在Nios II系統(tǒng)中,應(yīng)用軟件架構(gòu)在HAL(硬件抽象層)和C標(biāo)準(zhǔn)庫(kù)函數(shù)上。在Nios II IDE 中建立新的軟件工程時(shí),IDE會(huì)根據(jù)SoPC Builder對(duì)系統(tǒng)的硬件配置自動(dòng)生成一個(gè)定制HAL系統(tǒng)庫(kù)。這個(gè)庫(kù)能為程序和底層硬件的通信提供接口驅(qū)動(dòng)程序,HAL系統(tǒng)庫(kù)為CF卡接口控制器內(nèi)核提供了兩組直接訪問(wèn)設(shè)備寄存器的API函數(shù),其中一個(gè)是針對(duì)IDE任務(wù)文件(ATA)寄存器的,主要提供了對(duì)標(biāo)準(zhǔn)的實(shí)IDE模式寄存器的訪問(wèn)設(shè),另一個(gè)是針對(duì)CF接口控制寄存器的,主要提供了對(duì)電源,復(fù)位,插入或移除檢測(cè)和中斷的控制。設(shè)計(jì)者只需要調(diào)用這些函數(shù)就可以訪問(wèn)外部設(shè)備。
由于CF卡的讀寫(xiě)是以一個(gè)扇區(qū)為基本單位的。在讀寫(xiě)一個(gè)扇區(qū)之前必須先指明當(dāng)前需要讀寫(xiě)的柱面、頭和扇區(qū)或LBA地址,然后發(fā)送讀寫(xiě)命令。一個(gè)扇區(qū)的512 B需要一次性連續(xù)讀出或?qū)懭?。主機(jī)讀/寫(xiě)CF卡上一個(gè)文件的過(guò)程是這樣的:
(1)CF卡檢測(cè)。調(diào)用:
IORD_ALTERA_AVALON_CF_CTL_STATUS(CF_CTI_BASE)。
(2)CF卡內(nèi)部控制器向CF卡某些寄存器填寫(xiě)必要的信息。如向扇區(qū)號(hào)寄存器填寫(xiě)讀寫(xiě)數(shù)據(jù)的起始扇區(qū)號(hào)或I.BA地址、向扇區(qū)數(shù)寄存器填寫(xiě)讀寫(xiě)數(shù)據(jù)所占的扇區(qū)個(gè)數(shù)、設(shè)置CF卡的扇區(qū)尋址方式等。調(diào)用:
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卡的命令寄存器寫(xiě)入操作CF卡的命令。如寫(xiě)操作向CF卡的命令寄存器寫(xiě)入30H,讀操作向CF卡的命令寄存器寫(xiě)入20H。調(diào)用:
IOWR_ALTERA_AVALON_CF_IDE_COMMAND(CF_IDE_BASE,0x30);
IOWR_ALTERA_AVALON_CF_IDE_COMMAND(CF_IDE_BASE,0x20)。
(4)CF卡有數(shù)據(jù)傳輸請(qǐng)求之后,主機(jī)讀寫(xiě)CF卡的數(shù)據(jù)寄存器,從而實(shí)現(xiàn)從CF卡數(shù)據(jù)緩沖讀出數(shù)據(jù)或向CF卡數(shù)據(jù)緩沖寫(xiě)入數(shù)據(jù)。調(diào)用:
IORD_ALTERA_AVAlON_CF_IDE_DATA (CF_IDE_BASE);
IOWR_ALTERA_AVALON_CF_IDE_DATA(CF_IDE_BASE,Data_Write)。
(5)在執(zhí)行以上操作的過(guò)程中,每執(zhí)行一步。都應(yīng)該檢測(cè)狀態(tài)寄存器,確定CF卡的當(dāng)前狀態(tài),從而確定下一步應(yīng)該執(zhí)行什么操作(參考狀態(tài)寄存器的BIT位的意義,編寫(xiě)檢測(cè)代碼)。調(diào)用:
IORD_ALTERA_AVALON_CF_IDE_STATUS(CF_IDE_BASE)。
由于CF卡由ATA控制器和FLASH存儲(chǔ)器2部分構(gòu)成,處理器訪問(wèn)FLASH存儲(chǔ)器的速度遠(yuǎn)遠(yuǎn)小于訪問(wèn)內(nèi)存的速度,如果系統(tǒng)頻繁訪問(wèn)CF卡,勢(shì)必會(huì)影響系統(tǒng)的實(shí)時(shí)性和工作效率。所以必須考慮CF卡讀寫(xiě)程序的設(shè)計(jì)技巧 。根據(jù)存儲(chǔ)器訪問(wèn)的局部性原理,CPU 存取數(shù)據(jù)所訪問(wèn)的存儲(chǔ)單元都趨向于聚集在一個(gè)較小的連續(xù)區(qū)域。從時(shí)間上看,如果一個(gè)信息項(xiàng)正在被訪問(wèn),那么在近期他很可能還會(huì)被再次訪問(wèn)。從空間上看,在最近將用到的信息很可能與目前正在使用的信息在空間地址上是臨近的。在Nios II硬件系統(tǒng)設(shè)計(jì)中,添加了片上的存儲(chǔ)空間,用于存儲(chǔ)最近訪問(wèn)過(guò)的扇區(qū)數(shù)據(jù)。另外還設(shè)置了兩個(gè)全局變量:一個(gè)保存最近備份的扇區(qū)編號(hào);另一個(gè)說(shuō)明備份數(shù)據(jù)是否與CF卡中的相應(yīng)數(shù)據(jù)一致,如果一致,其值為0,否則為1。這樣不但可以減少讀寫(xiě)CF卡的次數(shù)。而且提高了訪問(wèn)速度,通過(guò)添加硬件緩沖區(qū),滿足嵌入式操作系統(tǒng)的實(shí)時(shí)性要求。目前,該設(shè)計(jì)已經(jīng)在開(kāi)發(fā)板上實(shí)現(xiàn),運(yùn)行穩(wěn)定可靠。
評(píng)論