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.

[参考译文] CCS/TMS320C6748:已连接时连接 USB

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/565691/ccs-tms320c6748-connect-usb-when-already-connected

器件型号:TMS320C6748
Thread 中讨论的其他器件: OMAPL138

工具/软件:Code Composer Studio

我将 TMS320C6748用作 USB2.0器件。 每当我从 CCS 启动调试会话时、USB 器件会出现在 Windows 器件管理器中。 当我断开 CCS 与目标的连接、然后开始新的调试会话时、USB 器件在调用 USBDBulkInit 期间从总线断开。 更具体地说、当设置 ctrlr 寄存器中的 RESET 位时、它会断开连接。 我知道当 USB 硬件复位时 USB 设备与总线断开、但我该怎么做才能使其恢复到总线上?

复位后的某些行会执行以下代码

//确保我们断开与主机的连接一段时间。 这可确保
//主机将枚举我们,即使我们以前
连接到了总线。
//
USBDevDisconnect (USB0_BASE);

//
等待大约100mS。
//
delay (100);

//
//使用软连接连接连接设备。
//
USBDevConnect (USB0_BASE); 

这看起来正好符合我的情况、但它不会将我的 USB 器件带回到总线上

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

    很抱歉耽误了对此主题的回复。 您是否使用 Starterware 在 C6748 LCDK 上运行此实验?
    最好您告诉我们我们如何在我们的设置中重现此情况、以便我们对此提供一些指导。

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

    您好、Rahul、

    我们将在基于 C6748 LCDK 的定制板上运行该实验。 问题似乎在于 USB 库无法正确处理挂起的 USB 中断。 我们已经能够通过向 StarterWare 添加一些代码来解决该问题。 在 usbdenum.c 文件中、在方法 USBDCDInit 中、我们已将代码从中进行了更改

    USBReset (USB_0_OTGBASE);
    
    //
    打开 USB PHY 时钟。
    //
    UsbPhyOn(); 

    更改为

    USBReset (USB_0_OTGBASE);
    
    USBClearInt (USB_0_OTGBASE);
    HWREG (USB_0_OTGBASE + USB_0_END_OD_INTR)= 0;
    
    //
    打开 USB PHY 时钟。
    //
    UsbPhyOn(); 

    如果您认为这是正确的、请告知我们。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、此代码似乎是实施修复的正确方法。 我们仍在与内部设计人员一起检查是否应在 USB 控制器软复位后显式清除中断、或者是否有其他方法可以复位模块以便清除中断。

    具有相似 USB 控制器的其他器件(如 AM335x)实施了 USB 包装程序、允许执行子系统级复位、这正是 Linux 驱动程序实现该复位的方式、但对于 C6748和 OMAPL138、这可能是处理挂起中断或清除先前中断设置的唯一方法。

    此致、
    Rahul