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