ch552做device有usb插入会请求描述符,如何判断usb被拔出,是否有专门的寄存器记录状态,请大神指点!
有如下几种方法判断:
1、自供电(未用VBUS),用一无上拉的IO引脚串个1K~5K电阻保护后检查VBUS电平(VBUS上最好有20K下拉默认低)
2、USB供电,不需要确认(拔出就断电了,判断没必要)
3、不管供电,USB拔出后(或者电脑睡眠后),SUSPEND状态位会在大概3ms~8mS后置1
4、如果只是为了内部研究技术,可根据HOST有15K~50K下拉判断。
方法是在设备D+上用330K上拉电阻且关闭GPIO上拉和D+的1K5上拉,如果发现D+被330K维持在高电平说明没接电脑HOST,如果发现D+为低,那么看SUSPEND状态位=0则开启1K5上拉,准备USB工作,睡眠中断发现SUSPEND状态位=1时(说明D+一直为高),且较长时间(20mS以上),就关闭1K5, 再根据330K能否维持上拉判断,能上拉说明拔了,不能上拉说明是睡眠、挂起(HOST仍有下拉),恢复1K5
第三种方法比较符合要求 ,软件解决问题,存在疑点:1,平常552也会进入休眠(需要设置串口接收唤醒,否知无法接收数据)2,USB拔出后(或者电脑睡眠后)这两个可以直接视为拔出状态,但是与疑点1冲突,无法直接判定为拔出状态
可以监测USB_MIS_ST寄存器的SUSPEND状态位,当设备断开或者主机休眠该位置 1