修复USB错误:device descriptor read/64, error -62的解决方案

5星 · 超过95%的资源 需积分: 48 88 下载量 170 浏览量 更新于2024-09-15 3 收藏 80KB DOC 举报
"针对USB设备连接时出现'usb 1-1: device descriptor read/64, error -62'错误的解决方案" 该问题源于USB设备在与主机通信时遇到了设备描述符读取错误,具体表现为设备无法正常识别。这个错误通常与硬件兼容性、驱动程序、操作系统内核或USB控制器的配置有关。在描述中提到的场景是针对Linux-2.6.28系统在S3C6410开发板上的USB识别问题。 在解决这个问题的过程中,关键在于对USB控制器的初始化过程进行调整。在kernel26_h/drivers/usb/host/ohci-s3c2410.c文件中,找到了一个可能的修复策略。代码修改了`s3c2410_start_hc`函数,目的是在USB控制器启动时提高其工作频率,确保初始化阶段有足够的速度来正确处理设备描述符的读取,然后再恢复到标准的48MHz工作频率。 首先,代码通过设置`upllvalue`和`upllvalue1`变量调整了USB锁相环(UPLL)的配置,这两个值用于控制USB时钟的频率。`__raw_writel`函数将这些值写入S3C2410_UPLLCON寄存器,从而改变USB控制器的时钟源。之后使用`mdelay`函数引入适当的延迟,以确保频率变化生效。接着,启用USB时钟,并在完成初始化后,通过`info->enable_oc`回调函数恢复原来的频率设置。 错误日志显示,USB设备在连接后多次尝试读取设备描述符但失败,这可能是因为USB控制器的时序问题,导致设备无法正确响应主机的请求。通过调整上述代码,提高了初始化时的时钟频率,可以减少由于时序问题引起的读取错误。 在实际应用中,除了修改内核源码,还可以尝试以下方法解决类似问题: 1. 检查USB线缆和端口:确保USB线缆没有损坏,且端口工作正常。 2. 更新驱动程序:确认使用的驱动程序与硬件和操作系统版本兼容,如果有更新,尝试升级驱动。 3. 检查电源:USB设备需要足够的电源才能正常工作,如果设备功率需求较高,可能需要外接电源。 4. 重置USB控制器:在操作系统中,可以尝试禁用并重新启用USB控制器,或者重启设备以重置控制器。 5. 回溯内核版本:如果问题在特定内核版本出现,可以尝试回退到较早的稳定版本。 解决"usb 1-1: device descriptor read/64, error -62"问题通常需要综合分析硬件、驱动和软件配置,可能涉及修改内核源码、更新驱动或调整系统设置。对于开发环境,更深入地理解和调试USB控制器的初始化过程是至关重要的。