关于usb的上拉软断开功能

2019-07-20 19:59发布

现在我用F4做MSC,但美中不足就是当在设备和电脑保持连接的时候复位设备,电脑就无法识别。

经过查看发现是因为复位后上拉电阻会使得电脑来枚举设备,但是设备此时还没有将USB初始化
完成,所以不会返回描述符导致枚举失败。

按照我的理解是,先将上拉断开,初始化好内部USB后再重新连接即可。

现在的问题是如何有效的断开和重连上拉?

按照F4手册说明:
<OTG_FS_DCTL>寄存器下的<SDIS>位可以软断开和重连。

那么我的步骤如下:
1、先断开上拉--------->DCD_DevDisconnect
2、再执行初始化------>USBD_Init
3、最后连接上拉------>DCD_DevConnect
事后进调试发现第一步没有成功断开<SDIS>位,应该是USB寄存器没有初始化所以无动作。

那么修改步骤如下:
1、先执行初始化------>USBD_Init
1、再断开上拉--------->DCD_DevDisconnect
3、最后连接上拉------>DCD_DevConnect
这次上拉可以断开并连接了,但是从电脑<设备管理器>观察到主机根本就没有觉察到设备被拔出

最后我直接进调试模式,让设备全速跑起来。然后手动的断开上拉,依然电脑没有发现断开设备。
并且奇怪的是,我手动断开然后再次连接以后,将USB拔插一次,主机便无法枚举了。

是不是我哪里理解错了,希望大家帮帮忙谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
fengweibo3
2019-07-21 22:19
KC_CEC 发表于 2014-9-1 17:45
找到解决办法了,其实不用那么复杂。只需要开机的时候将IO口配置成下拉方式即可,这样在初始化完成USB之 ...

我也遇到同样的问题,USB可以实现软断开,但是SDIS位重新置0,不会重新枚举,所以只要软断开了就再也连接不上,除非重新初始化;你说IO口配置为下拉方式,是指USB D+和USB D-这两个IO口吗?为什么设置成下来,还是能够察觉USB插入

一周热门 更多>