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.

[参考译文] LAUNCHXL-F28379D:无法从 USB 示例&quot 获取响应;usb_ex1_dev_serial"

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1372713/launchxl-f28379d-unable-to-get-response-from-usb-example-usb_ex1_dev_serial

主题中讨论的其他器件:TMS320F28379D

工具与软件:

尊敬的 TI 团队:

我正在尝试在 LaunchPad TMS320F28379D 上执行此示例、我将器件配置为 launchpad、而不是 controlCard。
此外、还无法使用其中配置的 SCIA 、因为 Launchpad 上没有它的物理引脚。
 我甚至将其更改为 SCIB、并 将 SCIB 的 RX 和 TC 引脚连接至 TTL、然后为每个端口配置了一个串行终端(一个是 USB 调试器端口、另一个是 TTL)。
但我得到"或非"响应、甚至没有任何一个终端将字符作为输入。

希望尽快得到回复、因为我正在从事的项目非常关键。 请参考

谢谢。此致、
Akshay Mehrotra


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

    我对 TI 的支持真的很失望、一探究竟、我想这会是我会推荐给任何人的最后一款控制器、因为我在使用 F2806x 系列时也遇到了同样的 TI 团队支持问题。

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

    Akshay,

    您需要在 LaunchPad 上对硬件进行以下修改才能使 USB 正常工作。

    USB0DM 为 GPIO42、USB0DP 为 GPIO43。   在 LaunchPad 上、这些引脚物理上连接到隔离器和 FTDI 芯片、因为它们通常用作 SCIATX 和 SCIARX。  您必须确保 SCIA 不再连接到 FTDI 和使用 SCIB。 隔离器上提起的引脚必须传输到 SCIBRX 和 SCIBTX 才能工作。

    同样、软件中需要 SCIBRX 和 SCIBtX 的 GPIO 引脚配置。

    此致

    Siddharth

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

    尊敬的 Siddharth:
    是否需要拆焊 U5隔离器的引脚11和 U7隔离器的引脚4以隔离 SCIA?
    因为电路板仍有可能损坏。
    此外、正如您所说的、SCIB 引脚需要连接至被提升的引脚、然后我们是否需要将一个单独的 USB 连接器连接至 DP 和 DM?

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

    您好、Akshay

    我建议您对 USB 使用 controlCARD (控制卡)、而不是 Launchpad。  
    在进行这些硬件修改时、可能会损坏电路板。 您必须将 GPIO42和 GPIO43 (提起的隔离器引脚下方的焊盘)连接到 外部 USB 电缆的 USB0DM 和 USB0DP (当然还有 GND)、以便真正测试 USB 连接

    此致

    Siddharth

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

    尊敬的 Siddharth:
    感谢您的建议、但到目前为止、我们的时间很短、因此只需继续使用此电路板、因为大多数项目都是根据此电路板开发的。

    USB 是最后要实现的部分。 我正在尝试运行示例、但仍然无法创建有效端口。

    设备管理器中创建并显示了一个节点、但显示设备描述符已失败。

    我已经在示例中停用了 SCI 通信侧、因为我们不需要 USB 转 SCI 通信部件。 至少应创建 CDC 端口。

    是否还有任何其他需要从软件或硬件方面解决的问题?

    因为我已经从我身边彻底检查了它、却找不到。

    此外、我还必须在提供库中实现以下行、以强制它进入设备模式

    void
    USBStackModeSet(uint32_t ui32Index, tUSBMode iUSBMode,
                    tUSBModeCallback pfnCallback)
    {
        //
        // Check the arguments.
        //
        ASSERT(ui32Index == 0);
    
        //
        // Remember the mode so that we can steer the interrupts appropriately.
        //
        g_iUSBMode = iUSBMode;
    
        //
        // Remember the callback pointer.
        //
        g_pfnUSBModeCallback = pfnCallback;
    
        //
        // If we are being asked to be either a host or device, we will not be
        // trying to auto-detect the mode so make the callback immediately.
        
        //*********** Below Line has been added
        iUSBMode = eUSBModeDevice;
        //*********** Above Line has been added
    
        if((iUSBMode == eUSBModeDevice) || (iUSBMode == eUSBModeHost))
        {
            //
            // Make sure that a callback was provided.
            //
            if(g_pfnUSBModeCallback)
            {
                g_pfnUSBModeCallback(0, iUSBMode);
            }
        }
    }


    void
    USBDCDInit(uint32_t ui32Index, tDeviceInfo *psDevice, void *pvDCDCBData)
    {
        const tConfigHeader *psHdr;
        const tConfigDescriptor *psDesc;
    
        //
        // Check the arguments.
        //
        ASSERT(ui32Index == 0);
        ASSERT(psDevice != 0);
    
        g_ppsDevInfo[0] = psDevice;
        g_psDCDInst[0].pvCBData = pvDCDCBData;
    
        //
        // Initialize the Device Info structure for a USB device instance.
        //
        USBDCDDeviceInfoInit(ui32Index, psDevice);
    
        //
        // Should not call this if the stack is in host mode.
        //
        ASSERT(g_iUSBMode != eUSBModeHost);
        ASSERT(g_iUSBMode != eUSBModeForceHost);
    
        //
        // Default to device mode if no mode was set.
        //
        if(g_iUSBMode == eUSBModeNone)
        {
            g_iUSBMode = eUSBModeDevice;
        }
        
        //**** THIS BELOW LINE HAS ALSO BEEN ADDED SEPARATELY
        g_iUSBMode = eUSBModeForceDevice;
        //
        // Only do hardware update if the stack is in not in OTG mode.
        //
        if(g_iUSBMode != eUSBModeOTG)
        {
            //
            // Reset the USB controller.
            //
    #ifdef __TMS320C28XX__
            SysCtl_resetPeripheral(SYSCTL_PERIPH_RES_USBA);
    #else
            SysCtl_resetPeripheral(SYSCTL_PERIPH_RES_USB);
    #endif
    
            //
            // Enable Clocking to the USB controller.
            //
    #ifdef __TMS320C28XX__
            SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_USBA);
    #else
            SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_USB);
    #endif
            //
            // Force device mode if requested.
            //
            if(g_iUSBMode == eUSBModeForceDevice)
            {
                USBDevMode(USB_BASE);
            }
            else if(g_iUSBMode == eUSBModeDevice)
            {
                //
                // To run in active device mode the OTG signals must be active.
                // This allows disconnect to be detected by the controller.
                //
                USBOTGMode(USB_BASE);
            }
    
            //
            // In all other cases, set the mode to device this function should not
            // be called in OTG mode.
            //
            g_iUSBMode = eUSBModeDevice;
        }
    
        //
        // Initialize the USB DMA interface.
        //
        g_psDCDInst[0].psDMAInstance = USBLibDMAInit(USB_BASE);
    
        //
        // Initialize the USB tick module.
        //
        InternalUSBTickInit();
    
        //
        // Get a pointer to the default configuration descriptor.
        //
        psHdr = psDevice->ppsConfigDescriptors[
                                    g_psDCDInst[0].ui32DefaultConfiguration - 1];
        psDesc = (const tConfigDescriptor *)(psHdr->psSections[0]->pui8Data);
    
        if((psDesc->bmAttributes & USB_CONF_ATTR_PWR_M) == USB_CONF_ATTR_SELF_PWR)
        {
            g_psDCDInst[0].ui8Status |= USB_STATUS_SELF_PWR;
        }
        else
        {
            g_psDCDInst[0].ui8Status &= ~USB_STATUS_SELF_PWR;
        }
    
        //
        // Only do hardware update if the stack is not in OTG mode.
        //
        if(g_iUSBMode != eUSBModeOTG)
        {
            //
            // Get the current interrupt status.to clear all pending USB
            // interrupts.
            //
            USBIntStatusControl(USB_BASE);
            USBIntStatusEndpoint(USB_BASE);
    
            //
            // Enable USB Interrupts.
            //
            USBIntEnableControl(USB_BASE, USB_INTCTRL_RESET |
                                USB_INTCTRL_DISCONNECT |
                                USB_INTCTRL_RESUME |
                                USB_INTCTRL_SUSPEND |
                                USB_INTCTRL_SOF);
            USBIntEnableEndpoint(USB_BASE, USB_INTEP_ALL);
    
            //
            // Attach the device using the soft connect.
            //
            USBDevConnect(USB_BASE);
    
            //
            // Enable the USB interrupt.
            //
        //*** AT THIS INTERRUPT ENABLE FUNCTION THE USB CONNECTION FAILURE MESSAGE POPS UP    
            Interrupt_enable(g_psDCDInst[0].ui32IntNum);
        }
    }
    


    我还提到在上述代码中弹出 USB 器件连接消息的注释。
    置于共享代码的最后一部分。 当" Interrupt_enable (g_psDCDInst[0].ui32IntNum);"被单步执行时。

    请仔细查看、给出您的宝贵建议。

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

    您好!

    当 USB 时钟频率(AUXPLLCLK) 配置不正确时、我遇到了这样的错误。   Launchpad 具有10MHz XTAL 、而控制卡上的 XTAL 为20MHx XTAL。  请确保    用于 USB 的 SYSCLK 和辅助时钟(AUXPLLCLK)被配置为60MHz。

    此致

    Siddharth

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

    谢谢 Siddharth 的支持。
    你的建议是对的。
    我更改了的 PLL 时钟的值没有反映、使用时钟树后、我能够为  AUXPLLCLK 生成正确的值。