亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法

文檔序號(hào):6535571閱讀:523來(lái)源:國(guó)知局
一種在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法
【專利摘要】本發(fā)明公開(kāi)了一種在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法,包括:修改、剪切操作系統(tǒng)內(nèi)核中的SDIO接口驅(qū)動(dòng);把SDIO接口驅(qū)動(dòng)移植到Bootloader中;移植完成后編譯Bootloader;把編譯好的Bootloader移植到開(kāi)發(fā)板中;開(kāi)發(fā)板上電啟動(dòng)后運(yùn)行Bootloader,在Bootloader運(yùn)行過(guò)程中對(duì)SDIO接口設(shè)備進(jìn)行檢測(cè);如果檢測(cè)到SDIO接口設(shè)備則對(duì)設(shè)備進(jìn)行初始化,然后根據(jù)用戶的需求對(duì)設(shè)備進(jìn)行讀寫(xiě),讀寫(xiě)完成后繼續(xù)執(zhí)行Bootloader啟動(dòng)操作系統(tǒng);如果未檢測(cè)到SDIO接口設(shè)備則順序執(zhí)行Bootloader啟動(dòng)操作系統(tǒng)。本發(fā)明可以在無(wú)操作系統(tǒng)環(huán)境下實(shí)現(xiàn)對(duì)SDIO接口設(shè)備的檢測(cè)、初始化和數(shù)據(jù)讀寫(xiě),解除了SDIO設(shè)備的使用對(duì)操作系統(tǒng)的依賴。
【專利說(shuō)明】—種在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及嵌入式【技術(shù)領(lǐng)域】,特別是一種在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法。
【背景技術(shù)】
[0002]SDIO (Secure Digital Input and Output)接口是由傳統(tǒng) SD 存儲(chǔ)卡的 SD 總線發(fā)展來(lái)的一種兼容多種存儲(chǔ)卡及SDIO設(shè)備的接口設(shè)備,該接口設(shè)備支持SDIO卡、復(fù)合SDIO卡、SD存儲(chǔ)卡和MMC卡,在電路、功耗和軟件上完全兼容SD存儲(chǔ)卡。SDIO接口具有很強(qiáng)的可擴(kuò)展性和較快的傳輸速度,支持即插即用,為移動(dòng)設(shè)備提供了高速低功耗10數(shù)據(jù)傳輸解決方案,在手機(jī)、PAD等各種移動(dòng)與固定設(shè)備中應(yīng)用廣泛。目前已經(jīng)有相機(jī)、錄音器、掃描儀、GPS、藍(lán)牙、無(wú)線網(wǎng)卡等多種SDIO接口設(shè)備。
[0003]SDIO接口是通用的外圍接口之一,目前SDIO接口設(shè)備對(duì)操作系統(tǒng)有很強(qiáng)的依賴性,SDIO接口驅(qū)動(dòng)集成在操作系統(tǒng)的內(nèi)核中,操作系統(tǒng)啟動(dòng)后才能對(duì)SDIO接口設(shè)備進(jìn)行識(shí)別和數(shù)據(jù)讀寫(xiě)。平板電腦等移動(dòng)設(shè)備上電后首先運(yùn)行系統(tǒng)啟動(dòng)引導(dǎo)程序Bootloader將操作系統(tǒng)內(nèi)核復(fù)制到內(nèi)存中然后啟動(dòng)操作系統(tǒng),Bootloader中不具備SDIO接口驅(qū)動(dòng)程序,因此在Bootloader運(yùn)行階段SDIO接口設(shè)備無(wú)法使用。
[0004]Bootloader是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段程序,主要負(fù)責(zé)硬件設(shè)備的初始化、內(nèi)存空間映射圖的建立等工作,從而將系統(tǒng)的軟硬件環(huán)境帶到了一個(gè)合適的狀態(tài),為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。因此在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)能夠在Bootloader啟動(dòng)階段增強(qiáng)移動(dòng)設(shè)備與外接設(shè)備的聯(lián)系與通訊,實(shí)現(xiàn)在操作系統(tǒng)啟動(dòng)前識(shí)別和讀寫(xiě)SDIO接口設(shè)備,在Bootloader原有功能的基礎(chǔ)上擴(kuò)展和開(kāi)發(fā)新的功能應(yīng)用,實(shí)現(xiàn)一些目前只能在操作系統(tǒng)層面上實(shí)現(xiàn)的應(yīng)用如連接無(wú)線網(wǎng)絡(luò)。
[0005]綜上所述,目前的SDIO接口主要使用在操作系統(tǒng)啟動(dòng)后移動(dòng)手持或固定設(shè)備與外接設(shè)備之間的通訊方面,國(guó)內(nèi)外尚未有在Bootloader層針對(duì)SDIO驅(qū)動(dòng)進(jìn)行的研究。

