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/OMAP-L138:主机模式下的 USB0

Guru**** 2618835 points

Other Parts Discussed in Thread: OMAP-L138

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/660403/linux-omap-l138-usb0-in-host-mode

器件型号:OMAP-L138
主题中讨论的其他器件:OMAPL138DA8XX

工具/软件:Linux

您好!

我使用的是 OMAPL138 LCDK (TMDSLCDK138)、PROCESSOR-SDK-LINUX_OMAPL138 04_01_00_06。

我需要同时在主机模式下使用 USB0和 USB1 (以便连接 USB 闪存和 USB 网络(以太网)器件)。 USB1成功运行。 USB0在默认 SDK 配置下不起作用。

我在这个论坛上发现了很多与 USB OTG (USB0)相关的类似问题、但是没有人帮我。 所有这些都是关于旧 SDK 的。

是否有人可以帮助您在 实际的 Linux SDK 中以主机模式启用 USB0?

我阅读了 Linux 软件开发人员指南→Linux 内核→USB   、但它仅包含有关 AM335x 的信息。

与 USB 相关的 dmesg 片段:

usbcore:注册的新接口驱动程序 usbfs
usbcore:注册的新接口驱动程序集线器
usbcore:注册了新设备驱动程序 USB
[确定]已启动 udev 冷插拔所有设备。
OHCCI_hcd:USB 1.1 "打开"主机控制器(OHCI)驱动程序
OHCI-da8xx:DA8XX
OHCI-da8xx ohci-da8xx:USB 主机控制器
OHCI-da8xx ohci-da8xx:已注册新的 USB 总线、分配的总线编号1
OHCI-da8xx ohci-da8xx:IRQ 59、IO 内存0x01e25000
集线器1-0:1.0:找到 USB 集线器
集线器1-0:1.0:检测到1个端口

lsusb 输出:

root@omapl138-lcdk:~# lsusb
总线001设备001:ID 1d6b:0001 Linux Foundation 1.1根集线器

