WinCE 5.0下SD卡文件续传的问题

lingd   2008-9-5 21:35 楼主
请教一个关于SD卡文件续传的问题:
在向SD卡写入文件的过程中执行Suspend操作,之后Resume起来能够继续上次未传完的部分。

目前的驱动已经可以实现这个功能,在Suspend的时候会关掉SD的电源,之后在Resume时执行PowerUp时会SetEvent激活
SD Card Detect Thread,在该Thread中首先会执行一次Remove Card的操作,紧接着执行Insert Card的操作,通过
这样的方式来实现续传的功能。

但是目前遇到一个问题:如果以很快的速度进行Suspend/Resume操作多次(设备上有一个Button来控制,按下进入Suspend放开Resume),那么就会发现在最后Resume之后无法进行续传。
原因是SD卡在StorageManager所对应的Store结构被Unmount掉了。对于这个我将PNPUnloadDelay的值改大也没有起到很好的
作用,从Debug信息来看,在StoragerManager将SD卡对应的Store的flag置为Detach之后,没有MountStroe的操作,等最后
一次Resume起来后就直接执行DetachStores了。而在DetachStore之后还会有很多MountStore的动作。

这个问题可以通过在Suspend的时候持续给SD供电来解决,但是这样系统在Sleep时电流太大。所以这种方案无法采用。

请教各位高手有哪位遇到过类似的问题,如何才能较好的解决这个问题。SD卡的驱动不知道能否支持多级的电源管理呢?
我目前使用的SD驱动的Bus,Client层驱动是使用的MS结构。

回复评论 (12)

SD卡的插入动作,一般响应比较慢,很快速度Suspend/Resume会有问题的。

关键是系统sleep了,就无法进行操作;若不Sleep就会耗电。不只是SD卡的电源管理!
点赞  2008-9-6 23:08
那么这样看来就没有办法了吗?有没有什么方法可以解决这个问题呢?
点赞  2008-9-7 11:33

学习一下。
点赞  2008-9-7 12:10
你对时间的要求很高吗?也就是说resume起来以后,一定要马上开始续传吗?如果是的话,就比较麻烦,如果不是,还是有办法解决的,对吧。
点赞  2008-9-8 10:25
引用: 引用 2 楼 gsymichael 的回复:
那么这样看来就没有办法了吗?有没有什么方法可以解决这个问题呢?


看你对时间的具体要求,能解决,只是会慢一些。
点赞  2008-9-8 13:20
引用: 引用 4 楼 yashi 的回复:
你对时间的要求很高吗?也就是说resume起来以后,一定要马上开始续传吗?如果是的话,就比较麻烦,如果不是,还是有办法解决的,对吧。


如果说对于时间没有太高要求的话可以通过什么方式解决呢?能具体说一下吗?
点赞  2008-9-11 15:36
yashi和91program ,你们两位高手能大概给我说一下可以通过什么方式解决这个问题呢?
点赞  2008-9-11 23:59
SD卡? 我们这边都没有用到~ 学习一下~
点赞  2008-9-12 14:35
Up
点赞  2008-9-14 19:50
一般做产品,都会SD卡拔插遇到这个问题,但不是LZ所谓的断点续传问题。

在SD卡拔出时,做下必要的记录
确定SD卡插入时,继续以前没有完成的工作
点赞  2008-9-14 20:44
在CE的SDBUS架构下,做到此点并不困难:
1 在SD Host Controller驱动的power down时调用SDHCDPowerUpDown(pHostContext, FALSE, TRUE, 0); 注意第三个参数必须为TRUE,表明是需要持续供电的。
2 suspend时 把SD的寄存器保存,
3 resume回来重新赋值SD寄存器

当然要去掉那个card remove的动作,另外,SD卡并不会消耗多少电,如果一定要省这部分的话,可以硬件上断电,一样没问题
点赞  2008-9-16 21:01
mark
点赞  2010-3-22 14:55
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复