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