谢谢

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

    lsmod 返回:
    子内核 197578 3 musb_hdrc、ohci_hcd、ohci_da8xx

    USB 的接口。 因此,您应该按照上面引用的 wiki ( processors.wiki.ti.com/.../Processor_SDK_Linux_MUSB )启用 USB 驱动程序。
    在 defconfig 文件中启用驱动程序后、应在 DTS 文件(arch/arm/boot/dts/da850-lcdk.dts)中添加两个 USB 实例。 按照 wiki 中的说明进行操作。

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

    感谢您的快速回复。

    我尝试关注这个 wiki、但它没有帮助。 页面 processors.wiki.ti.com/.../MUSB_Linux_Porting_Guide 仅包含 AM335x 信息。
    是否有任何正文可以与 OMAP-L138的配置为 usb0共享 DTS 文件? Wiki 未介绍如何配置它。

    由于尝试构建内核、我有 musb_hdrc 内核模块、但它不会自动加载。
    如果调制、则:
    root@omapl138-lcdk:~ modprobe musb_hdrc
    root@omapl138-lcdk:~# lsmod | grep usb
    MUSB 84153 0
    UDC_CORE 19576 1 musb_hdrc
    usbcore 196362 3 musb_hdrc、ohci_hcd、ohci_da8xx
    USB_common 4500 3 UDC_core、musb_hdrc、usbcore
    PHY_DA8xx_USB 3357 1.


    之后、usb0也不起作用。

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

    [引述]我尝试关注这个 wiki、但它没有帮助。 页面 processors.wiki.ti.com/.../MUSB_Linux_Porting_Guide 仅包含 AM335x 信息。[/quot]
    wiki 清楚地指出、USB DTS 配置在内核文档中进行了解释:documentation/devicetree/bindings/usb/am33xx-usb.txt。 这位于 SDK 随附的 Linux 内核源代码中。 USB 的配置类似、只需在 arch/arm/boot/dts/da850-lcdk.dts 中进行配置即可。

    您可以在 arch/arm/boot/dts/da859.dtsi 中看到 usb0 dr-mode 当前设置为"OTG"。 您可以将尝试将其设置为"host":

    USB0:USB@47401000{
    兼容="ti、musb-am33xx";
    寄存器=<0x47401400 0x400
    0x47401000 0x200>;
    reg-names ="mC"、"control";

    中断=<18>;
    中断名称="MC";
    -DR_MODE ="OTG";
    + DR_MODE ="主机";

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

    您好!

    在 arch/arm/boot/dts/da850/dtsi 中将 dr_mode 设置为"host"没有帮助。

     默认情况下、在 arch/arm/boot/dts/da850-lcdk.dts 中启用 USB0和 USB1。

    我尝试 根据 Documentation/devicetree/bindings/usb/da8xx-usb.txt 设置 da850/dtsi、但也没有帮助。

    我的内核配置: e2e.ti.com/.../tiusb_2E00_config

    引导日志: e2e.ti.com/.../3487.boot_2D00_log.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请猜猜一下。 较旧的内核允许手动模式选择。 在较新的内核中、模式倾向于由 ID 引脚控制。 是否已尝试将 LCDK 上的 USB ID 引脚接地。 应该有一个跳线。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Norman、

    您实际上是正确的。 下面是 musb_core.c 驱动程序的摘录,特别是 musb_start():
    /*会话启动时间:
    *(a) ID 接地的 IRQ、主机模式;
    *(b) VBUS 存在/连接 IRQ、外设模式;
    *(c)使用 SRP 启动外设
    *


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

    大家好、

    是的、我已经尝试将 ID 引脚接地(JP1)。 此外、USB OTG 电缆将 ID 引脚接地。 当我通过 OTG 电缆将 USB 设备连接到 J2时、它上没有+5V 电压。

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

    Petr、您好!

    我对 phy_mode = PHY_MODE_USB_HOST 进行硬编码;通过修改 drivers/usb/musb/da8xx.c:

    静态 int da8xx_musb_set_mode (struct musb * musb、u8 musb_mode)

       struct da8xx_culse * culse = dev_get_drvdata (musb->controller->parent);
       enum phy_mode phy_mode;

    /*
    *当 PHY 强制处于器件或主机模式时、它会出现一些问题。
    *除非用户请求另一种模式、否则请将 PHY 配置为 OTG 模式。
    *
      如果(!musb->is 初始化)

    +     返回 phy_set_mode (胶合->phy、PHY_MODE_USB_host);

    -         返回 phy_set_mode (胶合->phy、PHY_MODE_USB_OTG);

    + phy_mode = PHY_MODE_USB_host;

    - 开关(MUSB 模式){

             -案例 MUSB_HOST://强制 VBUS 有效,ID = 0 */

    -               phy_mode = PHY_MODE_USB_host;

                   -中断;

              -案例 MUSB_Peripheral://强制 VBUS 有效,ID = 1 */

    -               phy_mode = PHY_MODE_USB_DEVICE;

                   -中断;

              -案例 MUSB_OTG://不要覆盖 VBUS/ID 比较器*/

    -              phy_mode = PHY_MODE_USB_OTG;

                  -中断;

    -           默认值:

    -           return -EINVAL;

    -}

     返回 phy_set_mode (胶水->phy、phy_mode);


    进行上述修改后、我能够在 OMAP-L138 LCDK 上的 USB_OTG 端口(J2)上连接 USB 闪存驱动器(OTG 端口在主机模式下工作)。 以下是连接闪存驱动器后的日志:
    root@omapl138-lcdk:~# da8xx_musb_interrupt 302:VBUS 错误权变措施(延迟到来)
    USB 2-1:使用 musb-hdrc 的新型高速 USB 器件编号2
    USB-STORAGE 2-1:1.0:检测到 USB 海量存储设备
    SCSI host1:USB-storage 2-1:1.0
    usbcore:注册的新接口驱动程序 USB 存储
    SCSI 1:0:0:0:直接访问 Kingston DataTraveler 2.0 PMAP PQ:0 ANSI:4.
    SD 1:0:0:0:[SDA] 15240576 512字节逻辑块:(7.80 GB/7.27 GiB)
    SD 1:0:0:0:0:[SDA]写保护关闭
    SD 1:0:0:0:[SDA]找不到缓存模式页
    SD 1:0:0:0:[SDA]假设驱动器高速缓存:写入
    SDA:SDA1
    SD 1:0:0:0:[SDA]连接的 SCSI 可移动磁盘

    我意识到这可能不是最巧妙的解决方案、但请尝试一下、看看它是否适用于您的情况。 在对 da8xx.c 驱动程序进行上述修改后、我在引导日志中没有看到任何奇怪的东西。

    此致、
    Yordan

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

    我修改了 drivers/USB/MUSB /da8xx.c、但 USB_OTG 端口不提供+5V。 内核已使用"host"和"OTG" dr_mode 进行编译(在 arch/arm/boot/dts/da850/dtsi 中)。

    当我尝试使用内核3.3运行旧的 Linux 映像时(它已写入 LCDK 套件中的 SD 卡)、USB_OTG 端口确实提供+5V、但 USB 器件未被识别(可能需要的驱动程序尚未在该映像中编译)。 我注意到了弦:

    musb-hdrc:6.0版,?dma?,OTG (外设+主机)
    musb-hdrc musb-hdrc:DMA 类型:dma-cppi41
    MUSB255控制器的 USBSS 版本= 4ea11003
    正在等待 USB PHY 时钟正常...
    musb-hdrc musb-hdrc:位于 fee00000的 USB OTG 模式控制器、使用 DMA、IRQ 58

    在我的引导日志中、没有类似这样的字符串。 内核配置中的 MUSB 驱动程序配置错误。 我的引导日志已附加在上面。

    谢谢

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

    您好!

    USB_OTG 端口(J2 (迷你 USB 端口)上的引脚1):

    实际上在我的 LCDK 上提供+5V 电压、请参阅下面的示波器测量:

    正如我所说的、通过我在 da8xx.c 中所做的修改、我能够在 USB_OTG 端口上连接一个 USB 闪存驱动器(LCDK 作为主机工作)。  

    您使用的是 LCDK 还是定制电路板? 如果这是定制板、请检查您的硬件设计。

    此致、
    Yordan

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

    您是否仅根据默认配置修改 drivers/USB/musb/da8xx.c? 内核配置和 arch/arm/boot/dts/da850/dtsi 如何?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我使用默认配置。 我在 arch/arm/boot/dts/da850/dtsi 中将 dr_mode 设置为"host"、并在 da8xx.c 驱动程序中将 phy_mode 硬编码为 USB_host。

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

    您好、Yordan

    感谢您提供有用的提示。 此修改成功。

    我的更改尚未应用、因为我使用了 TFTP 和 NFS 引导。 由 setup.sh 创建的 Minicom 脚本仅用于通过 TFTP 加载内核的 uboot 环境。 设备树 blob (*。dtb)已从 MMC 加载(默认情况下)。 因此、只有内核和模块已更新(而不是 da850-lcdk.dTB)。

    我修复了该产品的 minicom 脚本: e2e.ti.com/.../setup_5F00_uboot_2D00_env.minicom.zip

    结果:要在主机模式下使用 USB_OTG、我们需要修改 arch/arm/boot/dts/da850-lcdk.dts 中的 usb0:

    usb0{(&U)
    DR_MODE ="主机";
    状态="正常";
    };

    它是针对默认配置的单次修改。 它已使用 SDK 04_01_00_06进行测试。

    谢谢、Yordan

    此致