32V307寄存器R8_USB_SPEED_TYPE问题求解

image.png


如图所示,这里使用串口打印 R8_USB_SPEED_TYPE 寄存器的值。

因为实际使用中出现了奇怪的问题,就连续打印5次值用于测试,然后就出现了如图所示的奇怪现象。

为什么这个寄存器的值,每次读取都具有很大的随机性呢。

如图,刚开始枚举的是 USB-HS 设备,第一次读值为1(高速)正确;后面四次读为0(全速),这就有问题了。

然后SETUP过程中,上位机会总线复位一次,这里为了区分设置了计数器累加。

总线复位后,第一次读为0(全速)错误,后面四次读为1(高速)正确。


请问要在什么情况下,这个寄存器的值才能总是读出正确的结果呢?

你好,高速USB的插入检测由硬件完成,有交互的过程,所以在通信之前不好判断,可以在SETUP中断的地方读取。


问题是,协议速度不匹配,下位机就收不到SETUP包。

所以在SETUP中断里面检测这个就没意义了。

如图所示,下位机的SETUP中断是在协议速度匹配后才收到的:

image.png


你好,这个现象好像有点奇怪,正常的检测过程是,先识别为全速,如果是高速的,设备会主动发起协商,协商成功后变为高速。就是说如果主机不支持高速,会用全速去跑。这个现象好像是主机协商成功了高速,但是又不用高速的去跑,像是主机兼容性的问题。这边用307的FS口做主机是可以给HS正常枚举的,不过你的这个处理方法也挺不错的。


只有登录才能回复,可以选择微信账号登录