SD卡问题:将CE5的SD驱动Porting到CE6以后,SD卡的访问速度只有CE5的三分之一

老夏Max 2009-02-19 09:47:13
加精
SD卡问题:将CE5的SD驱动Porting到CE6以后,SD卡的访问速度只有CE5的三分之一。
在CE5下,读大概是6MB/Sec, 写大概是4.8MB/Sec.
在CE6下,读大概是2.4MB/Sec, 写大概是500KB/Sec.

请问大家遇到过这种情况吗?可能原因是什么?
有Porting到CE6的,或者是工作在CE6下的,请问大家的SD卡访问速度是多少?

还有就是在CE6下的SD卡驱动的MDD部分,BusRequestHandler中添加了一个Physical Buffer,请问这个东东如何使用的?有用过的吗?
...全文
1038 55 打赏 收藏 转发到动态 举报
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
简单并快乐着 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 的回复:]

已经查明原因了。WinCE下的Cache功能导致这个问题,在文件读写的时候关闭Cache就可以了。
CreateFile的时候使用FILE_FLAG_NO_BUFFERING。
[/Quote]

没想到以前的老帖还这么值得学习,不错,不错。
xihuanlili 2011-06-22
  • 打赏
  • 举报
回复
刚刚好,学习了!
znaly 2010-07-27
  • 打赏
  • 举报
回复
学习......看看
老夏Max 2010-04-11
  • 打赏
  • 举报
回复
已经查明原因了。WinCE下的Cache功能导致这个问题,在文件读写的时候关闭Cache就可以了。
CreateFile的时候使用FILE_FLAG_NO_BUFFERING。
macklau 2010-03-03
  • 打赏
  • 举报
回复
正在开发wince上的应用,学习一下
suwyhoho 2009-08-10
  • 打赏
  • 举报
回复
mark
jamesbond05 2009-08-09
  • 打赏
  • 举报
回复
我遇到的问题是我的SD卡在上电后经常被格式化 望大侠指教
LanceJin 2009-08-09
  • 打赏
  • 举报
回复
UP
daifeijin 2009-06-16
  • 打赏
  • 举报
回复
学习中……,帮顶。
wenzhong8551 2009-06-16
  • 打赏
  • 举报
回复
学习学习,我在ce5下读取SD卡时,用32768byte的Buf[]要比用8192的快很多,SD卡是Fat32格式的。
chenjnh 2009-04-03
  • 打赏
  • 举报
回复
学习
kua1024 2009-04-02
  • 打赏
  • 举报
回复
请教下 5.0和6.0的文件系统 有什么区别啊。。。我在做5.0移植到6.0 6.0的SD就是不好用~
gsymichael 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 Johnsen2009 的回复:]
我们的sd卡读17Mbyte,写8M
[/Quote]
好快的速度啊,用的啥驱动?
gsymichael 2009-03-06
  • 打赏
  • 举报
回复
学习了
老夏Max 2009-03-06
  • 打赏
  • 举报
