CE下基于Zylonite平臺的SD卡驅(qū)動開發(fā)1
0、引言
隨著通信領(lǐng)域新業(yè)務(wù)需求的不斷增長及計算機(jī)技術(shù),半導(dǎo)體技術(shù)和電子技術(shù)的術(shù)的迅速發(fā)展,嵌入式系統(tǒng)異軍突起,已經(jīng)滲透到社會生活的方方面面了。它是集軟件,硬件于一體的高可靠性系統(tǒng)。其最大特點即為可以通過裁減裝卸系統(tǒng)模塊來配置整個平臺所要求的功能。
Windows CE是由微軟公司所開發(fā)的一個嵌入式操作系統(tǒng),它與Windows平臺的編程接口有很強(qiáng)的兼容性。其平臺開發(fā)工具Platform Builder是一個完全集成的開發(fā)環(huán)境(IDE)。本項目所涉及的硬件開發(fā)套件 Zylonite Development 裝配有的Xscale芯片處理器Monahans L(PXA300),并配有相關(guān)外設(shè)電路接口(.0,SD/MMC,音頻,以太網(wǎng)口等)及外設(shè)(,KEYPAD,,聽筒,話筒等)。其獨特的結(jié)構(gòu)優(yōu)化能力保證了操作環(huán)境和通用應(yīng)用設(shè)備可以在高頻率和的情況下快速處理任務(wù)。
1、WINCE 下的SD卡驅(qū)動架構(gòu)
Wince 下SD卡驅(qū)動協(xié)議棧組成 :
uHOST硬件底層部分 (主控制端驅(qū)動)SDHC_XXX.DLL
uBUS 中間邏輯命令層 (總線驅(qū)動)SDBUS.DLL
u上層(客戶端驅(qū)動)SDMEMORY.DLL
1.1、主控制端驅(qū)動
主控制端驅(qū)動控制包含主控制器硬件,遵循主控制端驅(qū)動接口,它被用于總線驅(qū)動通信和設(shè)置操作參數(shù)。主控制器驅(qū)動接口提供一個硬件提取層,在總線和主控制端執(zhí)行之間。即:SDHC_XXX.DLL是最底層,因為這層是硬件關(guān)聯(lián)層,因此取名XXX便是為了對應(yīng)的具體的硬件BSP包(如本項目的硬件平臺是ZYLONITE,其硬件供應(yīng)商給的BSP包名即為ZYLONITE,在實際項目中我們便將SDHC_XXX.DLL取代為SDHC_ZYLONITE.DLL),它負(fù)責(zé)具體的發(fā)命令,大多數(shù)情況下都需要修改。
1.2、總線驅(qū)動
總線驅(qū)動作為提取和管理層處于主控制驅(qū)動和客戶端驅(qū)動之間。它包括在SDbus.dll文件。為客戶端驅(qū)動提供了標(biāo)準(zhǔn)的API,允許運(yùn)行在任何的基于windows ce設(shè)備??偩€驅(qū)動將是獨立于應(yīng)用程序和主控制端驅(qū)動,在不同的處理器之間移植,并不需要改動。SDBus.dll是中間層,負(fù)責(zé)整合命令和管理。
1.3、客戶端驅(qū)動
客戶端驅(qū)動和SD客戶端驅(qū)動通信接口允許客戶端驅(qū)動去和SD設(shè)備通信??蛻舳蓑?qū)動接口是有計劃地抽象SD總線物理設(shè)備的執(zhí)行,提供了客戶端驅(qū)動最大的彈性??蛻舳蓑?qū)動接口允許客戶端驅(qū)動去衡量一個單一的,同步的訪問存儲卡驅(qū)動使用一個線程,異步通信設(shè)備驅(qū)動。SDMemory.dll是最高層,類似于應(yīng)用層。
2.立足微軟SD卡協(xié)議棧開發(fā)Zylonite 的BSP包的SD卡驅(qū)動
當(dāng)我們開發(fā)SD卡驅(qū)動時,并詳細(xì)分析比較了Microsoft的SD驅(qū)動架構(gòu)和所提供的BSP內(nèi)的參考SD卡驅(qū)動以后,可以得出如下結(jié)論:
針對主控制端驅(qū)動(SDHC_XXX.DLL):因為這一層是直接操作硬件的一層,所以大多數(shù)情況下都需要修改。修改的內(nèi)容基本為收發(fā)命令部分以及數(shù)據(jù)傳輸和硬件初始化部分.
針對總線驅(qū)動(SDBUS.DLL):因為這一層處于主控制驅(qū)動和客戶端驅(qū)動之間,用于他們之間的通信,SD卡總線請求都放在它里面,微軟提供了非常完備的樣例代碼,所以我們一般都不需要改動,直接調(diào)用它的接口就可以了。
針對客戶端驅(qū)動( SDMEMORY.DLL):因為SDMemory就是所謂的層,類似于應(yīng)用層,它還可用來識別卡的,不同種類的卡,比如sd 等,鑒于我們只需開發(fā)SD卡部分的驅(qū)動,所以也不需要怎么修改了(如果我要開發(fā)SD接口的設(shè)備,那么就得在這層做比較大的改動了)。
Intel所提供的BSP內(nèi)的參考SD卡驅(qū)動自己實現(xiàn)了主控制端驅(qū)動(SDHC_ZYLONITE.DLL),而調(diào)用并保留了總線驅(qū)動(SDBUS.DLL)和客戶端驅(qū)動( SDMEMORY.DLL)。因此結(jié)合具體的硬件設(shè)計(SD卡的等),我們的主要任務(wù)便是利用BSP內(nèi)的SD卡主控制端驅(qū)動代碼,開發(fā)(配置并改進(jìn))我們實際項目內(nèi)的SD卡驅(qū)動。
2.1、Zylonite BSP內(nèi)的SD卡主控制端驅(qū)動概述
SD卡的驅(qū)動程序是以流的形式提供的,而該SD卡主控制端驅(qū)動以sdhc_zylonite.dll 的形式提供,入口在: WINCE500PLATFORMZylonitepubliccspmonahanssdhc
有如下兩個文件:
sdcontrol.c:內(nèi)含一個非常重要的線程---SDControllerISTHandler,主要負(fù)責(zé)卡與控制器的交互,處理控制器接收的消息等,具體的控制和處理函數(shù)均在此文件中。
main.c: SDH(主控制端驅(qū)動)的導(dǎo)出流接口在該文件中實現(xiàn),并包含有主控制端驅(qū)動的(sdhc_zylonite.dll)的入口點。
SD卡硬件初始化及其主控制端驅(qū)動的注冊表信息設(shè)置路徑為:
WINCE500PLATFORMZylonitePlatformZYLONITESRCDRIVERSSDHC
主要文件為:
.c: 主要是在加載SD卡主控制端驅(qū)動時初始化硬件。內(nèi)含一個非常重要的線程---- SDCardDetectIstThread,專門處理SD卡的插拔操作。但是具體的插拔操作也是在Sdcontrol.c文件實現(xiàn)的。