打印

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

[复制链接]
3335|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也可以

使用特权

评论回复
5
IJK| | 2013-7-11 11:44 | 只看该作者
嘉兴小宋 发表于 2013-7-10 12:08
应该不是正常现象吧,我在公司另一款产品上可以看到执行完之后,主机可以得到正确的响应。目前就是不清楚 ...

设备端如果弄得不好,出现这种情况不奇怪。感觉从协议的定义上面有些不足,应该定义一些设备端可以查询的状态,否则从PC上看挺抓瞎的。
另外,同意4L所说,需要用一些调试工具,如果LZ有示波器支持USB协议也可以用。

使用特权

评论回复
6
嘉兴小宋|  楼主 | 2013-7-13 17:18 | 只看该作者
IJK 发表于 2013-7-11 11:44
设备端如果弄得不好,出现这种情况不奇怪。感觉从协议的定义上面有些不足,应该定义一些设备端可以查询的 ...

谢谢,也使用过抓包工具抓过,但是已经是windows底层协议之后的内容了,分析不出为什么会出现Get 0 bytes from the device的现象。目前通过了另外一个方式解决了这个问题,就是将命令的响应CSW放在指令执行完毕后返回,这个超时时间设置为9s,足够设备进行指令的执行,暂时没遇到问题。

使用特权

评论回复
7
soso| | 2013-8-28 16:37 | 只看该作者
能问一下你的设备是怎么改的吗?需不需要在接口描述符中修改MSC类啊?谢谢

使用特权

评论回复
8
puchuang| | 2013-8-28 19:07 | 只看该作者
这一块   我不是很了解   感觉自己的水平   好菜啊

使用特权

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

本版积分规则

2

主题

5

帖子

1

粉丝