benage
驱动牛犊
驱动牛犊
  • 注册日期2004-03-05
  • 最后登录2006-12-25
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1924回复:10

关于CF存储卡的驱动问题(高分)

楼主#
更多 发布于:2004-09-16 09:12
sandisk旧版,128M。
pc104模块,C400,wince.net 4.2。
写一个4M的文件居然要24秒,其间系统停止响应。读同一个文件也要5秒左右。不可接受。

查网上的测试资料,这块卡的写入速率约0.8MB/秒。不应该如此慢法。
有朋友说,WinCE带的CF驱动就是慢,建议我自己编驱动或寻找第三方驱动。

请指点,如何入手编写CF驱动(本人有一些编写驱动的经验),或者如何找到好的CF驱动。
author22
驱动小牛
驱动小牛
  • 注册日期2003-08-20
  • 最后登录2018-04-07
  • 粉丝0
  • 关注0
  • 积分391分
  • 威望85点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-16 09:25
不会吧。。。会这么慢!!!
我用的是wince4.0。ppc2003的系统! 掌上电脑是 arm的内核
用evc4.0 开发的程序。我觉得读写 cf 卡的 速度 很快。就是不清楚 你的 pc104 是什么 意思?
我的Vc代码仓库:[url]http://sh.b211.net[/url]
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-16 13:22
驱动中你看看读写那部分它是不是按页操作的,如果按字节操作就会重复发读写命令,时间增加很多

对于读写部分代码用汇编写,用c写的就看编译器了,我不知道pc104(我不知道他的指令集是什么)有没有块传送指令,如果有用这个可以达到burst的效果,也可以加快速度。
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-16 13:27
对了,如果是nand flash的话,块传送指令不行,但是可以紧挨着放串行的多个读来达到burst效果。
根据地的兄弟们,团结就是力量
benage
驱动牛犊
驱动牛犊
  • 注册日期2004-03-05
  • 最后登录2006-12-25
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-16 15:26
PC104就是ISA,时钟高一些,能设置到PCICLK/2,约16M。
C400就是80x86指令集吧。
C的memcpy不知道是怎么实现的,感觉和循环字读写速度差别不大。

我找到了那段代码(diskio.c),确实是按字读写的,不知道是不是端口io。我对CF的机理不熟,感觉用汇编改写的信心不足。

有没有更简洁可靠的办法?
此外,用现有驱动,换一块CF卡,写入速度达到3MB以上的,能提高多少速度?
author22
驱动小牛
驱动小牛
  • 注册日期2003-08-20
  • 最后登录2018-04-07
  • 粉丝0
  • 关注0
  • 积分391分
  • 威望85点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-16 19:52
哦,你是 用 pc 104 ,也就是 工控机 来 读写 cf 卡 。。。 这个
可以 用memcpy来 实现的呀 。 我们的 就是,不过 速度 要求 没有 你的 那么高。 按你那么算的话,一块 128M 的 cf卡 写满数据也不要2分钟 。。。 既然 这样的话,还用cf卡干什么呢? 我们的
的写速度也是 几百k  每秒!!!读快一点,不过 没有 具体测试过,不过 pc104 的时钟 是 40M。。 也是8086指令,c语言 完成的代码!!!
我的Vc代码仓库:[url]http://sh.b211.net[/url]
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-16 20:50
要不还来试试吧:)

还有时钟不高,你把读写的等待周期设短些看有没有效果
根据地的兄弟们,团结就是力量
benage
驱动牛犊
驱动牛犊
  • 注册日期2004-03-05
  • 最后登录2006-12-25
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-17 08:49
我用的PC104模块是自带CF接口的,虽然这个模块只引出了PC104总线,但芯片组是 VIA VT8606 North Bridge, VIA VT82C686B,我想模块内部是有PCI的,比如模块有DMA33的IDE,有USB,有Realtek 8100BL 10/100M,我想都应该连PCI的。
CF卡似乎就是连在IDE2上,BIOS里把它作为一个普通硬盘。

To wxl_50685330,"读写的等待周期",在BIOS里设置吗?怎么设?对别的功能单元有没有影响?

To author22: 你们用的什么BSP?是WinCE自带的CF驱动吗?自己编的相关代码吗?
author22
驱动小牛
驱动小牛
  • 注册日期2003-08-20
  • 最后登录2018-04-07
  • 粉丝0
  • 关注0
  • 积分391分
  • 威望85点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-17 09:20
我用的是win CE 自带的 驱动。。。和你 不一样。。 我用的 win CE 是 pda 。 操作系统是 基于win ce.net 的 pocket pc 2003  的掌上电脑。 但是 pc104 的是 dos 操作系统。。。并且 没有网卡和usb等模块。这个我参与,具体的我不清楚。。。
我的Vc代码仓库:[url]http://sh.b211.net[/url]
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-09-17 13:08
今天测试了一下:

我用的NAND FLASH是三星的k9k1208,64MB
编程4M,20秒,但是包括写之前擦除每一页,每写一页再读出和原始数据比较;还包括快管理附加动作(当然我看了一下没有做快替换动作,也就是按时间最短的方式工作)。所有代码是用C写的,没有做块传送优化(用的Arm的片子,可以用LDM/STM提高速度)。

做成驱动并优化后做个保守估计吧,15秒,最差应该有吧。


由于我的nand flash是直接挂在cpu总线上的,所以可以控制这个地址范围的读写等待,我不太清楚ide控制器的工作,他的控制寄存器应该可以调整时序,但是从你说的结构来看,经过了Ide控制器后要控制速度好像不那么直接。
根据地的兄弟们,团结就是力量
microsun
论坛版主
论坛版主
  • 注册日期2002-11-11
  • 最后登录2014-07-18
  • 粉丝0
  • 关注0
  • 积分1052分
  • 威望1159点
  • 贡献值0点
  • 好评度848点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-10-10 09:22
各位弟兄们,好像没有那么复杂吧?如果你用的是CE自身的驱动程序,又是RELEASE版的。我想你换一块卡也许就会那样了,可能是卡有问题。CF卡只是一个IO型外设,读写是只能对一个端口操作,而不能memory了,所以换个卡试一下吧。如还有问题,请跟贴
学海无涯
游客

返回顶部