OTG device tree configuration

来自百问网嵌入式Linux wiki
Wiki讨论 | 贡献2020年11月11日 (三) 10:57的版本 →‎References
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

Article purpose

本文介绍了在将OTG internal peripheral 分配给Linux® OS时如何进行配置。 在这种情况下,它由 USB framework控制。

使用 device tree 机制执行配置。

它由“ OTG Linux驱动程序”[1] 用于在USB framework中注册相关信息。

DT bindings documentation

"Platform DesignWare HS OTG USB 2.0控制器设备树绑定"[2] document represents the OTG(DRD)控制器。

“通用USB设备树绑定” [3] 文档表示通用USB属性,由USB framework 提出,例如最大速度,dr_mode ...

DT configuration

该硬件描述是“STM32微处理器”设备树文件(扩展名为.dtsi)和“板子”设备树文件(扩展名为.dts)的组合。 有关设备树文件分割的说明,请参见 Device tree STM32CubeMX可用于生成板卡设备树。 有关更多详细信息,请参考 How to configure the DT using STM32CubeMX

DT configuration (STM32 level)

在stm32mp157c.dtsi [4].

它由一组属性组成,用于描述OTG controller:寄存器地址,时钟,复位,中断...

usbotg_hs: usb-otg@49000000 {
	compatible = "snps,dwc2";
	reg = <0x49000000 0x10000>;
	clocks = <&rcc USBO_K>;
	clock-names = "otg";
	resets = <&rcc USBO_R>;
	reset-names = "dwc2";
	interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
	dr_mode = "otg"; 	 	 	 	/* dr_mode[3] can be overwritten at board level to set a particular mode */
	status = "disabled";
};
Warning.png 该设备树部分与STM32微处理器有关。 它必须保持原样,而不能由最终用户修改。


DT configuration (board level)

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

OTG支持可通过DT静态选择的两个PHY接口:

  • 内置有OTG 控制器的全速PHY
  • 高速 USBPHYC HS PHY,可以分配给 USBH 或者OTG 控制器。

在“ otg”或“主机”模式下运行时,需要使用外部电荷泵,例如 必须指定5V稳压器。

Info.png 有关调节器配置的更多信息,请参考Regulator overview

DT configuration using full-speed USB PHY

  • 通过设置status =“ okay”。来启用OTG。
  • 通过设置compatible =“ st,stm32mp1-fsotg”,“ snps,dwc2”使用嵌入式全速PHY
  • pinctrl,通过“pinctrl-0””和“” pinctrl-names””,将全速PHY引脚(OTG ID,DM,DP)配置为模拟。
  • (可选)通过dr_mode =“ peripheral”主机“otg”(如果未设置,默认为“ otg”)设置双角色模式 )
  • 可选地通过vbus-supply = <&your_regulator>为otg和主机模式设置vbus电压regulator

DT configuration using high-speed USB PHY

  • 通过设置status =“ okay”。来启用OTG。
  • 通过设置'phys =<&usbphyc_port1 0>;phy-names =“ usb2-phy”;选择USBPHYC端口#2
  • (可选)通过pinctrl,通过pinctrl-0pinctrl-names将OTG ID引脚配置为模拟引脚。
  • (可选)通过dr_mode =“ peripheral”主机“otg”(如果未设置,默认为“ otg”)设置双角色模式 )
  • 可选地通过vbus-supply = <&your_regulator>为otg和主机模式设置vbus电压regulator.
Info.png 有关USBPHYC端口2配置的更多信息,请参考USBPHYC device tree configuration.

DT configuration examples

DT configuration example as full-speed OTG

下面的示例显示了如何配置ID引脚以检测角色(外围设备,主机)的全速OTG:

  • OTG ID和数据(DM,DP)引脚:使用Pinctrl device tree configuration 将PA10,PA11和PA12配置为模拟输入。
  • 通过设置“兼容”来使用集成的“全速USB PHY”
  • 双角色(dr_mode)为“ otg”(例如,默认值未指定)
  • 使用vbus稳压器
# part of pin-controller dt node
usbotg_hs_pins_a: usbotg_hs-0 {
	pins {
		pinmux = <STM32_PINMUX('A', 10, ANALOG)>; /* OTG_ID */            /* configure 'PA10' as ANALOG */

	};
};

usbotg_fs_dp_dm_pins_a: usbotg-fs-dp-dm-0 {
	pins {
		pinmux = <STM32_PINMUX('A', 11, ANALOG)>, /* OTG_FS_DM */
			 <STM32_PINMUX('A', 12, ANALOG)>; /* OTG_FS_DP */
	};
};
&usbotg_hs {
	compatible = "st,stm32mp1-fsotg", "snps,dwc2";                            /* Use full-speed integrated PHY */
	pinctrl-names = "default";
	pinctrl-0 = <&usbotg_hs_pins_a &usbotg_fs_dp_dm_pins_a>;                  /* configure OTG ID and full-speed data pins */
	vbus-supply = <&vbus_otg>;                                                /* voltage regulator to supply Vbus */
	status = "okay";
};

DT configuration example as high speed OTG

下面的示例显示了如何使用ID引脚检测角色(外围设备,主机)来配置高速OTG:

  • OTG ID引脚:使用Pinctrl device tree configuration 将PA10配置为模拟输入
  • USB HS PHY端口#2与UTMI开关一起使用以选择OTG控制器
  • 双角色模式(dr_mode)为“ otg”(例如,默认值未指定)
  • 使用vbus稳压器
# part of pin-controller dt node
usbotg_hs_pins_a: usbotg_hs-0 {
	pins {
		pinmux = <STM32_PINMUX('A', 10, ANALOG)>; /* OTG_ID */            /* configure 'PA10' as ANALOG */

	};
};
&usbotg_hs {
	compatible = "st,stm32mp1-hsotg", "snps,dwc2";
	pinctrl-names = "default";
	pinctrl-0 = <&usbotg_hs_pins_a>;                                          /* configure OTG_ID pin */
	phys = <&usbphyc_port1 0>;                                                /* 0: UTMI switch selects the OTG controller */
	phy-names = "usb2-phy";
	vbus-supply = <&vbus_otg>;                                                /* voltage regulator to supply Vbus */
	status = "okay";                                                          /* enable OTG */
};

How to configure the DT using STM32CubeMX

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

References

请参考以下链接以获取更多信息: