“Serial TTY device tree configuration”的版本间的差异
(未显示2个用户的6个中间版本) | |||
第1行: | 第1行: | ||
− | [[ | + | ==Article Purpose== |
− | + | ||
− | [[ | + | 本文介绍了将[[USART internal peripheral|USART]] 分配给 Linux<sup>®</sup> OS后如何配置。 在那种情况下,它由 [[Serial TTY overview|Serial and TTY]] 框架控制。 |
+ | |||
+ | 使用[[Device tree|device tree]] 机制执行配置,该机制提供了stm32-usart Linux驱动程序使用的USART外设的硬件描述。 | ||
+ | |||
+ | 如果将外围设备分配给另一个执行上下文,请参阅 [[How to assign an internal peripheral to a runtime context]] 文章,以获取有关外围设备分配和配置的准则。 | ||
+ | |||
+ | ==DT bindings documentation== | ||
+ | |||
+ | USART是多功能设备。 | ||
+ | |||
+ | 每个函数都由一个单独的绑定文档表示: | ||
+ | |||
+ | *通用UART绑定<ref>{{CodeSource | Linux kernel | Documentation/devicetree/bindings/serial/serial.txt | Documentation/devicetree/bindings/serial/serial.txt}}, UART generic device tree bindings</ref> 由UART框架使用。 | ||
+ | |||
+ | *STM32-USART驱动程序使用的STM32 USART驱动程序绑定<ref>{{CodeSource | Linux kernel | Documentation/devicetree/bindings/serial/st,stm32-usart.txt | Documentation/devicetree/bindings/serial/st,stm32-usart.txt}}, STM32 USART device tree bindings</ref>。 该绑定文档说明了如何为STM32 USART编写设备树文件。 | ||
+ | |||
+ | ==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)=== | ||
+ | |||
+ | 所有STM32 USART节点(USART1除外, [[ETZPC_internal_peripheral|ETZPC]] control) 控制下的安全实例)在微处理器设备树 (ex: stm32mp157c.dtsi <ref>{{CodeSource | Linux kernel | arch/arm/boot/dts/stm32mp157c.dtsi | arch/arm/boot/dts/stm32mp157c.dtsi}}, STM32MP157C device tree file</ref>)中进行了描述,具有默认参数和禁用状态。<br/> | ||
+ | 必需属性和可选属性在[[Serial TTY device tree configuration#DT_bindings_documentation|bindings files]]中进行了完整描述。 | ||
+ | |||
+ | {{Warning|与STM32相关的设备树配置应保持原样,而无需客户修改。}} | ||
+ | |||
+ | ===DT configuration (Board level)=== | ||
+ | |||
+ | Part of the [[Device tree|device tree]] 的一部分用于描述给定板上使用的USART硬件: | ||
+ | |||
+ | * 启用了哪些USART实例(通过将状态设置为“确定”) | ||
+ | * 使用哪些功能(例如DMA传输或直接传输,传输速度或奇偶校验) | ||
+ | * 哪些引脚通过[[Pinctrl device tree configuration|pinctrl]]进行配置。 | ||
+ | * 哪些串行别名链接到UART实例。 请检查其他设备树文件中已经使用的别名,以避免别名冲突。 别名定义链接到UART的ttySTMx实例的索引。 | ||
+ | |||
+ | 注意: | ||
+ | * 由于每个板的引脚配置可能不同,因此可以为每个UART实例定义几种DT配置。 | ||
+ | * 引脚配置在板数据表中进行了描述。 板数据表中描述的每个新引脚配置都需要在设备树中定义。<br/> | ||
+ | <br/> | ||
+ | 可以为每个引脚复用配置定义四个设备树配置: | ||
+ | * 默认值:用于标准用法(强制性) | ||
+ | * "sleep":对于睡眠模式,当UART实例不是唤醒源时(强制性) | ||
+ | * "idle": 对于睡眠模式,当UART实例是唤醒源时(可选) | ||
+ | * "no_console_suspend": 当将UART实例用于控制台时,并且激活了no_console_suspend模式(可选)。 | ||
+ | |||
+ | ===DT configuration examples=== | ||
+ | ====Activation of a USART or UART instance==== | ||
+ | {{Info|GPIO扩展和Arduino连接器上提供了一些UART引脚(取决于板上可用的连接器)。 | ||
+ | * [[STM32MP157C-EV1 - hardware description#MB1262-CN21|STM32MP157C-EV1 Evaluation board GPIO expansion connector]] | ||
+ | * [[STM32MP157X-DKX - hardware description#MB1272-CN2|STM32MP157X-DKX Discovery kit GPIO expansion connector]] | ||
+ | }}{{UpdateNeededForNewBoard|Point to the USART connectors}} | ||
+ | 要与UART实例通信,必须在UART引脚上插入RS232卡。<br/> | ||
+ | <br/> | ||
+ | 下面的示例基于STM32MP157C-EV1板USART3示例,展示了如何在板级配置和启用UART实例。<br/> | ||
+ | 注意:对于STM32板,配置已在设备树中定义。 仅需要激活设备。<br/> | ||
+ | <br/> | ||
+ | 要激活UART实例,请按照以下步骤操作: | ||
+ | * 定义实例引脚配置 (ex: stm32mp157-pinctrl.dtsi <ref>{{CodeSource | Linux kernel | arch/arm/boot/dts/stm32mp157-pinctrl.dtsi | arch/arm/boot/dts/stm32mp157-pinctrl.dtsi}}, STM32MP157 pinctrl device tree file</ref>). | ||
+ | usart3_pins_a: usart3-0 { | ||
+ | pins1 { | ||
+ | {{highlight|/* 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 { | ||
+ | {{highlight|/* 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 { | ||
+ | {{highlight|/* 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 { | ||
+ | {{highlight|/* 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 { | ||
+ | {{highlight|/* 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 <ref name="stm32mp157c-ev1.dts">{{CodeSource | Linux kernel | arch/arm/boot/dts/stm32mp157c-ev1.dts | arch/arm/boot/dts/stm32mp157c-ev1.dts}}, STM32MP157c ev1 board device tree file</ref>)定义此实例的串行别名。 | ||
+ | aliases { | ||
+ | {{highlight|/* Serial1 alias (ie ttySTM1) assigned to usart3 */}} | ||
+ | serial1 = &usart3; | ||
+ | ethernet0 = ðernet0; | ||
+ | }; | ||
+ | |||
+ | * 在板级配置和激活实例 (ex: stm32mp157c-ev1.dts <ref name="stm32mp157c-ev1.dts"/>). | ||
+ | |||
+ | &usart3 { | ||
+ | pinctrl-names = "default", "sleep", "idle"; {{highlight|/* pin configurations definition */}} | ||
+ | pinctrl-0 = <&usart3_pins_a>; {{highlight|/* default pin configuration selection */}} | ||
+ | pinctrl-1 = <&usart3_sleep_pins_a>; {{highlight|/* sleep pin configuration selection */}} | ||
+ | pinctrl-2 = <&usart3_idle_pins_a>; {{highlight|/* idle pin configuration selection */}} | ||
+ | status = "okay"; {{highlight|/* '''device activation''' */}} | ||
+ | }; | ||
+ | |||
+ | 注:所选的引脚配置必须与电路板数据手册中所述的引脚配置对齐。 | ||
+ | |||
+ | ==How to configure the DT using STM32CubeMX== | ||
+ | The [[STM32CubeMX]]工具可用于配置STM32MPU设备并获取相应的[[Device_tree#STM32|platform configuration device tree]] 文件。<br /> | ||
+ | STM32CubeMX可能不支持以上 [[#DT bindings documentation|DT bindings documentation]] 段中描述的所有属性。 如果是这样,该工具会在生成的设备树中插入“''用户部分”''。然后可以编辑这些部分以添加一些属性,并将它们一代一代地保留下来。 有关更多信息,请参见 [[STM32CubeMX]] 用户手册。 | ||
+ | |||
+ | ==References== | ||
+ | |||
+ | <references /> |
2020年11月9日 (一) 10:36的最新版本
目录
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