一種pci轉(zhuǎn)cf驅(qū)動方法
【專利摘要】本發(fā)明提供一種PCI轉(zhuǎn)CF驅(qū)動方法,其具體實現(xiàn)過程為:在ReWorks操作系統(tǒng)中,創(chuàng)建CF驅(qū)動:初始化CF設(shè)備,創(chuàng)建設(shè)備文件系統(tǒng);建立設(shè)備驅(qū)動程序后,使用I/O函數(shù)訪問CF設(shè)備;將驅(qū)動程序打包進(jìn)ReWorks操作系統(tǒng),編譯系統(tǒng)內(nèi)核,燒寫到手持式計算機(jī)平臺上;啟動系統(tǒng)后,將CF設(shè)備插入插槽,系統(tǒng)自動識別CF設(shè)備,識別后對CF設(shè)備進(jìn)行配置,CF設(shè)備完成存儲備份;將CF設(shè)備拔出,系統(tǒng)自動卸載CF設(shè)備。該一種PCI轉(zhuǎn)CF驅(qū)動方法和現(xiàn)有技術(shù)相比,實現(xiàn)了CF擴(kuò)展功能,實用性強(qiáng),適用范圍廣泛,易于推廣。
【專利說明】—種PC I轉(zhuǎn)CF驅(qū)動方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)【技術(shù)領(lǐng)域】,具體地說是一種的PCI轉(zhuǎn)CF驅(qū)動方法。
【背景技術(shù)】
[0002]龍芯系列處理器是是中國科學(xué)院計算所自主研發(fā)的通用CPU,其中龍芯I系列處理器面向工業(yè)控制、消費(fèi)電子(手機(jī)/MP4/掌上電腦等)等嵌入式應(yīng)用。龍芯IA處理器本身不支持CF擴(kuò)展,但許多特種行業(yè)用戶如軍方用戶等有很多CF接口的擴(kuò)展設(shè)備。CF卡可以工作在三種模式:PC Card Memory模式、PC Card I/O模式和True IDE模式。True IDE模式使用較少,PC Card Memory模式可支持CF接口存儲卡,但目前軍方用戶的CF接口設(shè)備大多為PC Card I/O模式,該模式的CF接口只能通過PCI總線轉(zhuǎn)出。而龍芯IA支持PCI總線擴(kuò)展,因此我們采用龍芯IA的PCI總線擴(kuò)展了一個標(biāo)準(zhǔn)CF接口,既支持CF存儲卡,也支持CF接口的其他設(shè)備。
[0003]Refforks嵌入式操作系統(tǒng)是中國電子科技集團(tuán)第32所基于“九五”、“十五”的技術(shù)成果自行研制的嵌入式實時操作系統(tǒng),適用于多種目標(biāo)硬件環(huán)境(x86、mips)。ReWorks操作系統(tǒng)采用面向?qū)ο蠛臀?nèi)核技術(shù)開發(fā),具有強(qiáng)實時性、可裁剪性和可伸縮性,并提供了Vxfforks兼容層。
[0004]目前尚沒有對國產(chǎn)嵌入式操作系統(tǒng)ReWorks下PCI轉(zhuǎn)CF驅(qū)動的研究,因此,現(xiàn)提供一種基于國產(chǎn)嵌入式操作系統(tǒng)ReWorks下實現(xiàn)了對PCI轉(zhuǎn)CF接口的驅(qū)動方法。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的技術(shù)任務(wù)是針對在現(xiàn)有技術(shù)的不足,提供一種PCI轉(zhuǎn)CF驅(qū)動方法。
[0006]本發(fā)明的技術(shù)方案是按以下方式實現(xiàn)的,該一種PCI轉(zhuǎn)CF驅(qū)動方法,其具體實現(xiàn)過程為:
一、在ReWorks操作系統(tǒng)中,創(chuàng)建CF驅(qū)動:初始化CF設(shè)備,創(chuàng)建設(shè)備文件系統(tǒng);
二、建立設(shè)備驅(qū)動程序后,使用1/0函數(shù)訪問CF設(shè)備,該1/0函數(shù)包括createO,open O,read O,write ()和 remove ()函數(shù);
三、將驅(qū)動程序打包進(jìn)ReWorks操作系統(tǒng),編譯系統(tǒng)內(nèi)核,燒寫到龍芯IA手持式計算機(jī)平臺上;
四、啟動系統(tǒng)后,將CF設(shè)備插入插槽,系統(tǒng)自動識別CF設(shè)備,識別后對CF設(shè)備進(jìn)行配置,CF設(shè)備完成存儲備份;
五、將CF設(shè)備拔出,系統(tǒng)自動卸載CF設(shè)備。
[0007]所述步驟三中驅(qū)動自動識別CF設(shè)備的過程為=ReWorks通過PCI設(shè)備的類別對PCI設(shè)備進(jìn)行識別,PCI設(shè)備的類別包括PCI類、PCI子類和PCI協(xié)議,Reworks下定義一個常量PCID_N0TIFY_ALL,該常量代表上述所有的PCI類、PCI子類和PCI協(xié)議,通過編程識別所有PCI類設(shè)備的插拔。
[0008]所述步驟三中CF設(shè)備的配置過程為:首先,驅(qū)動在系統(tǒng)中設(shè)置傳輸CF信號的GPIO,并為其分配好尋址用的IO端口,在PC卡I/O模式下,CF設(shè)備的IO端口即為其通用存儲空間的16字節(jié)數(shù)據(jù)塊;其次,對CF設(shè)備的屬性存儲空間進(jìn)行配置,該配置是指對CF設(shè)備屬性選項寄存器、配置狀態(tài)寄存器、針替換寄存器、套接字拷貝寄存器的值進(jìn)行驗證,若這些值與默認(rèn)值不匹配,則要將其值設(shè)置為默認(rèn)值。
[0009]所述步驟三中CF設(shè)備的存儲備份過程為:
系統(tǒng)向CF設(shè)備發(fā)布ATA指令,該ATA指令要求CF設(shè)備在接收到命令時處于不忙狀態(tài)且有數(shù)據(jù)請求時才能處理CF緩沖區(qū)中的數(shù)據(jù)流;
驅(qū)動程序根據(jù)系統(tǒng)的I/O請求得到CF設(shè)備的塊號,利用該塊號來計算CF設(shè)備的LBA地址;
然后取block的低28位,依次對應(yīng)CF設(shè)備的柱面低位寄存器、柱面高位寄存器、扇區(qū)寄存器、設(shè)備/磁頭寄存器,將這些參數(shù)值和ATA指令按8位方式寫入相應(yīng)寄存器中,即完成一次存儲過程。
[0010]本發(fā)明與現(xiàn)有技術(shù)相比所產(chǎn)生的有益效果是:
本發(fā)明的一種PCI轉(zhuǎn)CF驅(qū)動方法基于國產(chǎn)操作系統(tǒng)實現(xiàn),實現(xiàn)了 CF擴(kuò)展功能,實用性強(qiáng),適用范圍廣泛,易于推 廣。
【專利附圖】
【附圖說明】
[0011]附圖1是本發(fā)明的硬件結(jié)構(gòu)示意圖。
【具體實施方式】
[0012]下面結(jié)合附圖對本發(fā)明所提供的一種PCI轉(zhuǎn)CF驅(qū)動方法作以下詳細(xì)說明。
[0013]如附圖1所示,本發(fā)明提供一種PCI轉(zhuǎn)CF驅(qū)動方法,首先配置器硬件設(shè)備,硬件整體采用如附圖1所示的結(jié)構(gòu),該附圖中的硬件基本與現(xiàn)有技術(shù)硬件相同,但其CPU采用國產(chǎn)龍芯CPU,軟件系統(tǒng)使用國產(chǎn)在Reworks (即附圖中的銳華)操作系統(tǒng)。
[0014]硬件設(shè)置完成后,其具體PCI轉(zhuǎn)CF驅(qū)動實現(xiàn)過程為:
一、在ReWorks操作系統(tǒng)中,創(chuàng)建CF驅(qū)動:初始化CF設(shè)備,創(chuàng)建設(shè)備文件系統(tǒng),該創(chuàng)建的關(guān)鍵源代碼為:
If(pciDrv(PCI_INT_VEC, IDE_INT_VEC, type)==ERR0R)
printf ( “Could not initialize.\n,,);
dosFsInit(NUM_D0SFS_FILES);
if(usrldeConfig(drive, fileName)==ERR0R)
二、建立設(shè)備驅(qū)動程序后,使用1/0函數(shù)訪問CF設(shè)備,該1/0函數(shù)包括createO,open O,read O,write ()和 remove ()函數(shù);
三、將驅(qū)動程序打包進(jìn)ReWorks操作系統(tǒng),編譯系統(tǒng)內(nèi)核,燒寫到龍芯IA手持式計算機(jī)平臺上;
四、啟動系統(tǒng)后,將CF設(shè)備插入插槽,系統(tǒng)自動識別CF設(shè)備,識別后對CF設(shè)備進(jìn)行配置,CF設(shè)備完成存儲備份;
五、將CF卡拔出,系統(tǒng)自動卸載CF設(shè)備。[0015]所述步驟三中驅(qū)動自動識別CF設(shè)備的過程為=ReWorks通過PCI設(shè)備的類別對PCI設(shè)備進(jìn)行識別,PCI設(shè)備的類別從PCI類、PCI子類和PCI協(xié)議三方面定義,但實際中由于設(shè)備類別比較多,不是所有設(shè)備都能很容易找到其設(shè)備類別,Reworks下提供一個比較方便識別PCI設(shè)備的方法,ReWorks下定義一個常量PCID_NOTIFY_ALL,這個常量可以代表所有的PCI類、PCI子類和PCI協(xié)議,可識別所有PCI類設(shè)備的插拔。探測(probe)函數(shù)代碼如下:
【權(quán)利要求】
1.一種PCI轉(zhuǎn)CF驅(qū)動方法,其特征在于:其具體實現(xiàn)過程為: 一、在ReWorks操作系統(tǒng)中,創(chuàng)建CF驅(qū)動:初始化CF設(shè)備,創(chuàng)建設(shè)備文件系統(tǒng); 二、建立設(shè)備驅(qū)動程序后,使用I/O函數(shù)訪問CF設(shè)備,該I/O函數(shù)包括createO,open O,read O,write ()和 remove ()函數(shù); 三、將驅(qū)動程序打包進(jìn)ReWorks操作系統(tǒng),編譯系統(tǒng)內(nèi)核,燒寫到龍芯IA手持式計算機(jī)平臺上; 四、啟動系統(tǒng)后,將CF設(shè)備插入插槽,系統(tǒng)自動識別CF設(shè)備,識別后對CF設(shè)備進(jìn)行配置,CF設(shè)備完成存儲備份; 五、將CF設(shè)備拔出,系統(tǒng)自動卸載CF設(shè)備。
2.根據(jù)權(quán)利要求1所述的一種PCI轉(zhuǎn)CF驅(qū)動方法,其特征在于:所述步驟三中驅(qū)動自動識別CF設(shè)備的過程為=ReWorks通過PCI設(shè)備的類別對PCI設(shè)備進(jìn)行識別,PCI設(shè)備的類別包括PCI類、PCI子類和PCI協(xié)議,ReWorks下定義一個常量PCID_NOTIFY_ALL,該常量代表上述所有的PCI類、PCI子類和PCI協(xié)議,通過編程識別所有PCI類設(shè)備的插拔。
3.根據(jù)權(quán)利要求1所述的一種PCI轉(zhuǎn)CF驅(qū)動方法,其特征在于:所述步驟三中CF設(shè)備的配置過程為:首先,驅(qū)動在系統(tǒng)中設(shè)置傳輸CF信號的GP10,并為其分配好尋址用的IO端口,在PC卡I/O模式下,CF設(shè)備的IO端口即為其通用存儲空間的16字節(jié)數(shù)據(jù)塊;其次,對CF設(shè)備的屬性存儲空間進(jìn)行配置,該配置是指對CF設(shè)備屬性選項寄存器、配置狀態(tài)寄存器、針替換寄存器、套接字拷貝寄存器的值進(jìn)行驗證,若這些值與默認(rèn)值不匹配,則要將其值設(shè)置為默認(rèn)值。
4.根據(jù)權(quán)利要求1所述的一種PCI轉(zhuǎn)CF驅(qū)動方法,其特征在于:所述步驟三中CF設(shè)備的存儲備份過程為: 系統(tǒng)向CF設(shè)備發(fā)布ATA指令,該ATA指令要求CF設(shè)備在接收到命令時處于不忙狀態(tài)且有數(shù)據(jù)請求時才能處理CF緩沖區(qū)中的數(shù)據(jù)流; 驅(qū)動程序根據(jù)系統(tǒng)的I/O請求得到CF設(shè)備的塊號,利用該塊號來計算CF設(shè)備的LBA地址; 然后取block的低28位,依次對應(yīng)CF設(shè)備的柱面低位寄存器、柱面高位寄存器、扇區(qū)寄存器、設(shè)備/磁頭寄存器,將這些參數(shù)值和ATA指令按8位方式寫入相應(yīng)寄存器中,即完成一次存儲過程。
【文檔編號】G06F13/38GK103984568SQ201410168397
【公開日】2014年8月13日 申請日期:2014年4月25日 優(yōu)先權(quán)日:2014年4月25日
【發(fā)明者】劉傳剛, 陳乃闊 申請人:山東超越數(shù)控電子有限公司