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:[DM368][Linux]我们可以#39;t 在 uboot 中启用 USB 2.0。

Guru**** 2589300 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/589677/linux-dm368-linux-we-can-t-enable-usb-2-0-in-uboot

工具/软件:Linux

我们希望在 TI uboot 中启用 USB 2.0 (B 外设)。

但它总是失败的。 (USB 1.1正常)

我们的 USB 器件是 fastboot 协议。

在 Linux PC 中、该器件将成为未知器件。

但是、如果我们将其设置为 USB 1.1、一切都很好。

它现在在 Get 设备描述符上阻止。

在 DUT 被设置为寻址后,Get 设备描述符将出现错误。

[设备日志] Device_uart_log.txt

intx:0x1、intrax:0x0、intrausb:0x8、ep0_state:0x0
csr0:0x1、faddr:0xc len:0x8
ep0_recv_setup device->device_state:0x5
ep0_endpoint->sent:0x12 ep0_话 术-> actual_length:0x12
MUSB _ep0_TX_READY_AND_LAST
intx:0x1、intrax:0x0、intrausb:0x8、ep0_state:0x0
csr0:0x5、faddr:0xc len:0x0

intx:0x0、intrax:0x0、intrausb:0xc、ep0_state:0x0
UDC IRQ MUSB_INTR_RESET
intx:0x1、intrax:0x0、intrausb:0x8、ep0_state:0x0
csr0:0x1、faddr:0x0 len:0x8
错误:musb_perI_ep0_idle 地址与 SW 12与 HW 0不匹配

[PC log] PC_Linux_kmsg.txt

[262.550584] USB 1-1:器件描述符读取/全部、错误-71

下面是我的 USB 描述符。

/* USB 描述符*/
静态结构 USB_device_descriptor device_descriptor ={
   .bLength = sizeof (struct USB_device_descriptor)、
   bDescriptorType =   USB_DT_DEVICE、
   .bcdUSB =      CPU_TO_le16 (0x0200)、
   .bDeviceClass =      0x00、
   .bDeviceSubClass =   0x00、
   .bDeviceProtocol =   0x00、
   .bMaxPacketSize0 =   0x40、
   idVendor =      cpu_TO_le16 (CONFIG_USBD_VendorID)、
   idProduct =      CPU_TO_le16 (CONFIG_USBD_ProductID)、
   bcdDevice =      CPU_TO_le16 (USBFBT_BCD_device)、
   .iManufacturer =   STR_Manufacturer、
   iProduct =      STR_PRODUCT、
   iSerialNumber =   STR_serial、
   .bNumConfigurations =   NUM_CONFIGs
};

我不知道为什么 PC 获取描述符失败。

USB 描述符看起来正常。

Darkhou

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

    附加失败的日志。

    PC_Linux_kmsg.txt

    e2e.ti.com/.../8640.PC_5F00_Linux_5F00_kmsg.txt

    Device_uart_log.txt

    e2e.ti.com/.../7181.Device_5F00_uart_5F00_log.txt

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

    良好的调试日志。

    问题似乎来自以下日志。 您能否检查 ep0_recv_setup()内的返回-1是否来自何处? 这将提供进一步的线索。

    intx:0x1、intrax:0x0、intrausb:0x8、ep0_state:0x0
    csr0:0x1、faddr:0xc len:0x8
    ep0_recv_setup device->device_state:0x5
    器件到主机:0x6
    musb_perI_ep0_TX_DATA_request err:0xffffff--- >错误
    MUSB 设置_EP0_TX_DATA_REQUEST SET_EP0_STATE 空闲
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、侯

    此外、请确保功率寄存器中的 HSENAB 位已置位且不会清零。

    在代码中,musb_peri_softconnect()函数。
    Power |= MUSB_POWER_HSENAB;->已设置此项
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该位被置位(MUSB_POWER_HSENAB)
    在我们调用 musb_peri_softconnect()后、MUSB_POWER_HSMODE 变为1。

    如果我们没有在 musb_peri_softconnect()中设置此位,USB 设备可以正常运行。
    但它以 USB 1.1运行、速度太慢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    奇怪的是、设置此位后、使用较旧的.bcdUSB = cpu_TO_le16 (0x0110)、您得到什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、我现在找到了根本原因。
    这是我的错误。

    我将 CONFIG_USBD_VERSION 配置添加到 dm368中、将 USB_BCD_VERSION 添加到0x0200。
    但它会影响下面的 USB_DEVICE_Instance 数据结构。

    ~/uboot/include/usbdevice.h
    结构 USB_device_instance{

    /*通用*/
    char *name;
    struct usb_device_descriptor * device_descriptor;/* per device descriptor *
    #if 已定义(CONFIG_USBD_HS)
    struct usb_qualer_descriptor * qualer_descriptor;
    #endif

    因此、我移除 CONFIG_USBD_HS 并在电路板配置中定义 USB_BCD_VERSION。

    此问题现已解决。
    感谢你的帮助。

    您提到的线索是根本原因。
    因为 device->configurations 成为0x810a8014。
    在正常情况下应为1。

    失败日志
    intx:0x1、intrax:0x0、intrausb:0x8、ep0_state:0x0
    csr0:0x1、faddr:0x1c len:0x8
    ep0_recv_setup device->device_state:0x5
    器件到主机:0x6
    ep0_get_descriptor max:0xff descriptor_type:0x2、index:0x0
    配置:0x0,设备->配置:0x810a8014
    USBD_DEVICE_CONFIGURAY_descriptor 失败:0
    musb_perI_ep0_TX_DATA_Request 错误:0xffffffff
    MUSB 设置_EP0_TX_DATA_REQUEST SET_EP0_STATE 空闲
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、侯

    知道您已经解决了这个问题。 感谢您分享问题和解决方案。 请关闭此问题。