“USBH device tree configuration”的版本间的差异

来自百问网嵌入式Linux wiki
 
(未显示2个用户的9个中间版本)
第1行: 第1行:
{{DISPLAYTITLE:USBH设备树配置}}
+
== Article purpose ==
 +
本文介绍如何在将 [[USBH internal peripheral|'''USBH''' internal peripheral]] 分配给 Linux<sup>&reg;</sup> 操作系统时对其进行配置。 在这种情况下,它由[[USB overview|USB framework]]控制。
  
[[Category:Linux_Operating_System]]
+
使用[[Device tree|device tree]]机制执行配置。
[[Category:High_speed_interface]]
+
 
[[Category:USB]]
+
“ USBH Linux驱动程序” (EHCI<ref>{{CodeSource | Linux kernel | drivers/usb/host/ehci-platform.c }}, Generic platform ehci driver</ref>, OHCI<ref>{{CodeSource | Linux kernel | drivers/usb/host/ohci-platform.c }}, Generic platform ohci driver</ref>) ,它们在[[USB overview|USB framework]]中注册了相关信息。
 +
 
 +
== DT bindings documentation ==
 +
[[USBH internal peripheral| STM32 USBH internal peripheral]] 是一个USB主机设备,由'''EHCI'''控制器和'''OHCI'''控制器组成。
 +
每个控制器代表一个单独的绑定文档:
 +
* 通用USB EHCI控制器设备树绑定<ref name="ehci_bindings">{{CodeSource | Linux kernel | Documentation/devicetree/bindings/usb/usb-ehci.txt}} Generic USB EHCI controller device tree bindings</ref> d文档处理标准EHCI控制器核心资源(例如寄存器,时钟,重置,中断等)。
 +
* 通用USB OHCI控制器设备树绑定<ref name="ohci_bindings">{{CodeSource | Linux kernel | Documentation/devicetree/bindings/usb/usb-ohci.txt}} Generic USB OHCI controller device tree bindings</ref> 文档处理标准OHCI控制器核心资源(例如寄存器,时钟,复位,中断等)。
 +
 
 +
每个控制器使用[[USB overview|USB framework]]提出的通用USB主机控制器设备(HCD)属性和通用USB属性:
 +
* 通用USB HCD设备树绑定<ref name="hcd_bindings">{{CodeSource | Linux kernel | Documentation/devicetree/bindings/usb/usb-hcd.txt}} Generic USB HCD (Host Controller Device) device tree bindings</ref> 文档处理USB主机控制器PHY资源。
 +
* 通用USB设备树绑定<ref name="generic_bindings">{{CodeSource | Linux kernel | Documentation/devicetree/bindings/usb/generic.txt}} Generic USB device tree bindings</ref> 通用USB设备树绑定文档涉及USB可选属性(例如,最大速度、同伴等)。
 +
 
 +
== DT configuration ==
 +
该硬件描述是“''STM32微处理器”''设备树文件(扩展名为.dtsi)和“''板子”设备树文件(扩展名为.dts)的组合。 有关设备树文件分割的说明,请参见 [[Device tree]]
 +
 
 +
