打印

stm32 usb长时间传输

[复制链接]
4005|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tionsa|  楼主 | 2011-3-28 22:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tionsa 于 2011-4-4 11:17 编辑

请见我附件的程序
我现在的情况是:
和上位机通讯正常,但是如果不间断的连续发数据后就会死掉,必须得拔掉后在重新插上才能正常的工作.
各位大狭给看看.
使用的是端点3,并且是单缓冲 方式进行工作的.
沙发
lxyppc| | 2011-3-28 22:45 | 只看该作者
我以前有一个产品也是双缓冲,用的也是STM32,已经量产
没有出现楼主说的情况
楼主用BUS HOUND 抓包先分析一下
直接丢程序是没有看的

使用特权

评论回复
板凳
tionsa|  楼主 | 2011-3-28 23:02 | 只看该作者
谢谢楼上的兄弟,你说的是.我已经体会过,嘿嘿.但是这个情况不知如何描述好,找代理商说ST大中华区就2个FAE,不知道是真是假,上次遇到的问题也是很长段时间没回复的.
我不用双缓冲也是遇到这个情况的,我用过BUS HOUND抓过. 最后一次就是停留在DO状态,上位机已经发送数据.

使用特权

评论回复
地板
lxyppc| | 2011-3-29 08:35 | 只看该作者
我这里有一个DIY项目用的是ISO模式的双缓冲,处理和BULK是差不多的
代码在这里,21IC有打包下载,这个长时间使用是没有问题的
http://code.google.com/p/lxyppc-tetrix/

个感觉你是在DTOG那个位上面没有处理好,没有考虑到数据大于处理速度的情况
很可能是两边的BUFFER同时都满了,或者空了

使用特权

评论回复
5
adams.gh| | 2011-3-29 11:39 | 只看该作者
bus hound 不够用。最好买个USB协议分析仪。能看看是不是设备一直nak主机。
估计实际情况如4楼所说。

使用特权

评论回复
6
Alex_rcpilot| | 2011-3-29 13:45 | 只看该作者
只看USB部分也不够。如果是固件架构问题,可能USB抓的结果一直都是正常,直到某个时刻device停止响应了。

建议长时间仿真。看看出问题的时候程序走到了什么地方。为省去不必要的麻烦,先把usb_pwr.c 125行的 Enter_LowPowerMode(); 函数注释掉,避免出问题后进入休眠,造成仿真意外终止。

另外建议在一些可疑位置设置断点,通过串口打印一些必要的记录,辅助分析故障前的程序流向。

使用特权

评论回复
7
tionsa|  楼主 | 2011-3-29 18:36 | 只看该作者
好的,谢谢楼上各位兄弟的建议和支持,我在寻找中,解决后给各位回复下.

使用特权

评论回复
8
liaowei230509| | 2011-3-30 01:17 | 只看该作者
我和楼主的问题是一模一样的,刚才调试的时候发现一直中断的原因就是ESUSP,所以在usb_config.h中开启#define INTR_ERLYSUSPEND 宏,在usb_istr.c中包含usb_config.h或者定义#define INTR_ERLYSUSPEND,做一个清中断的处理,问题就解决了。此恶魔,仿真的时候偏偏一点事都没有,根本就扑捉不到。困扰我几天的问题终于解决了,但不知其原因,楼主可以试试。
一点多了,我睡了,好累

使用特权

评论回复
9
lu150| | 2011-3-30 16:51 | 只看该作者
都是强人  啥时我能到这步

使用特权

评论回复
10
tionsa|  楼主 | 2011-3-31 01:03 | 只看该作者
转到的过程如图所示,修改过还是问题依然存在.苦恼中。

BUS.jpg (193.7 KB )

BUS.jpg

使用特权

评论回复
11
tionsa|  楼主 | 2011-4-4 11:13 | 只看该作者
见图片的数据传输方式.
void EP3_OUT_Callback(void)
{

  count_out = GetEPRxCount(ENDP3); //获取本次接收数据的长度
  PMAToUserBufferCopy(DataBuffer, ENDP3_RXADDR, count_out);//按顺序将接收缓冲区数据拷贝到buffer_out
  SetEPRxValid(ENDP3);
  _SetEPTxStatus(ENDP3,EP_TX_STALL);  
}

USB异常.jpg (192.86 KB )

USB异常.jpg

使用特权

评论回复
12
liaowei230509| | 2011-4-6 11:00 | 只看该作者
我发现,对于USB的问题,本坛的ST技术人员一直是避而不谈,难道ST的人也不懂?我问过好几个问题也是一样。既然这样,本版块就没存在的必要。

使用特权

评论回复
13
lxyppc| | 2011-4-6 11:16 | 只看该作者
我发现,对于USB的问题,本坛的ST技术人员一直是避而不谈,难道ST的人也不懂?我问过好几个问题也是一样。既然这样,本版块就没存在的必要。
liaowei230509 发表于 2011-4-6 11:00

因为你误认为USB和串口一样,改改例子马上就能用了。
USB的内容很多,不能确定你遇到的问题别人就遇到过,而别人也不大可能因为你有这个问题而专门去研究你的问题。
最好的情况是你的问题刚好有人遇到过,又刚好有人看到你发的贴,刚好他心情好回复了你。
ST技术人员只负责他的CM3核和USB核之间几个接口能否正常工作。

使用特权

评论回复
14
vigia| | 2011-4-6 11:17 | 只看该作者
呵呵,只能说你的问题已经深入了,不是在论坛上看一看图片就能解决的问题,要别人怎么解答呢。

你的问题可能和你的系统有关,也可能只和USB有关,也可能和一个不起眼的中断有段,也可能和什么硬件有关,不调试,怎么能知道呢。

你所谓的“但是如果不间断的连续发数据后就会死掉”到底是什么情况,连续发送了多少数据后死了?我只能说我写的代码,单缓冲BULK收发,连续10MB无错误。如果你的代码在这个数量级以内,你就可以排除芯片BUG的问题了。

使用特权

评论回复
15
johnsenchen| | 2011-5-7 16:18 | 只看该作者
1# tionsa
楼主我现在也在搞usb,可否一起探讨?qq:541625212

使用特权

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

本版积分规则

18

主题

45

帖子

0

粉丝