yang_zi_jiang
驱动牛犊
驱动牛犊
  • 注册日期2007-06-24
  • 最后登录2009-05-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望30点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
阅读:1985回复:6

u盘返回CSW超时的问题.

楼主#
更多 发布于:2008-02-15 11:33
过程是这样:比如我在CBW包中要传输的数据是4096个,端点缓冲只有64字节,所以要分成64次传输.我看SCSI协议中的发送流程是:发送CBW-发送64次数据-设备返回CSW状态.现在的问题是主机端在发送数据的时间(即64次数据包传送时间)不能太长,否则超时,这是masstorage驱动里面规定的,我没办法避开.当我的设备里面处理write命令累计的时间太长,就会导致还没来得及返回CSW包,主机端已经超时了.请问怎么避开这个问题?
yang_zi_jiang
驱动牛犊
驱动牛犊
  • 注册日期2007-06-24
  • 最后登录2009-05-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望30点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-02-25 11:27
没有人碰见过吗,我见论坛里有提到过这个超时的问题,但都没有说这个问题怎么解决.不太清楚windows 的mass storage 驱动怎么处理的这个过程.或者能通过某个命令返回延时参数?做过的兄弟帮看看吧,给个提示,这个问题我觉得很普遍.
wang397102
驱动牛犊
驱动牛犊
  • 注册日期2007-12-01
  • 最后登录2009-08-21
  • 粉丝1
  • 关注0
  • 积分302分
  • 威望51点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-02-26 22:30
可以在从设备端collect数据,到64k或者一次完成之后再写,不要64bytes就处理,可能是flash擦写时间太长导致timeout
yang_zi_jiang
驱动牛犊
驱动牛犊
  • 注册日期2007-06-24
  • 最后登录2009-05-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望30点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-03-10 08:42
谢谢wang397102.可以肯定是flash擦写时间长造成的,但是我的ram空间有限,最多也就有4k的ram做缓冲区.而且这样超过512字节的写,会不会有这样一个问题?因为windows传输过来的数据,比如DBR,FAT,它们都是512字节的,那么再用4k做缓冲区写一次的话,这4K里面的内容可能不是连续分配在FLASH空间上的,,可能是间断的地址,而且也未必就是和FLASH的擦写地址是对齐的.那么这样4K的缓冲区或者更大的缓冲区有什么意义?
yang_zi_jiang
驱动牛犊
驱动牛犊
  • 注册日期2007-06-24
  • 最后登录2009-05-26
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望30点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-03-10 08:51
由于我的FLASH容量的限制,采用widows格式话后的族的大小也就一个扇区,所以我采用的是512字节即一个扇区处理一次擦写,这样操作一个扇区时在文件稍大点时候就很容易超时.而用4K处理一次擦写的话,上面我说到的问题怎么避开?.
endloop
驱动牛犊
驱动牛犊
  • 注册日期2005-01-19
  • 最后登录2008-12-30
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望13点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-03-10 15:33
我也有同样的问题!!
JJADKT
驱动牛犊
驱动牛犊
  • 注册日期2007-11-30
  • 最后登录2009-05-25
  • 粉丝1
  • 关注0
  • 积分1分
  • 威望46点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-06-16 13:45
期待答案中...
游客

返回顶部