弱弱的问一下:在wince5.0中如何实现对SD卡的驱动?
在wince5.0中如何实现对SD卡的驱动,是不是要以下步骤:
1.在WINCE 项目中添加SD 卡的相关的组建,例如:
CATALOG->device drivers->SDIO->SDMemory
CATALOG->device drivers->SDIO->SDIO Host->Samsung 2410 SDIO Host
CATALOG->device drivers-> Storage Devices ->Storage Devices ->Secure Digital/Multimedia Card (SD/MMC)等
2.添加文件到 PLATFORM.BIB 中.
; SD BUS driver
SDBusDriver.dll $(_FLATRELEASEDIR)\SDBusDriver.dll NK SH
; SD host
SDCSDCard.DLL $(_FLATRELEASEDIR)\SDCSDCard.DLL NK SH
SDMemory.dll $(_FLATRELEASEDIR)\SDMemory.dll NK SH
3.添加注册表项目:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; charlie, SDIO
; two step load process, the bus driver will perform it''s
; own ActivateDevice call in the Entry point provided
; this way the driver even though it is a Builtin device, it can be unloaded
[HKEY_LOCAL_MACHINE\Drivers\Builtin\SDBusDriver]
"Order"=dword:20
"Dll"="SDBusDriver.dll"
"Entry"="SDBusDriverStartUp"
[HKEY_LOCAL_MACHINE\Drivers\SDCARD\SDBusDriver]
"Order"=dword:20
"Dll"="SDBusDriver.dll"
"Prefix"="SDC"
"ThreadPriority"=dword:64 ; default thread priority for dispatch thread
"RequestListDepth"=dword:30 ; pre-allocated requests
;"ZoneMask"=dword:e01d ; example zone mask
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory]
"Name"="SD Memory Card"
"Folder"="Storage Card"
; "PartitionDriver"="" ; removable storage cannot have partitions
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MMC]
"Name"="MMC Card"
"Folder"="Storage Card"
; "PartitionDriver"="" ; removable storage cannot have partitions
; SD Memory Storage class driver
[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class]
"Dll"="SDMemory.dll"
"Prefix"="DSK"
"FSD"="FATFS.DLL"
"IOCTL"=dword:4 ; DISK_IOCTL_INITIALIZE, sent to driver by DeviceManager
"BlockTransferSize"=dword:40 ; Send no more than 64 blocks of data per bus transfer
;"SingleBlockWrites"=dword:1 ; alternatively force the driver to use single block access
"Profile"="SDMemory"
"IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}",
"{A32942B7-920C-486b-B0E6-92A702A99B35}"
; MMC Storage Class Driver
[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\MMC_Class]
"Dll"="SDMemory.dll"
"Prefix"="DSK"
"FSD"="FATFS.DLL"
"IOCTL"=dword:4 ; DISK_IOCTL_INITIALIZE, sent to driver by DeviceManager
"BlockTransferSize"=dword:40 ; Send no more than 64 blocks of data per bus transfer
;"SingleBlockWrites"=dword:1 ; alternatively force the driver to use single block access
"Profile"="MMC"
"IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}",
"{A32942B7-920C-486b-B0E6-92A702A99B35}"
; setting for SD bus driver to load driver
[HKEY_LOCAL_MACHINE\Drivers\SDCARD\HostControllers\SDSC]
"Dll"="SDCSDCard.dll"
"Prefix"="SDC"
4.系统启动后,SDBus.dll和SDHC_SC2410.dll能在注册表HKEY_LOCAL_MACHINE\Drivers\Active 看到.
这样就基本完成了对SD功能的添加,对么?
但是在PB5.0中,在这个路径下没有这个组件啊:
CATALOG->device drivers-> Storage Devices ->Storage Devices ->Secure Digital/Multimedia Card (SD/MMC)
[img=C:\Documents and Settings\iwillbeback008\桌面\SD卡PB调试截图]\Active33-SDBusDriver.jpg[/img]
你是友善的板子吧。
友善的BSP是4.2的版本,根本没有SD卡驱动源码。
就是三个DLL,你去看看BSP下的file文件夹,有三个DLL的。
直接打包即可。
上面微软的组件一个都不用选。
检测引脚是EINT16,不能改动。
哈哈
引用: 引用 3 楼 gooogleman 的回复:
你是友善的板子吧。
友善的BSP是4.2的版本,根本没有SD卡驱动源码。
就是三个DLL,你去看看BSP下的file文件夹,有三个DLL的。
直接打包即可。
上面微软的组件一个都不用选。
检测引脚是EINT16,不能改动。
哈哈
那按照你说的,就是直接做第二步的:
2.添加文件到 PLATFORM.BIB 中:
; SD BUS driver
SDBusDriver.dll $(_FLATRELEASEDIR)\SDBusDriver.dll NK SH
; SD host
SDCSDCard.DLL $(_FLATRELEASEDIR)\SDCSDCard.DLL NK SH
SDMemory.dll $(_FLATRELEASEDIR)\SDMemory.dll NK SH
这样就可以了么?
我现在按照开头说的方法(除了Secure Digital/Multimedia Card (SD/MMC)这个组件没有添加到工程外),生成的镜像在mini2440上运行,通过PB远程调试工具看到注册表BuildIn下有SDBusDriver项,Active项下的第33、34和37项分别是SDBusDriver、SDSC和SDMemory_Class这三项。
不知道,这样说明初始化是不是对了?
在这种情况下,插入SD卡后仍然没有任何反应。
现在,打算弄个完整的三星官方的S3C2440BSP for CE5.0来从头开始学习SD卡的驱动算了。
真是郁闷
引用: 引用 4 楼 gooogleman 的回复:
你赶紧得分啊,不然以后你就没有分可得了。
]
呵呵,过来接点分
引用: 引用 6 楼 iwillbeback008 的回复:
2.添加文件到 PLATFORM.BIB 中:
; SD BUS driver
SDBusDriver.dll $(_FLATRELEASEDIR)\SDBusDriver.dll NK SH
; SD host
SDCSDCard.DLL $(_FLATRELEASEDIR)\SDCSDCard.DLL NK SH
SDMemory.dll $(_FLATRELEASEDIR)\SDMemory.dll NK SH
这样就可以了么?
我现在按照开头说的方法(除了Secure Digital/Multimedia Card (SD/MMC)这个组件没有添加到工程外),生成的镜像在mini2440上运行,通过PB远程调试工具看到注册表BuildIn下有SDBusDriver项,Active项下的第33、34和37项分别是SDBusDriver、SDSC和SDMemory_Class这三项。
不知道,这样说明初始化是不是对了?
在这种情况下,插入SD卡后仍然没有任何反应。
sd 卡的注册表加了没有?
还有文件系统等呢?
SDBusDriver、SDSC和SDMemory_Class这三项——有这三项说明SD已经加载了,只是盘符没有显示,不知道你哪里出了问题。
引用9楼的大哥:
◎“sd 卡的注册表加了没有?”
你说的注册表,应该是以下的吧:
3.添加注册表项目:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; charlie, SDIO
; two step load process, the bus driver will perform it''s
; own ActivateDevice call in the Entry point provided
; this way the driver even though it is a Builtin device, it can be unloaded
[HKEY_LOCAL_MACHINE\Drivers\Builtin\SDBusDriver]
"Order"=dword:20
"Dll"="SDBusDriver.dll"
"Entry"="SDBusDriverStartUp"
[HKEY_LOCAL_MACHINE\Drivers\SDCARD\SDBusDriver]
"Order"=dword:20
"Dll"="SDBusDriver.dll"
"Prefix"="SDC"
"ThreadPriority"=dword:64 ; default thread priority for dispatch thread
"RequestListDepth"=dword:30 ; pre-allocated requests
;"ZoneMask"=dword:e01d ; example zone mask
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory]
"Name"="SD Memory Card"
"Folder"="Storage Card"
; "PartitionDriver"="" ; removable storage cannot have partitions
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MMC]
"Name"="MMC Card"
"Folder"="Storage Card"
; "PartitionDriver"="" ; removable storage cannot have partitions
; SD Memory Storage class driver
[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class]
"Dll"="SDMemory.dll"
"Prefix"="DSK"
"FSD"="FATFS.DLL"
"IOCTL"=dword:4 ; DISK_IOCTL_INITIALIZE, sent to driver by DeviceManager
"BlockTransferSize"=dword:40 ; Send no more than 64 blocks of data per bus transfer
;"SingleBlockWrites"=dword:1 ; alternatively force the driver to use single block access
"Profile"="SDMemory"
"IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}",
"{A32942B7-920C-486b-B0E6-92A702A99B35}"
; MMC Storage Class Driver
[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\MMC_Class]
"Dll"="SDMemory.dll"
"Prefix"="DSK"
"FSD"="FATFS.DLL"
"IOCTL"=dword:4 ; DISK_IOCTL_INITIALIZE, sent to driver by DeviceManager
"BlockTransferSize"=dword:40 ; Send no more than 64 blocks of data per bus transfer
;"SingleBlockWrites"=dword:1 ; alternatively force the driver to use single block access
"Profile"="MMC"
"IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}",
"{A32942B7-920C-486b-B0E6-92A702A99B35}"
; setting for SD bus driver to load driver
[HKEY_LOCAL_MACHINE\Drivers\SDCARD\HostControllers\SDSC]
"Dll"="SDCSDCard.dll"
"Prefix"="SDC"
----------------
以上的,是系统自动生成的,我确认已经在注册表里头有了。
◎“还有文件系统等呢? ”
那这个是指“FAT文件系统组件”吧?
这个我也添加了。
引用: 引用 7 楼 iwillbeback008 的回复:
现在,打算弄个完整的三星官方的S3C2440BSP for CE5.0来从头开始学习SD卡的驱动算了。
真是郁闷
现在看到三星原版的BSP下,已经没有这三个SDBusDriver.dll、SDCSDCard.dLL和SDMemory.dll文件了。
不过听高手说,这个原版的BSP是默认支持SD卡的,只要在定制工程时加入SD卡相关的支持组件,就可以了。
看来自己再试试了,要从原版BSP做,自己又要先做LCD的移植了,哎,真是有趣啊!
^_^/^_^/o_o
引用: 引用楼主 iwillbeback008 的帖子:
在wince5.0中如何实现对SD卡的驱动,是不是要以下步骤:
1.在WINCE 项目中添加SD 卡的相关的组建,例如:
CATALOG->device drivers->SDIO->SDMemory
CATALOG->device drivers->SDIO->SDIO Host->Samsung 2410 SDIO Host
4.系统启动后,SDBus.dll和SDHC_SC2410.dll能在注册表HKEY_LOCAL_MACHINE\Drivers\Active 看到.
这样就基本完成了对SD功能的添加,对么?
而你在Bib文件里加的是这两个:
SDBusDriver.dll $(_FLATRELEASEDIR)\SDBusDriver.dll NK SH
SDCSDCard.DLL $(_FLATRELEASEDIR)\SDCSDCard.DLL NK SH
是啊,但是我在给的BSP包中找不到SDBus.dll和SDHC_SC2410.dll啊!
这么这么郁闷啊
SDBus.dll可以在PB里生成出来的
只要选上Device Driver->SDIO->SD Memory就可以
而且跟SDBus和SDMemory相关的注册表项和Bib项都不需要在Platform.bib里添加,系统都会自动生成出来
到网上下一个支持SD卡的BSP包是最快的方法,然后在WINCE里面把SD卡的组件加进去就OK了
这样啊,14/15楼的答复,我比较满意,现在我正在自己移植三星官方的BSP,到时会试试.
引用: 引用 3 楼 gooogleman 的回复:
你是友善的板子吧。
友善的BSP是4.2的版本,根本没有SD卡驱动源码。
就是三个DLL,你去看看BSP下的file文件夹,有三个DLL的。
直接打包即可。
上面微软的组件一个都不用选。
检测引脚是EINT16,不能改动。
哈哈
记号,学习。
引用: 引用 14 楼 hzdysymbol 的回复:
SDBus.dll可以在PB里生成出来的
只要选上Device Driver->SDIO->SD Memory就可以
而且跟SDBus和SDMemory相关的注册表项和Bib项都不需要在Platform.bib里添加,系统都会自动生成出来
现在我使用的三星官方的S3C2440BSP for CE5.0已经支持SD卡了,只要在构建系统时添加相关组件就行:SD Memory了!