This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM3356:USB0 OTG 闪存驱动器未安装

Guru**** 2551110 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/601505/linux-am3356-usb0-otg-flash-drive-not-mounting

器件型号:AM3356

工具/软件:Linux


USB0 OTG 驱动程序代码是否在 AM335x 上从 SDK6更改为 ProcessorSDK 1.03、这会导致闪存驱动器无法安装? (TI 是否在某个时候没有从 TI81xx 驱动程序迁移到 MUSB?)

在完全相同的客户硬件上(如果移回 SDK6)、相同的闪存驱动器安装良好。  

通过检查寄存器、USB0_ID 线路甚至看起来不能正常工作(我们可以尝试强制使用 USBnMODE [Bit7=IDDIG_MUX]作为实验)?  在引导 Linux 并插入 USB 闪存驱动器后、在正常使用情况下会发生此错误。  已尝试使用各种闪存驱动器。  有时重启可能会修复、但老实说、他们没有尝试自动测试来查看失败的频率。  但当它卡住时、它似乎会一直卡住。 dmesg 中没有显示任何内容(这是有道理的、因为寄存器中没有变化)。

请参阅随附的 USB0_OTG.txt、其中包含以下 USB 寄存器转储:
1. sdkpro 内核和 musb 驱动程序就是这种情况,控制器无法识别将带有闪存驱动器的适配器插入 OTG 端口的情况。
SDK06内核和驱动程序就是这些情况。 第一个是连接驱动器/适配器且器件已正确枚举的寄存器值。  
3.第二个问题是驱动器断开连接。

e2e.ti.com/.../USB0_5F00_OTG.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Joe、

    即使处理器 SDK1.03已经很旧了、我也需要返回检查 MUSB OTG 驱动器切换模式。 但这里是我的几个问题、

    -手动测试,失败的频率是多少?
    -如果将'usbcore.autosuspend=-1'添加到 uboot bootargs 中,是否会有所不同? 不确定其 USB PM 是否与驱动程序相关。
    您能给我发送原理图吗?

    失败时、日志显示 MUSB 控制器无法进入主机模式。 命令的输出是什么
    /sys/bus/platform/devices/musb-hdrc.0.auto/mode
    出现故障时?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    >>我已经查看了/sys/bus/platform/devices/musb-hdrc.0.auto/mode,输出为 a_wait_vrise。
    处理其余项目。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Joe、

    我不确定正在发生什么情况。 请客户在 musb_dsps.c 中调试 OTG_TIMER()函数的流程

    243静态空 OTG_TIMER (unsigned long _musb)
    244{
    245. struct musb * musb =(void *)_musb;
    246. void __iomem *mregs = musb->mregs;
    247. struct device *dev = musb-> controller;
    248. struct dsp_culse * culse = dev_get_drvdata (dev->parent);
    249. const 结构 dsps_musb_wrapper * WRP =胶水->WRP;
    250 U8 devctl;
    251. 无符号长整型标志;
    252. int skip_session = 0;
    253.
    254. /*
    255. *我们轮询是因为 DSP IP 不会暴露多个 OTG 关键型应用
    256 *否则、状态更改事件(来自收发器)。
    257. *
    258. devctl = DSP_readb (mregs、MUSB_DEVCTL);
    259. dev_dbg (musb->控制器,"轮询设备 tl %02x (%s)\n",devctl,
    260 USB_OTG_STACE_STRING (musb->xceiv->OTG->state));
    261
    262. spin_lock_irqsave (&musb->lock、flags);
    263. 切换(musb->xceiv->OTG->状态){
    264 案例 OTG_State_A_WAIT_BCON:
    265 DSP_writeb (musb->mregs、MUSB_DEVCTL、0);
    266 SKIP_SESSION = 1;
    267 /*秋季*/
    268.
    269. OTG_State_a_IDLE 情况:
    270 OTG_State_B_IDLE 情况:
    271. if (devctl & MUSB_DEVCTL_BDEVICE){
    272. musb->xceiv->OTG->state = OTG_State_B_IDLE;
    273. MUSB_DEV_MODE (MUSB);
    274} 否则{
    275. musb->xceiv->OTG->state = OTG_State_a_idle;
    276. MUSB_HST_MODE (MUSB);
    277}
    278. 如果(!(devctl & MUSB_DEVCTL_SESSION)&&!SKIP_SESSION)
    279. DSP_writeb (mregs、MUSB_DEVCTL、MUSB_DEVCTL_Session);
    280 mod_timer (&***->timer、jiffies + WRP->POLL_seconds * Hz);
    281. 中断;
    282. 案例 OTG_State_a_Wait_VFALL:
    283. musb->xceiv->OTG->state = OTG_State_a_Wait_VRISE;
    284. dsp_writel (musb->ctrl_base、wrp -> coreintr_set、
    285. MUSB_INTR_VBUSERROR << WRP->USB_SHIFT);
    286. 中断;
    287. 默认值:
    288 中断;
    289}
    290 spin_unlock_irqrestore (&musb->lock、flags);
    291}
    

    当未连接 USB 设备时,应每2秒调用一次 OTG_TIMER(),第259行应显示具有 b_didle 状态的 Devctl 0x80,应调用第279行以启动会话。

    然后当插入 USB 设备时,由于 ID 引脚现在已接地,启动会话的第279行将建立会话,然后不再调用 OTG_TIMER ()。

    还请打开 DSP_INTERRUPT ()中第323行的调试以查看连接 USB 设备时我们会获得哪些中断。

    323. dev_dbg (musb->控制器,"usbintr (%x) epintr (%x)\n",
    324. usbintr、epintr);
    
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    通过一些脱机通信更新、此问题已解决。

    使用上述调试方法比较旧 SDK 和新 SDK (在同一硬件上)的 dmesg、发现驱动/禁用 USB 5V 时出现系统问题。

    两个版本都发生 VBUS_ERRORS、这是问题的根本原因。 与新内核和驱动程序的不同之处在于,在三个退休人员尝试启动电源后,旧驱动程序将永久尝试。 在[超时]之后,即使外部5V 使能端打开,USB 也不会启动。

    总之、软件驱动程序对 USB OTG 的影响很大(不仅仅是硬件)