USBH device tree configuration

来自百问网嵌入式Linux wiki

Article purpose

本文介绍如何在将 USBH internal peripheral 分配给 Linux® 操作系统时对其进行配置。 在这种情况下,它由USB framework控制。

使用device tree机制执行配置。

“ USBH Linux驱动程序” (EHCI[1], OHCI[2]) ,它们在USB framework中注册了相关信息。

DT bindings documentation

STM32 USBH internal peripheral 是一个USB主机设备,由EHCI控制器和OHCI控制器组成。 每个控制器代表一个单独的绑定文档:

  • 通用USB EHCI控制器设备树绑定[3] d文档处理标准EHCI控制器核心资源(例如寄存器,时钟,重置,中断等)。
  • 通用USB OHCI控制器设备树绑定[4] 文档处理标准OHCI控制器核心资源(例如寄存器,时钟,复位,中断等)。

每个控制器使用USB framework提出的通用USB主机控制器设备(HCD)属性和通用USB属性:

  • 通用USB HCD设备树绑定[5] 文档处理USB主机控制器PHY资源。
  • 通用USB设备树绑定[6] 通用USB设备树绑定文档涉及USB可选属性(例如,最大速度、同伴等)。

DT configuration

该硬件描述是“STM32微处理器”设备树文件(扩展名为.dtsi)和“板子”设备树文件(扩展名为.dts)的组合。 有关设备树文件分割的说明,请参见 Device tree

STM32CubeMX可用于生成板卡设备树。 有关更多详细信息,请参考 How to configure the DT using STM32CubeMX

DT configuration (STM32 level)

在stm32mp157c.dtsi[7]中声明。

它们由一组属性组成,用于描述 USBH_EHCI and USBH_OHCI 控制器:寄存器地址,时钟,复位,中断...

usbh_ohci: usbh-ohci@5800c000 { 			/* USBH OHCI controller */
	compatible = "generic-ohci";
	reg = <0x5800c000 0x1000>;
	clocks = <&rcc USBH>;
	resets = <&rcc USBH_R>;
	interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
	status = "disabled";
};

usbh_ehci: usbh-ehci@5800d000 { 			/* USBH EHCI controller */
	compatible = "generic-ehci";
	reg = <0x5800d000 0x1000>;
	clocks = <&rcc USBH>;
	resets = <&rcc USBH_R>;
	interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
	companion = <&usbh_ohci>;  			/* When USBH EHCI controller detects a full or low speed device on a port,
	status = "disabled";  				 * that port is switched over to the USBH OHCI companion[6] controller */
};
Warning.png 该设备树部分与STM32微处理器有关。 它必须保持原样,而不能由最终用户修改。

DT configuration (board level)

请按照以下章节中描述的顺序在板上配置和启用USBH。

USBH 使用片上USBPHYC最多支持两个物理端口:

  • USBPHYC port#1 is assigned to the USBH
  • USBPHYC port#2 can be statically assigned to the USBH or to the OTG
Info.png 请参考USBPHYC device tree configuration for additional information on the USBPHYC configuration

USBH由EHCI和OHCI控制器组成:

  • 通过EHCI控制器实现高速运行
  • 全速和低速操作可以通过以下任一方式实现:
    • 连接到下游端口的高速HUB IC
    • OHCI控制器

DT configuration with external high speed-HUB

  • 通过设置status =“ okay”启用usbh_ehci
  • 通过physphy-names配置PHY
Info.png 当所有低速和全速流量由直接连接到下游端口的高速集线器管理时,无需启用usbh_ohci

DT configuration with OHCI to achieve full-speed and low-speed

  • 通过设置status =“ okay”启用usbh_ehci
  • 通过设置status =“ okay”启用usbh_ohci

对于两个控制器:

  • 通过physphy-names配置PHY

DT configuration examples

DT configuration when using port0 with a high-speed hub

下例显示了使用物理端口0(未使用第二个物理端口)时如何配置USBH。

板上使用了高速集线器控制器IC:无需启用usbh_ohci,所有低速和全速流量都由集线器管理。

&usbh_ehci {
	phys = <&usbphyc_port0>;           /* Use USBPHYC HS PHY port #1, mapped on USBH controller */
	phy-names = "usb";
	status = "okay";
};

/* No need to configure and enable usbh_ohci */

DT configuration when using port0

下面的示例显示了如何在使用物理端口0(第二个物理端口未使用,或由 OTG 使用)并且不使用高速集线器的情况下配置USBH。

&usbh_ehci {
	phys = <&usbphyc_port0>;           /* Use USBPHYC HS PHY port #1, mapped on USBH controller */
	phy-names = "usb";
	status = "okay";
};

&usbh_ohci {
	phys = <&usbphyc_port0>;           /* Use USBPHYC HS PHY port #1, mapped on USBH controller */
	phy-names = "usb";
	status = "okay";
};

DT configuration when using the two physical ports

以下示例显示了使用这两个物理端口时如何配置USBH。

&usbh_ehci {
	phys = <&usbphyc_port0>, <&usbphyc_port1 1>;     /* Use USBPHYC HS PHY port #1, mapped on USBH controller */
                                                         /* Use USBPHYC HS PHY port #2, configure UTMI switch to select USBH controller */
	phy-names = "usb", "usb";
	status = "okay";
};

&usbh_ohci {
	phys = <&usbphyc_port0>, <&usbphyc_port1 1>;     /* Use USBPHYC HS PHY port #1, mapped on USBH controller */
                                                         /* Use USBPHYC HS PHY port #2, configure UTMI switch to select USBH controller */
	phy-names = "usb", "usb";
	status = "okay";
};

How to configure the DT using STM32CubeMX

STM32CubeMX 工具可用于配置STM32MPU设备并获取相应的 platform configuration device tree 文件。
STM32CubeMX可能不支持以上 DT bindings documentation 段中描述的所有属性。如果是这样,该工具会在生成的设备树中插入“用户部分”。 然后可以编辑这些部分以添加一些属性,并将它们一代一代地保留下来。 有关更多信息,请参见 STM32CubeMX 用户手册。