打印

关于mass storage的BULK OUT的奇怪现象,求解答

[复制链接]
1674|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bmebob_zhao|  楼主 | 2012-9-19 20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数据OUT方式为:PC->MCU ram->SD卡。由于资源限制,ram不能开太大,所以给PC过来的数据开的ram最大是2k,而传很大数据的时候(M以上)win7会一次发64k的数据,所以只能每次拿2k放ram,等SDIO写完2k的数据后再通过USB从上位机取,直到发完这64k数据后再发csw。传输速度最大为170k左右。

我遇到的问题是:传大数据时候,有时候出现传到一段时间,没传完,进度条就不走了,然后发现PC发过来的CBW的datalength域和对应scsi命令一直都为0,就好像数据已经传完了一样。但是PC机的进度条一直停在那里。

我自己觉得的可能性:因为MCU往SD卡写的时候是DMA在搬数据,而DMA搬数据的速度太慢,拖了整个速度,使得PC老收到NAK,如果超过了一定时间(spec里貌似有这个值),就会取消IRP。我观察那个进度条是好几秒(但不超过10s)往前走一次。

请教各种大神,到底是啥情况,费解啊?

相关帖子

沙发
insignal| | 2012-9-21 08:57 | 只看该作者
本帖最后由 insignal 于 2012-9-21 09:02 编辑

“scsi命令一直都为0” 这是test unit ready的命令
你都把csw返回上去了 pc当然认为数据已经正常传输完了
查查mcu的固件

这个170K有点太慢了  你是往sd卡里写?sd卡的速度应该是很快的,应该是固件设计问题导致速度这么慢
2K buffer已经可以了,不小了。u盘都是边从usb接收数据,边写入nand flash或者sd卡,没有谁把64K都接收完再写的,速度慢,效率低,对mcu的ram要求也高

使用特权

评论回复
板凳
bmebob_zhao|  楼主 | 2012-9-21 09:55 | 只看该作者
可能是我没说清楚,我传的是几十M的数据,64k经过一次CBW->data out->CSW,当然是传完了,但是后面还有更多的数据,主机应该继续发,但是问题是主机就像你说的那样发test unit ready了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:IC公司底层搬砖工

0

主题

12

帖子

0

粉丝