关于STC8H8K64U的USB主动挂起
有个设备需要USB通讯,但20秒内无按键时需要进入低功耗状态。在仅使用USB充电器供电时(未有D+、D-通讯线),设备可以进入掉电功耗状态,LED灯不闪烁,测量功率为uA级别;但设备接电脑USB口供电时,设备无法进入低功耗状态(设备有进入低功耗状态,LCD背光都灭了),LED运行灯一直闪烁,应该是USB一直有握手,处于未挂起状态,该如何让设备主动挂起呢?然后我模拟了充电器供电状态,把USB的D+和D-线接到继电器,设备休眠时断开D+和D-线,发现USB任然无法进入挂起状态,工作LED灯闪,但是HID设备已被电脑弹出了。我按键后,设备正常工作,电脑同时也识别到了HID设备。依据USB协议,USB Full Speed设备3ms内没接收到握手帧就应该进入挂起的,搞不清楚这个工作机制。
有没高手指点下,先感谢。
USB的挂起模式之前确实没有使用过
明天先研究一下,后续有进展再一起讨论 抱歉,昨天有点忙,今天才得空研究了一下
首先说结论:
STC8H8K64U/STC32G12K128的USB模块都支持主动挂起和被动挂起/如USB电脑主机进入休眠
下面分别进行说明
主动挂起:
所谓主动挂起,是指USB主机一直保持和USB设备的连接,但USB设备由于自身原因,需要挂起USB进入STOP模式
需要主动挂起USB,最重要的设置是:当满足需要挂起条件时(比如20秒没有按键),
在进入STOP模式前,一定要先关闭USB功能
测试代码需进行如下设置:
1、初始化定时器,定时器产生100ms中断
2、使能INT0(P3.2口)中断,按键功能,同时用于唤醒CPU
3、进入STOP模式前和唤醒后的必要设置
被动挂起,如电脑进入休眠时,USB电脑主机休眠:
所谓被动挂起,是指USB主机进入休眠时,强制USB设备进入SUSPEND状态,再设置CPU进入STOP模式
要使能设备被动挂起,首先程序中必须使能USB的挂起检测功能,同时还需要处理USB的挂起中断
另外还有重要的一点,如果需要使用USB的RESUME信号唤醒CPU,必须借助P3.0口的INT4中断才能实现
因为进入STOP模式后,USB模块的时钟会停止,此时如果USB总线上产生了RESUME信号,没有时钟的
USB模块无法解析此信号,这里就必须借助D-(P3.0)口上的INT4的下降沿中断来实现唤醒CPU
测试代码需进行如下设置:
1、定义一个被动挂起标志位
2、使能挂起中断,以及使能USB挂起信号检测功能
3、在USB复位中断中需要重新使能挂起中断,以及使能USB挂起信号检测功能
4、在USB恢复中断和USB挂起中断中设置/清除挂起标志位
5、检测到需要被动挂起进入STOP时,需要使能INT4中断
下面是测试代码,请参考!(注:上面的图片是从STC32G系列代码中抓取的)
感谢版主的解答,在STC8H8K64U代码上做了测试,没有问题了。通过这次USB的调试,对USB的理解更深刻了,本来打算如果无法满足客户的要求,就要换个MCU来解决的,后续一如既往的支持STC,再次感谢。 古人来者_昌 发表于 2023-11-16 22:49
感谢版主的解答,在STC8H8K64U代码上做了测试,没有问题了。通过这次USB的调试,对USB的理解更深刻了,本来 ...
感谢信任,一起前行 USB挂起,是进入芯片休眠了吗? 还是说只是USB功能处于休眠状态,其他功能都是正常工作的呀? USB进入休眠状态,同时芯片也处于省电模式状态。如果USB不进入休眠,芯片是无法进入省电模式。 👍 zhp 发表于 2023-11-16 11:51
抱歉,昨天有点忙,今天才得空研究了一下
首先说结论:
我想获取主机是否睡眠的状态,测试被动挂起的“在USB复位中断中需要重新使能挂起中断,以及使能USB挂起信号检测功能”功能好用,我想知道的是挂起中断和挂起信号检测为何会在此时(void usb_reset())与初始化值不同,它们是何时被修改的,看了几遍手册没能发现硬件修改它们的机制。 有你才恋家 发表于 2023-12-1 09:45
USB挂起,是进入芯片休眠了吗? 还是说只是USB功能处于休眠状态,其他功能都是正常工作的呀? ...
USB HID 键盘正常工作时是中断传输的,主机会在一定时间(由描述符确定)之内查询设备是否有数据需要传输,示波器也能看到一直有信号,挂起后就不再查询了,示波器看也没有信号了,USB功能处于休眠状态,而芯片休眠指单片机CPU不再工作,进入低功耗状态,USB设备一般通过USB线供电,非电池供电的可移动设备,对功耗不敏感,单片机进入低功耗状态是可选的,一般的应用是单片机识别电脑是否睡眠,电脑睡眠,主机会挂起USB总线,比如电脑正常工作,单片机接的LED是流水灯,电脑睡眠,流水灯变成呼吸灯,由于呼吸灯需要由单片机控制,此时单片机就不能进入低功耗模式了
页:
[1]