本帖最后由 Panevila 于 2015-4-20 09:51 编辑
大神居然回复了 太感动了 上次写的比较粗略哈
我是IN卡死的
是这样的,在每次发的buffer大小都是一样的的情况下,比如说都是 Data[2400]。如果我发送之前不动这个buffer(那么里面就都是0),或者赋值成一样的数据(比如全是0x22),发送和接收不会有任何问题。但如果是无规律的数(比如说采集来的数据)。那么,一旦这些数多于400个,IN就经常会卡死。如果多于2000个基本就发不出去了。Bushound提示babble detected 。 再发就会卡死。而且在卡死之后,STM32还可以接受OUT数据。。。。就是再也发不出去IN了,一发IN指令上位机程序就会死机,复位后才能解决这问题,或者关了EP再开然后重新插拔才行
比如就用的您原版的程序,把下面这段代码(目的在往buffer里填一些没啥规律的数)放在初始化结束后,或者while主循环之前的任何一个地方。其它地方不变,这样一来,测试发送还是正常,但一点接收数据,就会卡死了..st官方驱动测试的,只不过我用的Discovery,F407的,改了几个管脚(PH4,PI11改成了PC3,PC2)。也是用的USB3300PHY。赋值越多,出问题几率越大。。用FS的时候不会卡死,但无规律数据多了同样会被拖慢。好像传输效率和buffer里装什么东西还有关系。。
for(int i=0;i<256;i++)
{
SendData [i ]= i;
SendData[i+255] = i;
SendData[i+511] = i;
SendData[i+767] = i; SendData[i+1023] = i;
SendData[i+1279] = i;
SendData[i+1535] = i;
SendData[i+1791] = i;
}
而且卡死之后只能重启下位机才能解决。不知道是不是就我这里这样。。您看看您那是不是也有类似情况。。
一开始入门的时候学习了您的程序,那时候测试IN的时候,发之前没有往buffer里装东西,没有任何问题。
后来要做高速数据采集,我就在你的程序基础上做了一定修改,自己写了驱动和上位机程序。主要是去掉了while的部分,改了下结构,USB底层的东西没动。
测试了下成功了,当时是buffer里所有的数都没动(就是都是0)或者是相同的数(比如说0x22),也有的时候是前10个buffer里放几个数,看PC有没有接收到,一次发20480个字节,这样折腾都没任何问题。
这两天加了采集的数据之后,发现一次发送300字节以下的数据一般不会有问题,但覆盖的数据量一旦大于400,就会卡死。但不管死不死机,我每次发送的数据量都是一样的!不死机的时候,Bushound也能测出速度。我以为只是我程序有问题,于是又拿了您的原版一套程序和st官方驱动试了下,发现也是一样的情况,往里面赋没有什么规律的值,一旦数量多了,就会死机。不赋值就没事。。
后来我怀疑供电不足,换了个2A的电源,还是一样的结果。。
又做了一些试验,发现在一些接近临界的情况,比如如果给480个值,采了几次没问题,试了下100毫秒一次采很久没问题,20毫秒一采一般能**个1分钟;720个值的时候,100毫秒采几次就卡死了,1秒一次基本没问题。但是一旦放的不同的数多于1000,基本多慢也无法成功了。这些试验还是一样,每次发送都是发送那2400个buffer的内容。。只不过是里面填的数不一样。。困惑的就是从没听说过传输成功率还和内容有关的。。。这样的话算起来目前也就24K的速度顶天了。。刚刚又试了下,用FS没有这问题。。
希望大神能提提想法哈,最好能试一下是不是我自己的问题。。
我 qq 387756953 希望能得到指点哈
|