【發(fā)明內(nèi)容】

[0006]本發(fā)明所要解決的技術(shù)問(wèn)題是,針對(duì)現(xiàn)有技術(shù)不足,提供一種在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法,實(shí)現(xiàn)無(wú)操作系統(tǒng)環(huán)境下對(duì)SDIO接口設(shè)備的支持,解決SDIO接口設(shè)備只能在操作系統(tǒng)啟動(dòng)后使用的問(wèn)題。
[0007]為解決上述技術(shù)問(wèn)題,本發(fā)明所采用的技術(shù)方案是:一種在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法,該方法為:
1)刪除操作系統(tǒng)內(nèi)核中的SDIO接口驅(qū)動(dòng)代碼中與操作系統(tǒng)內(nèi)核相關(guān)的部分,得到修改后的驅(qū)動(dòng),將修改后的驅(qū)動(dòng)移植到Bootloader中,配置Bootloader,編譯配置后的Bootloader ;
2)將編譯后的Bootloader下載到開(kāi)發(fā)板中,開(kāi)發(fā)板上電后順序執(zhí)行Bootloader代
碼; 3)在Bootloader的C語(yǔ)言代碼中添加檢測(cè)SDIO接口設(shè)備的函數(shù),檢測(cè)是否有SDIO接口設(shè)備插入;若有,進(jìn)入步驟4);否則,進(jìn)入步驟8);
4)初始化SDIO接口設(shè)備;
5)判斷對(duì)SDIO接口設(shè)備是否有讀寫(xiě)操作,若有,則進(jìn)入步驟6);否則,進(jìn)入步驟7);
6)選擇要進(jìn)行的操作,產(chǎn)生相應(yīng)的中斷,根據(jù)中斷調(diào)用數(shù)據(jù)傳輸控制驅(qū)動(dòng)對(duì)SDIO接口設(shè)備進(jìn)行讀寫(xiě);
7)退出對(duì)SDIO接口設(shè)備的操作;
8)繼續(xù)執(zhí)行Bootloader代碼,啟動(dòng)操作系統(tǒng)。
[0008]與現(xiàn)有技術(shù)相比,本發(fā)明所具有的有益效果為:本發(fā)明實(shí)現(xiàn)了無(wú)操作系統(tǒng)環(huán)境下對(duì)SDIO接口設(shè)備的支持,使SDIO接口設(shè)備的使用擺脫了對(duì)操作系統(tǒng)的依賴,實(shí)現(xiàn)了底層對(duì)SDIO接口設(shè)備的支持,在近似裸機(jī)環(huán)境的Bootloader運(yùn)行階段實(shí)現(xiàn)對(duì)插入的SDIO接口設(shè)備的讀取和數(shù)據(jù)寫(xiě)入,解決了 SDIO接口設(shè)備只能在操作系統(tǒng)啟動(dòng)后使用的問(wèn)題。
【專利附圖】

