求助,关于STM32下自定义USB批量传输

[复制链接]
3963|7
 楼主| 嘉兴小宋 发表于 2013-7-10 09:14 | 显示全部楼层 |阅读模式
目前在用STM32做个产品,USB通讯是在官方的Mass_Storage基础上改的,在BULK-ONLY子类命令中添加了自定义的命令,通过这个来实现大批量数据交互,主机首先发送OUT的CBW+命令,然后发送IN的CBW,设备返回响应,就是依次执行UserToPMABufferCopy(),SetEPTxCount(),SetEPTxStatus()。在指令执行时间较短的情况下(2S以内)无任何问题,但是时间较长的情况下(4S以上)就出现异常,从抓到的USB数据上看,主机在发送完命令,一段时间(等于指令执行的时间)后Get 0 bytes from the device。
不知道为什么,PC的驱动是公司一款成熟产品上拿来用的,那款产品使用的是AVR的芯片,我也抓过它的数据,对比下来并没有发现区别,请帮忙分析下问题可能出现在哪里?
IJK 发表于 2013-7-10 11:53 | 显示全部楼层
正常现象吧。
“主机在发送完命令,一段时间(等于指令执行的时间)后Get 0 bytes from the device。”
从现象来看,问题在于STM32设备端
 楼主| 嘉兴小宋 发表于 2013-7-10 12:08 | 显示全部楼层
IJK 发表于 2013-7-10 11:53
正常现象吧。
“主机在发送完命令,一段时间(等于指令执行的时间)后Get 0 bytes from the device。”
从 ...

应该不是正常现象吧,我在公司另一款产品上可以看到执行完之后,主机可以得到正确的响应。目前就是不清楚主机为什么得到0字节的响应,是因为设备端有这个动作还是windows底层产生的。在执行时间较短的命令中,都是没有问题的
Simon21ic 发表于 2013-7-10 12:59 | 显示全部楼层
这种问题,弄个USB逻辑分析仪,一看就知道了,可能用bushound也可以
IJK 发表于 2013-7-11 11:44 | 显示全部楼层
嘉兴小宋 发表于 2013-7-10 12:08
应该不是正常现象吧,我在公司另一款产品上可以看到执行完之后,主机可以得到正确的响应。目前就是不清楚 ...

设备端如果弄得不好,出现这种情况不奇怪。感觉从协议的定义上面有些不足,应该定义一些设备端可以查询的状态,否则从PC上看挺抓瞎的。
另外,同意4L所说,需要用一些调试工具,如果LZ有示波器支持USB协议也可以用。
 楼主| 嘉兴小宋 发表于 2013-7-13 17:18 | 显示全部楼层
IJK 发表于 2013-7-11 11:44
设备端如果弄得不好,出现这种情况不奇怪。感觉从协议的定义上面有些不足,应该定义一些设备端可以查询的 ...

谢谢,也使用过抓包工具抓过,但是已经是windows底层协议之后的内容了,分析不出为什么会出现Get 0 bytes from the device的现象。目前通过了另外一个方式解决了这个问题,就是将命令的响应CSW放在指令执行完毕后返回,这个超时时间设置为9s,足够设备进行指令的执行,暂时没遇到问题。
soso 发表于 2013-8-28 16:37 | 显示全部楼层
能问一下你的设备是怎么改的吗?需不需要在接口描述符中修改MSC类啊?谢谢
puchuang 发表于 2013-8-28 19:07 | 显示全部楼层
这一块   我不是很了解   感觉自己的水平   好菜啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部