打印
[STM32F4]

stm32f4 usb 批量in stall pid错误

[复制链接]
10804|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

自己定义的 cdc 设备。
批量in端口 定时往外发送数据一段时间后,会出现  stall pid ,貌似是批量 in 端口 被stall了,但是 看 寄存器端口 stall还是0.

我的设备是全速设备。

请教一下 这个stall 的原因是啥?
沙发
mmuuss586| | 2014-4-15 12:54 | 只看该作者
没遇到过

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
bjxdylzsts + 1 神马都是浮云
板凳
bjxdylzsts|  楼主 | 2014-4-16 10:27 | 只看该作者
mmuuss586 发表于 2014-4-15 12:54
没遇到过

请教大神,usb 全速模式,端点都是批量端点, 我批量传输1ms176字节 ,这个可以实现么?我 发现 现在偶尔会丢一帧,或者数据偶尔会出错,请教!stm32的

使用特权

评论回复
地板
bjxdylzsts|  楼主 | 2014-4-16 10:36 | 只看该作者
自己顶个!

使用特权

评论回复
5
bjxdylzsts|  楼主 | 2014-4-17 09:23 | 只看该作者
@cpu00

使用特权

评论回复
6
bjxdylzsts|  楼主 | 2014-4-17 09:25 | 只看该作者

使用特权

评论回复
7
computer00| | 2014-4-18 10:13 | 只看该作者
可能是线路质量不好

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
bjxdylzsts + 1
8
bjxdylzsts|  楼主 | 2014-4-18 11:53 | 只看该作者
computer00 发表于 2014-4-18 10:13
可能是线路质量不好

觉得应该不是吧,我都是用的屏蔽的usb线,实验室也没啥干扰的,应该是下位机或者上位机驱动的问题。
我用另一种方法跟踪到错误说是getOverlappedResult error31 连接到系统的设备可能没有发挥作用。即bushond的stall pid。

看到其他的类似问题的帖子:
1. http://stackoverflow.com/questions/20822869/libusbdotnet-strange-errors-after-working-with-usb-device-for-awhile
2. http://bbs.csdn.net/topics/360103187

使用特权

评论回复
9
bjxdylzsts|  楼主 | 2014-4-18 12:09 | 只看该作者
bjxdylzsts 发表于 2014-4-18 11:53
觉得应该不是吧,我都是用的屏蔽的usb线,实验室也没啥干扰的,应该是下位机或者上位机驱动的问题。
我用 ...

想了一下,这两个错误 stall和 31 肯能不是一个错误,有先后顺序的,先stall后,再报31的错。

问题  stallpid这个命令  是上位机产生的还是下位机产生的, 我的理解是 上位机发送了一个批量的 intoken,由于某种原因,到下位机格式不对了,所以 被stall了?然后 bushond上显示 故障?对么

使用特权

评论回复
10
bjxdylzsts|  楼主 | 2014-4-18 12:17 | 只看该作者
bjxdylzsts 发表于 2014-4-18 12:09
想了一下,这两个错误 stall和 31 肯能不是一个错误,有先后顺序的,先stall后,再报31的错。

问题  sta ...

http://www.microchip.com/forums/m638981.aspx

使用特权

评论回复
11
bjxdylzsts|  楼主 | 2014-4-18 13:19 | 只看该作者
bjxdylzsts 发表于 2014-4-18 12:17
http://www.microchip.com/forums/m638981.aspx

stall之后 那个管道就不能用了,用监控软件监控结果如下,每次都  被abort pipe。

使用特权

评论回复
12
huangqi412| | 2014-4-18 14:25 | 只看该作者
开了双缓冲?

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
bjxdylzsts + 3 赞一个!
13
bjxdylzsts|  楼主 | 2014-4-18 14:35 | 只看该作者
huangqi412 发表于 2014-4-18 14:25
开了双缓冲?

