“Serial TTY device tree configuration”的版本间的差异

来自百问网嵌入式Linux wiki
 
(未显示2个用户的5个中间版本)
第1行: 第1行:
{{DISPLAYTITLE:串行TTY设备树配置}}
+
==Article Purpose==
  
[[Category:Linux_Operating_System]]
+
本文介绍了将[[USART internal peripheral|USART]] 分配给 Linux<sup>&reg;</sup> OS后如何配置。 在那种情况下,它由 [[Serial TTY overview|Serial and TTY]] 框架控制。
[[Category:Low_speed_interface]]
+
 
[[Category:Serial_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 = &ethernet0;
 +
};
 +
 
 +
* 在板级配置和激活实例 (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中进行了完整描述。

Warning.png 与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

Info.png 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 = &ethernet0;
};
  • 在板级配置和激活实例 (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 用户手册。