【附圖說(shuō)明】
[0009]圖1為SDIO接口軟硬件結(jié)構(gòu)圖;
圖2為本發(fā)明方法總體流程圖;
圖3為本發(fā)明一實(shí)施例SDIO卡初始化流程圖;
圖4為本發(fā)明一實(shí)施例數(shù)據(jù)傳輸控制流程圖。
【具體實(shí)施方式】
[0010]如圖2所示,本發(fā)明的方法步驟如下:
S1:刪除操作系統(tǒng)內(nèi)核中的SDIO接口驅(qū)動(dòng)代碼中與內(nèi)核相關(guān)的部分,把修改后的驅(qū)動(dòng)移植到Bootloader中,移植完成后用#make menuconfig命令配置Bootloader,然后輸入#make 命令編譯 Bootloader。
[0011]S2:將重新編譯后的Bootloader下載到開(kāi)發(fā)板中。
[0012]S3:開(kāi)發(fā)板上電。
[0013]S4:順序執(zhí)行Bootloader代碼=Bootloader的啟動(dòng)分為兩個(gè)階段,第一階段為匯編語(yǔ)言,第二階段為C語(yǔ)言,匯編語(yǔ)言執(zhí)行完成后會(huì)跳入到C語(yǔ)言代碼入口處繼續(xù)執(zhí)行。
S5:檢測(cè)SDIO接口設(shè)備:在Bootloader的C語(yǔ)言代碼中添加檢測(cè)SDIO接口設(shè)備的函數(shù),檢測(cè)是否有SDIO接口設(shè)備插入。SDIO接口的開(kāi)關(guān)檢測(cè)引腳是用來(lái)檢測(cè)SDIO接口設(shè)備的插入或拔出,通過(guò)檢測(cè)引腳電平變化引起的中斷來(lái)判定是否有SDIO接口設(shè)備的插入。檢測(cè)到設(shè)備后對(duì)設(shè)備進(jìn)行初始化,未檢測(cè)到設(shè)備則繼續(xù)執(zhí)行Bootloader代碼進(jìn)而啟動(dòng)操作系統(tǒng)。
[0014]S6:初始化SDIO接口設(shè)備:檢測(cè)到SDIO接口設(shè)備插入后,調(diào)用SDIO控制器的控制驅(qū)動(dòng)對(duì)卡進(jìn)行初始化操作,初始化流程如圖3所示??刂破鞅仨毾扰袛嗫ǖ念愋褪欠駥儆赟DIO卡,SD卡、SDIO卡和mmc卡。不同的卡的工作電壓范圍各不相同,控制器發(fā)送命令查詢插入設(shè)備的工作電壓范圍,然后根據(jù)設(shè)備的響應(yīng)(設(shè)備的工作電壓范圍)判斷設(shè)備所屬的類型,獲得卡的基本信息后對(duì)rSDIPRE,rSDICON, rSDIDTIMER三個(gè)寄存器進(jìn)行設(shè)置。
[0015]S7:是否對(duì)設(shè)備進(jìn)行讀寫(xiě)操作:初始化SDIO接口設(shè)備后,如果對(duì)設(shè)備有讀寫(xiě)操作則根據(jù)用戶的選擇進(jìn)行相應(yīng)的操作,如果對(duì)設(shè)備沒(méi)有進(jìn)一步的讀寫(xiě)操作則退出對(duì)設(shè)備的操作。
[0016]S8:對(duì)設(shè)備進(jìn)行讀寫(xiě)操作:選擇要進(jìn)行的操作,產(chǎn)生相應(yīng)的中斷,根據(jù)中斷調(diào)用數(shù)據(jù)傳輸控制驅(qū)動(dòng)對(duì)卡進(jìn)行讀寫(xiě),數(shù)據(jù)傳輸流程如圖4示。控制器驅(qū)動(dòng)首先設(shè)置與數(shù)據(jù)傳輸相關(guān)的寄存器??刂破鲗?duì)卡進(jìn)行讀操作時(shí),將接收到的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù),存入數(shù)據(jù)模塊,寫(xiě)操作也是相同的,控制器將并行數(shù)據(jù)從數(shù)據(jù)模塊里取出,串行發(fā)出。
[0017]S9:退出對(duì)設(shè)備的操作:讀寫(xiě)操作完成后或者初始化后對(duì)設(shè)備沒(méi)有進(jìn)一步的讀寫(xiě)操作則退出對(duì)設(shè)備的操作。
[0018]SlO:繼續(xù)執(zhí)行Bootloader:退出對(duì)SDIO接口設(shè)備的操作后繼續(xù)執(zhí)行Bootloader代碼,啟動(dòng)操作系統(tǒng)。
[0019]該實(shí)例使用的SDIO接口設(shè)備是SDIO接口 WIFI無(wú)線網(wǎng)卡,規(guī)格型號(hào)為FIT-WIF1-SD10,型號(hào)為 WM-G_MR-09(Marvell8686),接 口為 SD10( lbit/4bit),支持 IEEE802.llb/g網(wǎng)絡(luò)標(biāo)準(zhǔn),數(shù)據(jù)傳輸率為54Mbps。
[0020]本實(shí)施例是基于智能移動(dòng)終端開(kāi)發(fā)板0K6410,該移動(dòng)設(shè)備平臺(tái)包括:ARM架構(gòu)CPU,型號(hào)為S3C6410 ;有線網(wǎng)卡,型號(hào)DM9000 ;按鍵模塊;存儲(chǔ)模塊為2G的Nand Flash。
[0021]本實(shí)施例采用Uboot作為Bootloarder的實(shí)例,通過(guò)把SDIO驅(qū)動(dòng)移植到Uboot中實(shí)現(xiàn)在Uboot啟動(dòng)時(shí)對(duì)SDIO接口的無(wú)線網(wǎng)卡的檢測(cè)識(shí)別、初始化和數(shù)據(jù)收發(fā)。在此之前已經(jīng)完成了 WIFI驅(qū)動(dòng)移植到Uboot中的相關(guān)工作。
[0022]為了更好地說(shuō)明本發(fā)明的方法,以下結(jié)合附圖,對(duì)本發(fā)明的實(shí)施方法作進(jìn)一步描述。
[0023]S1:剪切、修改操作系統(tǒng)內(nèi)核中的SDIO接口驅(qū)動(dòng),把修改后的驅(qū)動(dòng)移植到Uboot中,移植完成后重新編譯Uboot。
[0024]S2:將重新編譯后的Uboot下載到開(kāi)發(fā)板中。
[0025]S3:開(kāi)發(fā)板上電。
[0026]S4:順序執(zhí)行Uboot代碼。
[0027]S5:在Uboot執(zhí)行到第二階段即C語(yǔ)言階段時(shí)檢測(cè)SDIO接口無(wú)線網(wǎng)卡是否插入。在Uboot的第二階段即C語(yǔ)言階段插入SDIO接口設(shè)備的檢測(cè)函數(shù),Sdi0_reScan()。負(fù)責(zé)檢測(cè)開(kāi)關(guān)檢測(cè)引腳來(lái)確定是否有SDIO無(wú)線網(wǎng)卡插入,如果有網(wǎng)卡插入則返回值為1,如果沒(méi)有網(wǎng)卡插入則返回值為O。如果返回值為0,說(shuō)明未檢測(cè)到SDIO接口無(wú)線網(wǎng)卡,則繼續(xù)執(zhí)行Uboot代碼進(jìn)而啟動(dòng)操作系統(tǒng)。
[0028]S6:檢測(cè)到sdiojescanO返回值為1,則根據(jù)此條件選擇運(yùn)行SDIO控制器驅(qū)動(dòng)中的命令控制驅(qū)動(dòng)部分對(duì)無(wú)線網(wǎng)卡進(jìn)行初始化操作,檢測(cè)網(wǎng)卡的相關(guān)信息,并通過(guò)串口打印出檢測(cè)到的信息。
[0029]S7:初始化無(wú)線網(wǎng)卡之后確定用戶是否要對(duì)網(wǎng)卡進(jìn)行進(jìn)一步的讀寫(xiě)操作,如果要進(jìn)行讀寫(xiě)操作則對(duì)網(wǎng)卡進(jìn)行讀寫(xiě),如果不進(jìn)行進(jìn)一步的操作則退出對(duì)無(wú)線網(wǎng)卡設(shè)備的操作。
[0030]S8:對(duì)無(wú)線網(wǎng)卡有讀寫(xiě)操作則選擇要進(jìn)行的操作,產(chǎn)生相應(yīng)的中斷然后調(diào)用數(shù)據(jù)傳輸控制驅(qū)動(dòng)對(duì)網(wǎng)卡進(jìn)行讀取或者寫(xiě)入數(shù)據(jù)的操作。
[0031]S9:初始化無(wú)線網(wǎng)卡后對(duì)網(wǎng)卡沒(méi)有進(jìn)一步的操作或者已經(jīng)完成了對(duì)網(wǎng)卡的讀取或數(shù)據(jù)寫(xiě)入工作則退出對(duì)網(wǎng)卡的操作。
[0032]SlO:退出對(duì)網(wǎng)卡的操作后,繼續(xù)執(zhí)行Uboot代碼,啟動(dòng)操作系統(tǒng)。
[0033]與現(xiàn)有技術(shù)相比,本發(fā)明的一種在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法,通過(guò)修改SDIO接口驅(qū)動(dòng),移植SDIO接口驅(qū)動(dòng)到Bootloader,修改Bootloader啟動(dòng)代碼,編譯Bootloader等,實(shí)現(xiàn)了在無(wú)操作系統(tǒng)環(huán)境下對(duì)SDIO接口設(shè)備的識(shí)別和讀寫(xiě)。實(shí)現(xiàn)了 SDIO接口設(shè)備的使用不依賴操作系統(tǒng)的特性,方便了智能終端用戶。
【權(quán)利要求】
1.一種在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法,其特征在于,該方法為: 1)刪除操作系統(tǒng)內(nèi)核中的SDIO接口驅(qū)動(dòng)代碼中與內(nèi)核相關(guān)的部分,得到修改后的驅(qū)動(dòng),將修改后的驅(qū)動(dòng)移植到Bootloader中,配置Bootloader,編譯配置后的Bootloader ; 2)將編譯后的Bootloader下載到開(kāi)發(fā)板中,開(kāi)發(fā)板上電后順序執(zhí)行Bootloader代碼; 3)在Bootloader的C語(yǔ)言代碼中添加檢測(cè)SDIO接口設(shè)備的函數(shù),檢測(cè)是否有SDIO接口設(shè)備插入;若有,進(jìn)入步驟4);否則,進(jìn)入步驟8); 4)初始化SDIO接口設(shè)備; 5)判斷對(duì)SDIO接口設(shè)備是否有讀寫(xiě)操作,若有,則進(jìn)入步驟6);否則,進(jìn)入步驟7); 6)選擇要進(jìn)行的操作,產(chǎn)生相應(yīng)的中斷,根據(jù)中斷調(diào)用數(shù)據(jù)傳輸控制驅(qū)動(dòng)對(duì)SDIO接口設(shè)備進(jìn)行讀寫(xiě); 7)退出對(duì)SDIO接口設(shè)備的操作; 8)繼續(xù)執(zhí)行Bootloader代碼,啟動(dòng)操作系統(tǒng)。
2.根據(jù)權(quán)利要求1所述的在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法,其特征在于,所述 Bootloader 為 Uboot。
3.根據(jù)權(quán)利要求2所述的在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法,其特征在于,所述SDIO接口設(shè)備為SDIO接口無(wú)線網(wǎng)卡。
4.根據(jù)權(quán)利要求3所述的在Bootloader層實(shí)現(xiàn)SDIO接口驅(qū)動(dòng)的方法,其特征在于,SDIO接口無(wú)線網(wǎng)卡的檢測(cè)函數(shù)為sdio_rescan()。
【文檔編號(hào)】G06F9/445GK103761129SQ201410013951
【公開(kāi)日】2014年4月30日 申請(qǐng)日期:2014年1月13日 優(yōu)先權(quán)日:2014年1月13日
【發(fā)明者】熊永華, 張堯?qū)W, 吳敏, 陳建二, 王建新, 王國(guó)軍, 陳婭, 王寧 申請(qǐng)人:中南大學(xué)
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1