紧急求助 关于stm32连接USB的一个奇怪现象,请教各位大佬

Joshua_88 高级软件工程师  2020-08-24 04:24:03
情况是这样的,我们用stm32做了和电脑上位机的通讯。通讯方式是HID方式。但是有个非常奇怪情况就是
上位机和下位机连接,使用完毕后关闭上位机。这个过程中一切都是正常的。

但是!!有时关闭后,再过了半小时再打开上位机这时候虽然能连接下位机,但是收发数据都不行了。这时候重启电脑
或者重新插拔下USB都能恢复正常。

而且只要每次打开上位机和 上一次关闭之间的间隔不要太长就不会出现这种问题。非常奇怪!

这个问题很头疼 而且是偶发的有时候间隔2个小时也不会出问题。不知道大家有没有碰到过这种情况
...全文
23639 11 1 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
南山问道 2020-09-08
就这些吗,感觉没有枚举成功,程序中能打开吗,或者看看设备管理器
  • 打赏
  • 举报
回复
Joshua_88 2020-09-08
引用 9 楼 poetryTang 的回复:
双向通讯也是分主从的,主机发送,从机返回,从机不能主动发送给主机,没有实物不好具体分析,不过你用bus hound可以监测主机到底有没有把数据发出去,从机有没有返回,就能知道问题出在哪了
今天 我截到数据包是这样的
  • 打赏
  • 举报
回复
Joshua_88 2020-08-26
引用 7 楼 poetryTang 的回复:
USB通讯,PC端是USB主机(Host),下位机端是USB设备(Device),这里就是STM32电路板,MCU里有USB外设,通过编程实现各种USB功能,比如这里的HID通讯,所以问题主要在设备端,主机做不了什么事,只能监听总线上的数据
大佬能帮我分析分析啥原因吗 我们现象是这样的 1 打开上位机-关闭上位机 等待5分钟 打开上位机-关闭上位机 等待5分钟 打开上位机-关闭上位机 2 打开上位机-关闭上位机 等待30分钟 打开上位机-关闭上位机 等待30分钟 打开上位机-关闭上位机 序列1不管重复多少次都不会有问题。因为闲置时间短 序列2就有概率出问题,然后把USB插拔一下就可以了,或者重启电脑也能解决(重启电脑 不会重启电路板的电源) 关键这个bug重现难度大 这次我连续两天都没出问题。还有我们的设备是双向通讯的电路板向PC端发消息 PC端也会向下位机发消息
  • 打赏
  • 举报
回复
南山问道 2020-08-26
USB通讯,PC端是USB主机(Host),下位机端是USB设备(Device),这里就是STM32电路板,MCU里有USB外设,通过编程实现各种USB功能,比如这里的HID通讯,所以问题主要在设备端,主机做不了什么事,只能监听总线上的数据
  • 打赏
  • 举报
回复
Joshua_88 2020-08-26
引用 3 楼 poetryTang 的回复:
[quote=引用 2 楼 Joshua_88 的回复:]大佬 什么是suspend 呀 ?因为这块电路板是外包公司做的,现在双方都在找原因。 我对嵌入式底层不了解 suspend是指电路板的CPU把usb挂起了吗?那怎样才能防止不被挂起呢?
这么说stm32程序不是你们写的,那就不好解决了,上层只能通过 Bus Hound 监听总线数据,看是上层没发出去,还是底层没回。 挂起是USB设备实现的,和主机没关系。 [/quote] 大佬 USB设备是值电路板上的哪个器件吗?还是啥?
  • 打赏
  • 举报
回复
Joshua_88 2020-08-26
引用 4 楼 帮帮你我她 的回复:
我做的这东东,通讯时直接插拔usb只是暂停而已,插上又恢复了,你是不是没做出错处理啊,
不是的 我没有插拔USB 只是第一次把上位机的软件关闭了。 后面重新再打开就有概率无法收发了。 但是如果两次打开之间的时间只要不太长就不会有问题 1 打开上位机-关闭上位机 等待5分钟 打开上位机-关闭上位机 等待5分钟 打开上位机-关闭上位机 2 打开上位机-关闭上位机 等待30分钟 打开上位机-关闭上位机 等待30分钟 打开上位机-关闭上位机 序列1不管重复多少次都不会有问题。因为闲置时间短 序列2就有概率出问题
  • 打赏
  • 举报
回复
南山问道 2020-08-26
双向通讯也是分主从的,主机发送,从机返回,从机不能主动发送给主机,没有实物不好具体分析,不过你用bus hound可以监测主机到底有没有把数据发出去,从机有没有返回,就能知道问题出在哪了
  • 打赏
  • 举报
回复
Joshua_88 2020-08-25
大佬 什么是suspend 呀 ?因为这块电路板是外包公司做的,现在双方都在找原因。 我对嵌入式底层不了解 suspend是指电路板的CPU把usb挂起了吗?那怎样才能防止不被挂起呢?
  • 打赏
  • 举报
回复
fly 100% 2020-08-25
会不会是suspend 了,可以抓包看看
  • 打赏
  • 举报
回复
帮帮你我她 2020-08-25
我做的这东东,通讯时直接插拔usb只是暂停而已,插上又恢复了,你是不是没做出错处理啊,
  • 打赏
  • 举报
回复
南山问道 2020-08-25
引用 2 楼 Joshua_88 的回复:
大佬 什么是suspend 呀 ?因为这块电路板是外包公司做的,现在双方都在找原因。

我对嵌入式底层不了解 suspend是指电路板的CPU把usb挂起了吗?那怎样才能防止不被挂起呢?

这么说stm32程序不是你们写的,那就不好解决了,上层只能通过 Bus Hound 监听总线数据,看是上层没发出去,还是底层没回。
挂起是USB设备实现的,和主机没关系。
  • 打赏
  • 举报
回复
相关推荐
发帖
单片机/工控
创建于2007-09-28

2.6w+

社区成员

硬件/嵌入开发 单片机/工控
申请成为版主
帖子事件
创建了帖子
2020-08-24 04:24
社区公告
暂无公告