打印
[USB驱动]

关于如何让host(PC)把device(一个开发板)挂起掉?

[复制链接]
1343|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jansion1|  楼主 | 2014-9-11 15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
背景:
      我用的是stm32f407的Discovery开发板作为device。符合usb2.0规范。
       当我PC机没有传输事务需要发起时(可以理解为pc和我的开发板很长一段时间不用进行传输)让PC端将我的device挂起,以避免我的开发板的其他应用程序正常运行(因为如果不挂起的话,device每1ms就会产生一次SOF包中断,从而影响其他程序正常运行,当然此时我也不需要usb嘛,因此需要使usb设备挂起)。
      
目前我知道的:
      1、 当usb没有任何事务时,host会没1ms发起一个sof包给device,只要当大于3ms时没有收到sof包,那么device就会进入suspend(挂起状态)。
      我想知道PC端有什么样的接口可以用来阻止发送sof包,从而使device进入挂起状态。或者用什么方式、方法能够使device进入挂起状态。而当PC需要开启一个传输任务时,我的device能够被正常唤醒。
      由于项目紧急, 希望大家能够给小弟一点点提示, 小弟我不胜感激!

相关帖子

沙发
yubsh| | 2014-9-11 15:47 | 只看该作者
这都要操心,这是神马破烂开发板!

使用特权

评论回复
板凳
jansion1|  楼主 | 2014-9-11 16:08 | 只看该作者
这个开发板就是我将来的产品蓝本。 我就是想知道怎么才能让我的产品进入挂起模式。
这个问题是不是很难?

使用特权

评论回复
地板
jansion1|  楼主 | 2014-9-11 16:08 | 只看该作者
yubsh 发表于 2014-9-11 15:47
这都要操心,这是神马破烂开发板!


这个开发板就是我将来的产品蓝本。 我就是想知道怎么才能让我的产品进入挂起模式。
这个问题是不是很难?

使用特权

评论回复
5
yubsh| | 2014-9-11 16:26 | 只看该作者
jansion1 发表于 2014-9-11 16:08
这个开发板就是我将来的产品蓝本。 我就是想知道怎么才能让我的产品进入挂起模式。
这个问题是不是很难 ...

挂起事件也是USB中断事件之一,你可以不做处理。关键是,挂起和唤醒是USB协议本身的规定,你不用它,设备就挂起,你启用它,设备就唤醒,你完全没必要强行挂起或者唤醒它。
你要研究的是,它为什么会干扰你的其它功能,这些其它功能为什么这么紧迫,非得让你处心积虑地挂起它。你究竟做了什么出格的事儿,让你这般闹心!

使用特权

评论回复
6
jansion1|  楼主 | 2014-9-11 16:43 | 只看该作者
yubsh 发表于 2014-9-11 16:26
挂起事件也是USB中断事件之一,你可以不做处理。关键是,挂起和唤醒是USB协议本身的规定,你不用它,设备 ...

关于您的回复“您不用它,设备就挂起,您启用它,设备就唤醒,您完全没必要强行挂起或者唤醒它”。我们需要明确一点的就是:“您不用它”具体指的是什么,假如您指的是不传输setup包或者out或者in包时表示不用,那么usb主机发送sof包在您看来是属于”不用它“,即usb会进入挂起状态。而事实是usb设备检测到大于3m内没有收到sof包才进入挂起状态。所以您指的”不用它“并不会让设备挂起。
     再者,我的程序需要很严格的时间要求。因此必须要做到:当我没有用PC机的app对我的产品写数据时(用过usb),我必须使产品进入挂起状态,以不至于没1ms被sof包中断,从而影响我的产品的程序正常运行(因为没1ms的中断肯定不会满足我的时间需要的,我们的产品有操作系统,而硬件的中断永远大于操作系统的中断优先级)。所以我才必须要控制usb的挂起。
     希望多多指点一下:有什么具体的方式使我的usb挂起,比如说有没有一个IOCTL()的系统调用来禁止host发送sof。
     谢谢!

使用特权

评论回复
7
jansion1|  楼主 | 2014-9-11 18:11 | 只看该作者
该问题需要寻求usb高手,我看过圈圈的数 但是它里面也没有讲到关于如果使一个usb设备挂起的具体方法。 求大神指点迷津

使用特权

评论回复
8
diweo| | 2014-9-11 21:25 | 只看该作者
本帖最后由 diweo 于 2014-9-11 21:34 编辑

本楼已自杀。:lol

使用特权

评论回复
9
jansion1|  楼主 | 2014-9-12 09:04 | 只看该作者
diweo 发表于 2014-9-11 21:25
本楼已自杀。

啥叫自杀 解决问题

使用特权

评论回复
10
weisy5| | 2014-10-9 09:28 | 只看该作者
学习了

使用特权

评论回复
11
lhtzyn777| | 2014-10-11 14:01 | 只看该作者
理论上貌似不可行。
主机是不可能将SOF停发的,除非设备不在线了。
如果SOF影响你的STM32F407,那你将SOF中断关闭就是?如果是挂起,从挂起到唤醒这个也需要时间的,设备也无权要求主机什么时候挂起设备,除非设备自己掉线(就是相当于设备移除)。我觉得5楼说的很对,你可以参考。

使用特权

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

本版积分规则

1

主题

10

帖子

0

粉丝