stm32 usb长时间传输

[复制链接]
5056|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同时都满了,或者空了
adams.gh 发表于 2011-3-29 11:39 | 显示全部楼层
bus hound 不够用。最好买个USB协议分析仪。能看看是不是设备一直nak主机。
估计实际情况如4楼所说。
Alex_rcpilot 发表于 2011-3-29 13:45 | 显示全部楼层
只看USB部分也不够。如果是固件架构问题,可能USB抓的结果一直都是正常,直到某个时刻device停止响应了。

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

另外建议在一些可疑位置设置断点,通过串口打印一些必要的记录,辅助分析故障前的程序流向。
 楼主| tionsa 发表于 2011-3-29 18:36 | 显示全部楼层
好的,谢谢楼上各位兄弟的建议和支持,我在寻找中,解决后给各位回复下.
liaowei230509 发表于 2011-3-30 01:17 | 显示全部楼层
我和楼主的问题是一模一样的,刚才调试的时候发现一直中断的原因就是ESUSP,所以在usb_config.h中开启#define INTR_ERLYSUSPEND 宏,在usb_istr.c中包含usb_config.h或者定义#define INTR_ERLYSUSPEND,做一个清中断的处理,问题就解决了。此恶魔,仿真的时候偏偏一点事都没有,根本就扑捉不到。困扰我几天的问题终于解决了,但不知其原因,楼主可以试试。
一点多了,我睡了,好累
lu150 发表于 2011-3-30 16:51 | 显示全部楼层
都是强人  啥时我能到这步
 楼主| tionsa 发表于 2011-3-31 01:03 | 显示全部楼层
转到的过程如图所示,修改过还是问题依然存在.苦恼中。
BUS.jpg
 楼主| 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
liaowei230509 发表于 2011-4-6 11:00 | 显示全部楼层
我发现,对于USB的问题,本坛的ST技术人员一直是避而不谈,难道ST的人也不懂?我问过好几个问题也是一样。既然这样,本版块就没存在的必要。
lxyppc 发表于 2011-4-6 11:16 | 显示全部楼层
我发现,对于USB的问题,本坛的ST技术人员一直是避而不谈,难道ST的人也不懂?我问过好几个问题也是一样。既然这样,本版块就没存在的必要。
liaowei230509 发表于 2011-4-6 11:00

因为你误认为USB和串口一样,改改例子马上就能用了。
USB的内容很多,不能确定你遇到的问题别人就遇到过,而别人也不大可能因为你有这个问题而专门去研究你的问题。
最好的情况是你的问题刚好有人遇到过,又刚好有人看到你发的贴,刚好他心情好回复了你。
ST技术人员只负责他的CM3核和USB核之间几个接口能否正常工作。
vigia 发表于 2011-4-6 11:17 | 显示全部楼层
呵呵,只能说你的问题已经深入了,不是在论坛上看一看图片就能解决的问题,要别人怎么解答呢。

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

你所谓的“但是如果不间断的连续发数据后就会死掉”到底是什么情况,连续发送了多少数据后死了?我只能说我写的代码,单缓冲BULK收发,连续10MB无错误。如果你的代码在这个数量级以内,你就可以排除芯片BUG的问题了。
johnsenchen 发表于 2011-5-7 16:18 | 显示全部楼层
1# tionsa
楼主我现在也在搞usb,可否一起探讨?qq:541625212
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

45

帖子

0

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