407新的库啊,看不到  双缓冲在哪开。请教灰机 版主。

使用特权

评论回复
14
huangqi412| | 2014-4-18 15:38 | 只看该作者
bjxdylzsts 发表于 2014-4-18 14:35
407新的库啊,看不到  双缓冲在哪开。请教灰机 版主。

不是,我是说跟我以前开双缓冲现象好像。
我的现象是:开双缓冲后,EPOUT没问题,速度1M字节持续几个小时测试。 但EPIN遇到问题,速度快了就出错(测试是每次发送1K字节,不间断持续发)。 后面找了好久发现如果不间断发,第二帧起需要一次性填入第一包,第二包。不能只填第一包,第一包完成中断后填第二包。   单缓冲没这问题,第一帧没这问题,第二包以后也没这问题。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
bjxdylzsts + 3 神马都是浮云
15
bjxdylzsts|  楼主 | 2014-4-18 17:14 | 只看该作者
huangqi412 发表于 2014-4-18 15:38
不是,我是说跟我以前开双缓冲现象好像。
我的现象是:开双缓冲后,EPOUT没问题,速度1M字节持续几个小时 ...

今天又试了下,发现可能和我上位机这边有关系。

我现在有三个端点,端点1 bulk out,端点2 bulk in,端点3 bulk in, pc写命令道 端点1, 从端点2读stm的回复,端点3读stm采集的波形数据,用了三个线程,单独读一个通道的数据时好像出现stall pid的概率较小。

pc驱动这用的libusb0,一直没有怀疑上位机这,因为以前用的上位机也是这个,usb 以前是用fpga模拟出来的一个usb,通讯一直没问题,可能当时(自己做的usb 不标准,凑巧没问题。)

怀疑了驱动,换成windriver生成的驱动,发现读取速度会慢很多。

线程 调用读取函数那部分已经 用了锁,但  过段时间  还是会有  stall pid。

使用特权

评论回复
16
bjxdylzsts|  楼主 | 2014-4-18 17:20 | 只看该作者
computer00 发表于 2014-4-18 10:13
可能是线路质量不好

元老,帮我看下 另外一个问题 ,我 最下面贴图的~

使用特权

评论回复
17
bjxdylzsts|  楼主 | 2014-4-18 17:24 | 只看该作者
bjxdylzsts 发表于 2014-4-18 17:14
今天又试了下,发现可能和我上位机这边有关系。

我现在有三个端点,端点1 bulk out,端点2 bulk in,端 ...

另一个问题, 通过cdc改过来的  usb程序传输数据 ,a丢帧,b数据错误。

为了测试方便,只使用了一个 bulk in 端点,每10ms发一次数据。上位机循环接收。

bushond截取数据如下:

使用特权

评论回复
18
bjxdylzsts|  楼主 | 2014-4-18 17:31 | 只看该作者
bjxdylzsts 发表于 2014-4-18 17:24
另一个问题, 通过cdc改过来的  usb程序传输数据 ,a丢帧,b数据错误。

为了测试方便,只使用了一个 bul ...


上位机接收.png (392.77 KB )

上位机接收.png

使用特权

评论回复
19
bjxdylzsts|  楼主 | 2014-4-18 17:33 | 只看该作者
再次呼叫另一个st大神,@香水城 希望大神们帮忙

使用特权

评论回复
20
香水城| | 2014-4-21 14:34 | 只看该作者
STALL只可能是设备发出来的,主机不会回复stall应答。

这里看起来是主机要读取数据了,于是发送IN令牌,正常情况下,设备回复数据,然后主机在正确接收到数据并且CRC检查无误就回复ACK。这里设备没有回复数据,而是直接回复了STALL的握手应答。

有个可能是设备的EP的halt feature被设置了。于是所有主机针对该ep的通信都会被回复stall握手。知道引起该halt的条件被主机清除。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
bjxdylzsts + 3 很给力!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

129

帖子

0

粉丝