'''STM32CubeMX'''可用于生成板卡设备树。 有关更多详细信息,请参考 [[#How_to_configure_the_DT_using_STM32CubeMX|How to configure the DT using STM32CubeMX]]
 +
===DT configuration (STM32 level) ===
 +
在stm32mp157c.dtsi<ref name="stm32mp157c_dtsi">{{CodeSource | Linux kernel | arch/arm/boot/dts/stm32mp157c.dtsi}}, STM32MP157C device tree file</ref>中声明。
 +
 
 +
它们由一组属性组成,用于描述 [[USBH_internal_peripheral#Features|USBH_EHCI and USBH_OHCI]] 控制器:寄存器地址,时钟,复位,中断...
 +
 
 +
'''usbh_ohci''': usbh-ohci@5800c000 { {{Highlight|/* 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 { {{Highlight|/* 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>;'''  {{Highlight|/* When USBH EHCI controller detects a full or low speed device on a port,}}
 +
status = "disabled";  {{Highlight| * that port is switched over to the USBH OHCI '''companion'''<ref name="generic_bindings">{{CodeSource | Linux kernel | Documentation/devicetree/bindings/usb/generic.txt}} Generic USB device tree bindings</ref> controller */}}
 +
};
 +
{{Warning|该设备树部分与STM32微处理器有关。 它必须保持原样,而不能由最终用户修改。}}
 +
 
 +
=== DT configuration (board level) ===
 +
请按照以下章节中描述的顺序在板上配置和启用USBH。
 +
 
 +
[[USBH_internal_peripheral|USBH]] 使用片上[[USBPHYC_internal_peripheral|USBPHYC]]最多支持两个物理端口:
 +
* USBPHYC port#1 is assigned to the USBH
 +
* USBPHYC port#2 can be statically assigned to the USBH or to the [[OTG_internal_peripheral|OTG]]
 +
{{Info|请参考[[USBPHYC device tree configuration]] for additional information on the USBPHYC configuration}}
 +
[[USBH_internal_peripheral|USBH]]由EHCI和OHCI控制器组成:
 +
* 通过EHCI控制器实现高速运行
 +
* 全速和低速操作可以通过以下任一方式实现:
 +
** 连接到下游端口的高速HUB IC
 +
** OHCI控制器
 +
 
 +
==== DT configuration with external high speed-HUB ====
 +
* 通过设置'''status =“ okay”'''启用'''usbh_ehci'''
 +
* 通过'''phys'''和'''phy-names'''配置PHY
 +
{{Info|当所有低速和全速流量由直接连接到下游端口的高速集线器管理时,无需启用'''usbh_ohci'''。}}
 +
 
 +
==== DT configuration with OHCI to achieve full-speed and low-speed ====
 +
* 通过设置'''status =“ okay”'''启用'''usbh_ehci'''
 +
* 通过设置'''status =“ okay”'''启用'''usbh_ohci'''
 +
对于两个控制器:
 +
* 通过'''phys'''和'''phy-names'''配置PHY
 +
 
 +
=== DT configuration examples ===
 +
 
 +
==== DT configuration when using port0 with a high-speed hub ====
 +
下例显示了使用物理端口0(未使用第二个物理端口)时如何配置USBH。
 +
 
 +
板上使用了高速集线器控制器IC:无需启用usbh_ohci,所有低速和全速流量都由集线器管理。
 +
&usbh_ehci {
 +
phys = {{HighlightParam|<&usbphyc_port0>}};          {{HighlightParam|/* Use USBPHYC HS PHY port #1, mapped on USBH controller */}}
 +
phy-names = "usb";
 +
status = "okay";
 +
};
 +
 +
{{HighlightParam|/* No need to configure and enable usbh_ohci */}}
 +
 
 +
==== DT configuration when using port0 ====
 +
下面的示例显示了如何在使用物理端口0(第二个物理端口未使用,或由 [[OTG_device_tree_configuration|OTG]] 使用)并且不使用高速集线器的情况下配置USBH。
 +
&usbh_ehci {
 +
phys = {{HighlightParam|<&usbphyc_port0>}};          {{HighlightParam|/* Use USBPHYC HS PHY port #1, mapped on USBH controller */}}
 +
phy-names = "usb";
 +
status = "okay";
 +
};
 +
 +
&usbh_ohci {
 +
phys = {{HighlightParam|<&usbphyc_port0>}};          {{HighlightParam|/* 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 = {{HighlightParam|<&usbphyc_port0>}}, {{Highlight|<&usbphyc_port1 '''1'''>}};    {{HighlightParam|/* Use USBPHYC HS PHY port #1, mapped on USBH controller */}}
 +
                                                          {{Highlight|/* Use USBPHYC HS PHY port #2, '''configure UTMI switch to select USBH controller''' */}}
 +
phy-names = "usb", "usb";
 +
status = "okay";
 +
};
 +
 +
&usbh_ohci {
 +
phys = {{HighlightParam|<&usbphyc_port0>}}, {{Highlight|<&usbphyc_port1 '''1'''>}};    {{HighlightParam|/* Use USBPHYC HS PHY port #1, mapped on USBH controller */}}
 +
                                                          {{Highlight|/* 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设备并获取相应的 [[Device_tree#STM32|platform configuration device tree]] 文件。<br />
 +
STM32CubeMX可能不支持以上 [[#DT bindings documentation|DT bindings documentation]] 段中描述的所有属性。如果是这样,该工具会在生成的设备树中插入“''用户部分”''。 然后可以编辑这些部分以添加一些属性,并将它们一代一代地保留下来。 有关更多信息,请参见 [[STM32CubeMX]] 用户手册。
 +
 
 +
==References==
 +
请参考以下链接以获得完整描述:
 +
 
 +
<references />

2020年11月11日 (三) 09:10的最新版本

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 用户手册。