1.USB Resume信号
USB设备进入挂起状态之后,将由Resume信号进行唤醒。Resume信号可以由USB主机发起,也可以由USB设备本身触发,但是只有USB主机可以结束Resume信号。
(1)主机在挂起设备后可通过翻转数据线上的极性并保持20ms来唤醒设备,并以低速EOP信号结尾。
(2)如果设备支持远程唤醒,设备可向主机发起远程唤醒请求,前提是设备已进入idle状态至少5ms,设备会驱动总线进入K状态,如下图,K状态必须维持1ms-15ms之内,此信号会在1ms内被主机接管,主机会继续驱动唤醒信号直到20ms,并以低速EOP信号结尾。
2.USB远程唤醒的方式
当主机控制器进入挂起后,所有设备是没办法向主机提交数据的,那主机是怎样知道设备的唤醒请求呢?答案是通过电信号。如下图(usb_20.pdf Page-333),设备需要生成一个1ms-15ms的K状态电信号(这里例子为10ms),hub会在1ms内捕获到该信号(此时设备其实就可以停止驱动K状态了),hub会进行和设备相同的操作把此信号传递给主机控制器,主机控制器对唤醒操作进行接管,主机会继续驱动唤醒信号直到20ms,并以低速EOP信号结尾,完成对设备的唤醒操作。如果是一个鼠标设备的话,休眠的系统有时会被恢复,其实这里大家可以看做是设备给主机系统发送一个IO中断信号,主机系统检测到后可以实现一系列的后续操作。
3.J状态和K状态
J状态 LS(低速) 差分0
FS(全速) 差分1
K状态 LS(低速) 差分1
FS(全速) 差分0
4.STM32 USB设备远程唤醒机制详解。
首先我们以我自己设计的STM32 USB鼠标例子来分析。
1.USB外设需支持远程唤醒操作。
USB外设必须支持远程唤醒功能,当然STM32F103 USB外设符合USB2.0全速设备的技术规范,所以支持远程唤醒的功能。
2.USB设备描述符设置远程唤醒。
USB设备配置描述符设备属性中必须Bit5必须为1(remote wake-up)。
STM32F103鼠标设备配置描述符源代码如下,从0数第7个字节0xE0(1110000b),标识设备是自供电且具有远程唤醒功能。
3.STM32 USB设备远程唤醒代码剖析。
实现的功能就是STM32按下一个按键后,STM32 USB设备发送一次远程。
1、STM32F103 。
900K只能是双缓冲才能达到,单缓冲到700多K不能再高了,而且是纯测试。
2、手册支持full speed 12Mb/s =1.5MB/S 。
挑选芯片是需要按项目要求规划需要的外设、资源和性能的,价格便宜是相对的,功能符合你要求的才有意义。
如果你只是在学习阶段,比较便宜的选择可以考虑 STM32 F0系列、F1系列。
当然这两系列里面也有很多的型号。
从提示上看,是禁止了芯片程序的读出,不知道擦除有没有禁止。
你可以擦除芯片试试,如果擦除后没有问题了,说明你很运气。
如果擦除后还有问题,打开发板供应商的服务电话吧,他们有办法搞,但是里面的程序应该要擦除,且读不出来了。
简单理解就是,一般来说,STM32内部有一个8MHz的时钟(HSI时钟),系统上电默认的就是使用该时钟来运行程序,但这个内部的8MHz的精度并不高,也就是说有一定的误差。所以一般我们会在STM32芯片外部接一个8MHz的标准晶振(HSE时钟),配置系统时钟就是使用这个外部的HSE时钟经过内部倍频之后作为系统运行的时钟(sysclock),倍频成多少看你的STM32最高能支持多高的时钟频率,STM32f051C8T6(Cortex-M0)支持到48MHz,STM32F103ZET6(Cortex-M3)支持到72MHz。