阅读:1138回复:0
SL811HS访问u盘的怪现象
以read10命令为例,SL811HS 发送CBW后,按道理应该从Bulk In传输数据回来,但我遇到的情况总是stall。参考一些网上的资料,后来我使用以下面的办法把问题解决了:发送CBW,如果Bulk In 给stall,就给Control Pipe发MassStorageReset,ClearFeature(BulkInEndpoint),ClearFeature(BulkOutEndpoint),其实就是ResetRecovery,不要理会MassStorageReset及ClearFeature是否被设备接受。然后再重新发送read10的CBW,结果就从BulkIn返回数据了,紧接着CSW也对了。write10命令也类似处理,对ReadCapacity和ReadFormatCapacity也类似处理。我还发现不同U盘的反应有很大差别,我的部分u盘读写Sector成功率是100%,有些就不是,真是奇怪啊,我怀疑与SL811HS自动生成SOF有关。另外我还发现有的u盘对ReadFormatCapacity的CBW接受后,虽然返回了部分数据,但轮到CSW时就stall了,真是气死人。不过大部分u盘都支持ReadCapacity,如果一次不成功,就ResetRecovery后重试,一般会成功的。我的程序枚举u盘之后,ReadCapacity甚至都免了,一般block都是512字节。反正read10和write10都能正常工作就行了。我在SL811HS也是伤透了脑筋,最后总算把他搞定了,虽然不是100%,目前我找到的u盘都能访问了。欢迎大家分享经验,我的e-mail: yjdong@kainuo.com
|
|