Architecture
WINCE下的SD(Secure Digital)卡驱动的架构包括三个部分: 总线驱动(sdbus.dll |SYSGEN_SD_BUS),主控制端驱动(sdhc.dll | SYSGEN_SDHC_STANDARD)和客户端驱动(sdmemory.dll | SYSGEN_SD_MEMORY).
总线驱动是位于客户端驱动和主控制端驱动的抽象管理层,它提供了一组标准的API给客户端驱动使用。总线驱动是不依赖于应用程序和主控制端的,是跨平台的。
主控制端驱动控制硬件控制器,并提供接口给总线驱动用来和硬件通讯以及设置参数。它提供了一个位于总线驱动和主控制器应用的硬件抽象层.
客户端驱动通过SD客户端驱动接口和SD设备通讯,客户端驱动接口被设计成SD总线的物理应用抽象层。客户端驱动接口允许客户端驱动将一个简单的,同步的存取设备驱动模拟成完全多线程的,异步的通讯设备驱动。
总线驱动sdbus.dll
WM提供了对SD卡协议2.0的支持,该协议的特点就是支持高容量和高读写速率,支持最大容量为32G的SD卡,最高读写速率为25MB/Sec, 同时还支持2.0还提供了命令模式和高速接口模式之间的相互切换的功能。
WM6.X是基于WINCE500的,WINCE500默认支持1.1的sd卡协议。SD1.1支持的SD的最大容量为2G,读写速率为12.5MB/sec,所以为了支持大容量的SD卡,我们必须进行扩展。
微软官方提供了官方源码,存放目录如下:
Sourcecode for the SD bus can befound in the following directories:
SD1.1 bus -%_WINCEROOT%\Public\Common\OAK\Drivers\SDCard\SDBusdriver
SD2.0 bus -%_WINCEROOT%\Public\Common\OAK\Drivers\SDCard\SDBus
实现
SMDK6410.bat------WM613\PLATFORM\SMDK6410\
set IMGSDBUS2=1
COMMON.bib------WM613\PUBLIC\COMMON\OAK\FILES\
#if definedIMGSDBUS2
; @CESYSGEN IFCE_MODULES_SDBUS2
sdbus.dll $(_FLATRELEASEDIR)\sdbus2.dll NK SH
; @CESYSGEN ENDIF CE_MODULES_SDBUS2
#else
; @CESYSGEN IFCE_MODULES_SDBUS
sdbus.dll $(_FLATRELEASEDIR)\sdbus.dll NK SH
; @CESYSGEN ENDIFCE_MODULES_SDBUS
#endif
这里如果定义了IMGSDBUS2,就会将sdbus2.dll,重命名为sdbus.dll并打包进NK中。那么个sdbus2.dll在那里呢?
Sources------ SMDK6410\Src\Drivers\HSMMC\SDBus\
TARGETNAME=SDBus2
TARGETTYPE=DYNLINK
DLLENTRY=DllEntry
HotPlug
s3c6410_hsmmc_ch0.cpp------PLATFORM\SMDK6410\Src\Drivers\HSMMC\HSMMC_ch0\s3c6410_hsmmc_ch0_drv\
SD0_nCD对应于引脚GPG6,设置为功能口MMC CDn0即可。
SD0_nWP对应于引脚GPL13,设置为EINT21即可。
Please refer to schema for more details.
RebuildKernel
a. 打开Base OS - WPC SMDK6410Retail.lnk
b. cdPlatform/smdk6410
c. build–c
d. makeimg