Serial TTY device tree configuration
目录
Article Purpose
本文介绍了将USART 分配给 Linux® OS后如何配置。 在那种情况下,它由 Serial and TTY 框架控制。
使用device tree 机制执行配置,该机制提供了stm32-usart Linux驱动程序使用的USART外设的硬件描述。
如果将外围设备分配给另一个执行上下文,请参阅 How to assign an internal peripheral to a runtime context 文章,以获取有关外围设备分配和配置的准则。
DT bindings documentation
USART是多功能设备。
每个函数都由一个单独的绑定文档表示:
- 通用UART绑定[1] 由UART框架使用。
- STM32-USART驱动程序使用的STM32 USART驱动程序绑定[2]。 该绑定文档说明了如何为STM32 USART编写设备树文件。
DT configuration
该硬件描述是“STM32微处理器”设备树文件(扩展名为.dtsi)和“板子”设备树文件(扩展名为.dts)的组合。有关设备树文件分割的说明,请参见Device tree。
“STM32CubeMX”可用于生成板设备树。有关更多详细信息,请参考How to configure the DT using STM32CubeMX。
DT configuration (STM32 level)
所有STM32 USART节点(USART1除外, ETZPC control) 控制下的安全实例)在微处理器设备树 (ex: stm32mp157c.dtsi [3])中进行了描述,具有默认参数和禁用状态。
必需属性和可选属性在bindings files中进行了完整描述。
与STM32相关的设备树配置应保持原样,而无需客户修改。 |
DT configuration (Board level)
Part of the device tree 的一部分用于描述给定板上使用的USART硬件:
- 启用了哪些USART实例(通过将状态设置为“确定”)
- 使用哪些功能(例如DMA传输或直接传输,传输速度或奇偶校验)
- 哪些引脚通过pinctrl进行配置。
- 哪些串行别名链接到UART实例。 请检查其他设备树文件中已经使用的别名,以避免别名冲突。 别名定义链接到UART的ttySTMx实例的索引。
注意:
- 由于每个板的引脚配置可能不同,因此可以为每个UART实例定义几种DT配置。
- 引脚配置在板数据表中进行了描述。 板数据表中描述的每个新引脚配置都需要在设备树中定义。
可以为每个引脚复用配置定义四个设备树配置:
- 默认值:用于标准用法(强制性)
- "sleep":对于睡眠模式,当UART实例不是唤醒源时(强制性)
- "idle": 对于睡眠模式,当UART实例是唤醒源时(可选)
- "no_console_suspend": 当将UART实例用于控制台时,并且激活了no_console_suspend模式(可选)。
DT configuration examples
Activation of a USART or UART instance
GPIO扩展和Arduino连接器上提供了一些UART引脚(取决于板上可用的连接器)。 |
要与UART实例通信,必须在UART引脚上插入RS232卡。
下面的示例基于STM32MP157C-EV1板USART3示例,展示了如何在板级配置和启用UART实例。
注意:对于STM32板,配置已在设备树中定义。 仅需要激活设备。
要激活UART实例,请按照以下步骤操作:
- 定义实例引脚配置 (ex: stm32mp157-pinctrl.dtsi [4]).
usart3_pins_a: usart3-0 { pins1 { /* USART3 TX and RTS pins activation for default mode */ pinmux = <STM32_PINMUX('B', 10, AF7)>, /* USART3_TX */ <STM32_PINMUX('G', 8, AF8)>; /* USART3_RTS */ bias-disable; drive-push-pull; slew-rate = <0>; }; pins2 { /* USART3 RX and CTS_NSS pins activation for default mode */ pinmux = <STM32_PINMUX('B', 12, AF8)>, /* USART3_RX */ <STM32_PINMUX('I', 10, AF8)>; /* USART3_CTS_NSS */ bias-disable; }; }; usart3_idle_pins_a: usart3-idle-0 { pins1 { /* USART3 TX, RTS, and CTS_NSS pins deactivation for sleep mode */ pinmux = <STM32_PINMUX('B', 10, ANALOG)>, /* USART3_TX */ <STM32_PINMUX('G', 8, ANALOG)>, /* USART3_RTS */ <STM32_PINMUX('I', 10, ANALOG)>; /* USART3_CTS_NSS */ }; pins2 { /* USART3_RX pin still active for wake up */ pinmux = <STM32_PINMUX('B', 12, AF8)>; /* USART3_RX */ bias-disable; }; }; usart3_sleep_pins_a: usart3-sleep-0 { pins { /* USART3_TX, RTS, CTS_NSS, and RX pins deactivation for sleep mode */ pinmux = <STM32_PINMUX('B', 10, ANALOG)>, /* USART3_TX */ <STM32_PINMUX('G', 8, ANALOG)>, /* USART3_RTS */ <STM32_PINMUX('I', 10, ANALOG)>, /* USART3_CTS_NSS */ <STM32_PINMUX('B', 12, ANALOG)>; /* USART3_RX */ }; };
- 在主板级别 (ex: stm32mp157c-ev1.dts [5])定义此实例的串行别名。
aliases {
/* Serial1 alias (ie ttySTM1) assigned to usart3 */
serial1 = &usart3;
ethernet0 = ðernet0;
};
- 在板级配置和激活实例 (ex: stm32mp157c-ev1.dts [5]).
&usart3 { pinctrl-names = "default", "sleep", "idle"; /* pin configurations definition */ pinctrl-0 = <&usart3_pins_a>; /* default pin configuration selection */ pinctrl-1 = <&usart3_sleep_pins_a>; /* sleep pin configuration selection */ pinctrl-2 = <&usart3_idle_pins_a>; /* idle pin configuration selection */ status = "okay"; /* device activation */ };
注:所选的引脚配置必须与电路板数据手册中所述的引脚配置对齐。
How to configure the DT using STM32CubeMX
The STM32CubeMX工具可用于配置STM32MPU设备并获取相应的platform configuration device tree 文件。
STM32CubeMX可能不支持以上 DT bindings documentation 段中描述的所有属性。 如果是这样,该工具会在生成的设备树中插入“用户部分”。然后可以编辑这些部分以添加一些属性,并将它们一代一代地保留下来。 有关更多信息,请参见 STM32CubeMX 用户手册。
References
- ↑ Documentation/devicetree/bindings/serial/serial.txt | |}} Documentation/devicetree/bindings/serial/serial.txt , UART generic device tree bindings
- ↑ Documentation/devicetree/bindings/serial/st,stm32-usart.txt | |}} Documentation/devicetree/bindings/serial/st,stm32-usart.txt , STM32 USART device tree bindings
- ↑ arch/arm/boot/dts/stm32mp157c.dtsi | |}} arch/arm/boot/dts/stm32mp157c.dtsi , STM32MP157C device tree file
- ↑ arch/arm/boot/dts/stm32mp157-pinctrl.dtsi | |}} arch/arm/boot/dts/stm32mp157-pinctrl.dtsi , STM32MP157 pinctrl device tree file
- ↑ 5.05.1 arch/arm/boot/dts/stm32mp157c-ev1.dts | |}} arch/arm/boot/dts/stm32mp157c-ev1.dts , STM32MP157c ev1 board device tree file