Page tree
Skip to end of metadata
Go to start of metadata

PanGu开发板采用STM32MP1芯片,在Linux系统的中,使用DeviceTree方式配置,减少了相同芯片,不同板级代码的冗余工作量。通常使用功能前,需要先配置对应管脚的Pinmux。

这里以arch/arm/boot/dts/stm32mp157a-panguboard.dts文件中的UART4功能为例,部分代码如下:

671 &uart4 {
672         pinctrl-names = "default", "sleep", "idle", "no_console_suspend";
673         pinctrl-0 = <&uart4_pins_a>;
674         pinctrl-1 = <&uart4_sleep_pins_a>;
675         pinctrl-2 = <&uart4_idle_pins_a>;
676         pinctrl-3 = <&uart4_pins_a>;
677         status = "okay";
678 };

这里的pinctrl有四种,分别是default, sleep, idle, no_console_suspend。uart4使用的管脚定义是在arch/arm/boot/dts/stm32mp157-pinctrl.dtsi文件中,以下是部分代码:

1429                         uart4_pins_a: uart4-0 {
1430                                 pins1 {
1431                                         pinmux = <STM32_PINMUX('G', 11, AF6)>; /* UART4_TX */
1432                                         bias-disable;
1433                                         drive-push-pull;
1434                                         slew-rate = <0>;
1435                                 };
1436                                 pins2 {
1437                                         pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
1438                                         bias-disable;
1439                                 };
1440                         };
1441
1442                         uart4_idle_pins_a: uart4-idle-0 {
1443                                 pins1 {
1444                                         pinmux = <STM32_PINMUX('G', 11, ANALOG)>; /* UART4_TX */
1445                                 };
1446                                 pins2 {
1447                                         pinmux = <STM32_PINMUX('B', 2, AF8)>; /* UART4_RX */
1448                                         bias-disable;
1449                                 };
1450                         };
1451
1452                         uart4_sleep_pins_a: uart4-sleep-0 {
1453                                 pins {
1454                                         pinmux = <STM32_PINMUX('G', 11, ANALOG)>, /* UART4_TX */
1455                                                  <STM32_PINMUX('B', 2, ANALOG)>; /* UART4_RX */
1456                                 };
1457                         };

可以看出uart4使用了PG11和PB2,两个管脚。


STM32MP1在Linux系统中的pinmux配置主要是PIN_NUMBER_PINMUX,写法如下:

node{
	pinmux = <PIN_NUMBER_PINMUX>;
	GENERIC_PINCONFIG;
};

PIN_NUMBER_PINMUX由三个部分组成,port,line和function。

port表示GPIO的组号,书写为'A', 'B'

line表示GPIO组内的序号,书写为0, 1, 2

function表示GPIO组内序号对应的管脚的功能,


通过查STM32MP1 datasheet文档,可以看到G11的AF6是UART4_TX信号


所以pinmux代码如下

pinmux = <STM32_PINMUX('G', 11, AF6)>;
  • No labels