USB--USB远程唤醒分析
本篇文章基于EVT中键鼠复合设备例程,分析设备唤醒主机流程原理等。
相关远程唤醒基础知识可参考USB中文网:https://www.usbzh.com/article/detail-189.html
下面介绍我们CH32单片机端的实现流程。
1、配置描述符的bmAttributres字节必须配置远程唤醒功能
代码描述符体现:
2,主机睡眠时会发送两个命令,一个Set Feature,一个SUSPEND挂起命令,所以程序里做出响应
这里我们添加相关处理代码,这里我们做的处理是当主机睡眠时,我们让芯片也进入睡眠低功耗模
式,此时程序会停在PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFE);
这里,当我们接一个按键模拟按键按下时,芯片自身也会被唤醒,并继续执行程序,且发送唤醒信号
进而主机也会被唤醒。
常见问题:
1,用的EVT复合键鼠例程测试,怎么唤醒不了?(用的哪个型号单片机官网搜索对应型号可下载对应例程)
可能原因:1)主机端睡眠时为发送相应的挂起等信号,我们的例程流程是先发送set feature,后发送挂起
信号,进而进入睡眠,醒来后再唤醒主机,测试可监控响应处理函数有无进入,无进入一般是系统问题,也
可以多试几台电脑。
2,我不需要芯片端睡眠,主机睡眠时我需要芯片仍在运行程序,该怎么配置
可直接替换该函数,MCU_Sleep_Wakeup_Operate,转而置位一个标志,标志成立的话可在别处做相应的处理。
如有些可能使用SPI来上传键值,所以此时肯定是不能进停止模式的,此时只需在此置一个标志位,在SPI中断里
发送唤醒信号即可。