回复
下面的Log是debug时候得到的调用过程:
0xd405de9c SDMEMORY!SMC_IOControl(unsigned long 0xd3f20f90, unsigned long 0x00075c08, unsigned char * 0xd3b78190, unsigned long 0x0000001c, unsigned char * 0x00000000, unsigned long 0x00000000, unsigned long * 0xd405e764) sdmemmain.cpp line 584
0xd405e070 DEVMGR!DM_DevDeviceIoControl(fsopendev_t * 0x00000000, unsigned long 0x00000000, void * 0xd405e764, unsigned long 0x00000000, void * 0x00000000, unsigned long 0x8c079bc0, unsigned long * 0x000005c9, _OVERLAPPED * 0x8ef79e50) devfile.c line 453 + 76 bytes
0xd405e0d8 KERNEL!MDCallKernelHAPI + 60 bytes
0xd405e128 KERNEL!NKHandleCall(unsigned long 0xd3b79da0, _DHCALL_STRUCT * 0xd405e138) apicall.c line 1983 + 40 bytes
0xd405e1a4 K.COREDLL!DirectHandleCall(unsigned long 0x00000007) coredll.cpp line 73 + 24 bytes
0xd405e1cc K.COREDLL!xxx_DeviceIoControl(void * 0x05c90003, unsigned long 0x00075c08, void * 0xd3b78190, unsigned long 0x0000001c, void * 0x00000000, unsigned long 0x00000000, unsigned long * 0xd405e764, _OVERLAPPED * 0x00000000) twinbase.cpp line 32 + 84 bytes
0xd405e22c MSPART!DoDiskIoControl(tagDriverState * 0xd3f22250, unsigned long 0x00075c08, void * 0xd3b78190, unsigned long 0x0000001c, void * 0x00000000, unsigned long 0x00000000, unsigned long * 0xd405e764, _OVERLAPPED * 0x00000000) part.h line 148 + 96 bytes
0xd405e270 MSPART!ReadPartition(unsigned long 0xd3f224f0, unsigned char * 0xd3b78190, unsigned long 0x0000001c, unsigned char * 0x00000000, unsigned long 0x00000000, unsigned long * 0xd405e764) part.cpp line 619 + 64 bytes
0xd405e2f0 MSPART!PD_DeviceIoControl(unsigned long 0xd3f224f0, unsigned long 0x00075c08, unsigned char * 0xd3b78190, unsigned long 0x0000001c, unsigned char * 0x00000000, unsigned long 0x00000000, unsigned long * 0xd405e764) part.cpp line 791 + 36 bytes
0xd405e398 FSDMGR!PartitionDriver_t::DeviceIoControl(unsigned long 0x00000000, unsigned long 0xd405e764, void * 0xc0d4b070, unsigned long 0x00000001, void * 0xd405e3c0, unsigned long 0xc0d4ade4, unsigned long * 0xd3f212d0) partition.hpp line 277 + 60 bytes
0xd405e3e8 FSDMGR!PartitionDisk_t::DiskIoControl(unsigned long 0x00075c08, void * 0xd3b78190, unsigned long 0x0000001c, void * 0x00000000, unsigned long 0x00000000, unsigned long * 0xd405e764, _OVERLAPPED * 0x00000000) partition.cpp line 216 + 68 bytes
0xd405e43c FSDMGR!StoreDisk_t::StoreIoControl(PartitionDisk_t * 0xd3f22590, unsigned long 0x00075c08, void * 0xd3b78190, unsigned long 0x0000001c, void * 0x00000000, unsigned long 0x00000000, unsigned long * 0xd405e764) storedisk.cpp line 1242 + 72 bytes
0xd405e498 FSDMGR!STG_DeviceIoControl(StoreHandle_t * 0x0000001c, unsigned long 0x00000000, void * 0x00000000, unsigned long 0xd405e764, void * 0xd3b78190, unsigned long 0x00000001, unsigned long * 0x00000000, _OVERLAPPED * 0x8fca08b8) stgapi.cpp line 697 + 68 bytes
0xd405e590 KERNEL!MDCallKernelHAPI + 60 bytes
0xd405e5e0 KERNEL!NKHandleCall(unsigned long 0x00000001, _DHCALL_STRUCT * 0x00000000) apicall.c line 1983 + 40 bytes
0xd405e65c K.COREDLL!DirectHandleCall(unsigned long 0x00000007) coredll.cpp line 73 + 24 bytes
0xd405e684 K.COREDLL!xxx_DeviceIoControl(void * 0x05cc0003, unsigned long 0x00075c08, void * 0xd3b78190, unsigned long 0x0000001c, void * 0x00000000, unsigned long 0x00000000, unsigned long * 0xd405e764, _OVERLAPPED * 0x00000000) twinbase.cpp line 32 + 84 bytes
0xd405e6e4 FSDMGR!FSDMGR_DiskIoControl(LogicalDisk_t * 0xd3f22590, unsigned long 0x00075c08, void * 0xd3b78190, unsigned long 0x0000001c, void * 0x00000000, unsigned long 0x00000000, unsigned long * 0xd405e764, _OVERLAPPED * 0x00000000) fsdmgrapi.cpp line 623 + 52 bytes
0xd405e748 FSDMGR!ReadWriteDiskEx(_FSD_SCATTER_GATHER_INFO * 0xd405e7a0, _FSD_SCATTER_GATHER_RESULTS * 0x00000000, unsigned long 0x00075c08) fsdmgrapi.cpp line 748 + 76 bytes
0xd405e7a0 FSDMGR!FSDMGR_ReadDisk(LogicalDisk_t * 0xd3f22590, unsigned long 0x00484dc8, unsigned long 0x00000008, unsigned char * 0xd4061000, unsigned long 0x00001000) fsdmgrapi.cpp line 788 + 16 bytes
0xd405e7e8 EXFAT!Disk::ReadWriteDisk(unsigned long 0x00000009, unsigned long 0x00484dc8, unsigned long 0x00000008, unsigned char * 0xd4061000) disk.cpp line 179 + 48 bytes
0xd405e83c EXFAT!Volume::ReadVolume(unsigned long 0x00484dc8, unsigned long 0x00000008, void * 0xd4061000, unsigned long 0x00000009) volume.cpp line 1370 + 36 bytes
0xd405e864 EXFAT!Stream::ReadStreamData(unsigned __int64 0xd405e888d405e88c, void * 0x00000000, unsigned long 0x00000000, unsigned long 0x00000000, unsigned long * 0x00001000) stream.cpp line 324 + 36 bytes
0xd405e928 EXFAT!File::ReadFileData(unsigned __int64 0x0000000000001000, void * 0xd4061000, unsigned long 0x00001000, unsigned long * 0xd405ea70) file.cpp line 896 + 52 bytes
0xd405ea2c EXFAT!File::ReadFile(unsigned __int64 0x0000000000001000, void * 0xd4061000, unsigned long 0x00001000, unsigned long * 0xd405ea70) file.cpp line 134 + 36 bytes
0xd405ea60 EXFAT!FAT_ReadFileWithSeek(FileHandle * 0xd0675a90, void * 0xd4061000, unsigned long 0x00001000, unsigned long * 0xd405ec08, _OVERLAPPED * 0x00000000, unsigned long 0x00001000, unsigned long 0x00000000) api.cpp line 206 + 44 bytes
0xd405eab0 CACHEFILT!FilterHook_t::ReadFileWithSeek(unsigned long 0x00001000, void * 0x00000000, unsigned long 0x00000000, unsigned long * 0x00000040, _OVERLAPPED * 0xae1c2000, unsigned long 0x054f0006, unsigned long 0xd0ab0afc) fsdmgr.h line 515 + 60 bytes
0xd405eafc CACHEFILT!FSSharedFileMap_t::UncachedReadWriteWithSeek(void * 0xd4061000, unsigned long 0x00001000, unsigned long * 0xd405ec08, unsigned long 0x00001000, unsigned long 0x00000000, int 0x00000000) fssharedfilemap_uncached.cpp line 114 + 68 bytes
0xd405eba8 CACHEFILT!FCFILT_ReadWriteData(unsigned long 0xd0ab0c10, unsigned char * 0xd4061000, unsigned long 0x00001000, unsigned long * 0xd405ec08, const _ULARGE_INTEGER * 0xd405eccc, int 0x00000000) fssharedfilemap_cached.cpp line 152 + 56 bytes
0xd405ebec KERNEL!MAPPageInPage(_FSMAP * 0x8e0023a8, _ULARGE_INTEGER * 0xd405eccc, unsigned char * 0xd4061000) mapfile.c line 1599 + 56 bytes
0xd405ecac KERNEL!PageFromMapper(_PROCESS * 0x8c863bc0, unsigned long 0xd2a71000, int 0x00000000) mapfile.c line 1762 + 16 bytes
0xd405ed5c KERNEL!VMProcessPageFault(_PROCESS * 0x8c863bc0, unsigned long 0xd2a71a00, int 0x00000000) vm.c line 1207 + 24 bytes
0xd405edcc KERNEL!MDHandleHardwareException(_CALLSTACK * 0xd405f08c, _EXCEPTION_RECORD * 0xd405f03c, _CONTEXT * 0xd405ef48, unsigned long * 0xd405ee78) mdarm.c line 824 + 36 bytes
0xd405ee5c KERNEL!ExceptionDispatch(_EXCEPTION_RECORD * 0xd405f03c, _CONTEXT * 0xd405ef48) exdsptch.c line 930 + 20 bytes
0xd405ef48 KERNEL!CaptureContext + 44 bytes

=====================================================================================================================
从上面的调用过程中可以看出在:MAPPageInPage中使用了每次读取一个Page的操作,即一次4K。
这个操作就造成了SD卡的读取速度比较慢。
老夏Max 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 Johnsen2009 的回复:]
我们的sd卡读17Mbyte,写8M
[/Quote]

请问你们使用的是什么硬件平台?是WinCE6.0下吗?
老夏Max 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 lclichao2006 的回复:]
你是怎么样获取SD卡的读写速度呢
[/Quote]

一个自己写的测试程序。就是CreateFile,然后WriteFile,然后ReadFile。
使用GetTickCount获取时间长度就可以知道速度了。
xugh 2009-03-04
  • 打赏
  • 举报
回复
正在开发wince上的应用,学习一下
jxsr713 2009-03-03
  • 打赏
  • 举报
回复
你是怎么样获取SD卡的读写速度呢
Johnsen2009 2009-03-03
  • 打赏
  • 举报
回复
我们的sd卡读17Mbyte,写8M
加载更多回复(33)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