该USB芯片支持低速(1.5Mbps)和全速(12Mbps)通信,枚举键盘、鼠标获取键值等都通过了。
问题在HUB上面,识别出HUB后,枚举端口设备时,HUB接全速设备,键值获取正常;HUB接低速设备,枚举出错。
一开始获取不到设备描述符,后来在设置速度那里加了500us延时,偶尔可以获取到设备描述符,但是枚举过程还是不成功,会退出,进不到获取键鼠键值的状态。增加延时效果不明显,试了5us、50us、0.5ms、1ms的延时,50us以上都有概率成功获取端口低速键鼠的设备描述符。
问题补充:单独接键盘、鼠标,枚举是ok的,低速和全速均枚举正常,键值读取部分也正常;
接HUB,HUB是全速的,接全速键鼠枚举正常,键值读取正常;接低速键鼠,有概率枚举成功,然后持续读到键值,但是持续10s左右,鼠标就断了。枚举成功后,获取键鼠键值部分调用的是同一个程序,这个程序只在HUB接低速设备会出现断开的情况,其他情况都很稳定。
根据你的描述,这个问题可能与你的USB芯片和HUB上的低速设备之间的通信有关。
在USB 1.1标准中,低速设备使用的是1.5Mbps的速度,而全速设备使用的是12Mbps的速度。这意味着如果你的HUB上连接的是低速设备,你需要使用1.5Mbps的速度进行通信,而如果是全速设备,则需要使用12Mbps的速度进行通信。如果使用了错误的速度进行通信,可能会导致通信失败。
另外,由于低速设备的数据传输速度较慢,可能需要更长的时间才能传输完整的数据包。因此,在读取低速设备的描述符时,你可能需要增加一些额外的延迟来确保能够正确地读取数据。
在代码中,你可以尝试使用USB协议规定的低速模式来进行通信,并适当增加延迟时间,以保证能够正确地读取低速设备的描述符。
问题可能是由于低速设备与高速设备的速率不同而导致的。在USB枚举过程中,低速设备的数据传输速率比高速设备慢,因此需要更长的时间来完成数据传输。因此,您需要增加适当的延迟以确保低速设备的数据传输被完全完成。
您已经尝试了一些延迟时间,但效果并不理想。这可能是因为延迟时间太短,不能完全解决低速设备的数据传输问题。您可以尝试增加延迟时间,或者使用其他方法来解决问题。以下是一些建议:
尝试增加延迟时间:您可以尝试增加延迟时间,例如100us或更长时间。但请注意,过长的延迟时间可能会影响USB枚举的速度,因此需要找到一个适当的延迟时间。
检查USB信号质量:您需要确保USB信号质量良好。您可以检查USB电缆、连接器和其他硬件部件,以确保它们没有损坏或损坏。您还可以使用示波器等工具来检查信号质量。
确保驱动程序正确:您需要确保使用正确的驱动程序。不同的设备可能需要不同的驱动程序,因此请确保您正在使用正确的驱动程序。
检查USB协议:您需要确保符合USB协议。如果您的代码或硬件不符合USB协议,可能会导致枚举失败。您可以使用USB协议分析器等工具来检查协议是否正确。
总之,USB枚举是一项复杂的任务,需要细心和耐心。您需要认真检查所有可能导致枚举失败的因素,并逐步排除它们,直到找到解决方案。