OTG device tree configuration
目录
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";
};
该设备树部分与STM32微处理器有关。 它必须保持原样,而不能由最终用户修改。 |
DT configuration (board level)
请按照以下章节中描述的顺序在板上配置和启用OTG。
OTG支持可通过DT静态选择的两个PHY接口:
在“ otg”或“主机”模式下运行时,需要使用外部电荷泵,例如 必须指定5V稳压器。
有关调节器配置的更多信息,请参考Regulator overview |
DT configuration using full-speed USB PHY
DT configuration using high-speed USB PHY
- 通过设置status =“ okay”。来启用OTG。
- 通过设置'phys =<&usbphyc_port1 0>;和phy-names =“ usb2-phy”;选择USBPHYC端口#2
- (可选)通过pinctrl,通过pinctrl-0和pinctrl-names将OTG ID引脚配置为模拟引脚。
- (可选)通过dr_mode =“ peripheral”,主机“或otg”(如果未设置,默认为“ otg”)设置双角色模式 )
- 可选地通过vbus-supply = <&your_regulator>为otg和主机模式设置vbus电压regulator.
有关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
请参考以下链接以获取更多信息:
- ↑ drivers/usb/dwc2/| |}} drivers/usb/dwc2/ , DesignWare HS OTG Controller driver
- ↑ Documentation/devicetree/bindings/usb/dwc2.txt| |}} Documentation/devicetree/bindings/usb/dwc2.txt ,Platform DesignWare HS OTG USB 2.0控制器设备树绑定
- ↑ 3.03.1 Documentation/devicetree/bindings/usb/generic.txt| |}} Documentation/devicetree/bindings/usb/generic.txt , Generic USB device tree bindings
- ↑ arch/arm/boot/dts/stm32mp157c.dtsi| |}} arch/arm/boot/dts/stm32mp157c.dtsi , STM32MP157C device tree file