dts层级结构

PanGu开发板dts层级:

stm32mp157a-panguboard.dts
	stm32mp157a-panguboard-lcd043p800c.dts
	stm32mp157a-panguboard-lcd070p1024c.dts
	stm32mp157a-panguboard-mipi.dts

三个文件的主要区别如下:

  • stm32mp157a-panguboard.dts 支持HDMI显示接口

  • stm32mp157a-panguboard-lcd043p800c.dts 支持RGB电容液晶屏,型号为i2M-LCD043P800C,分辨率为800x480。

  • stm32mp157a-panguboard-lcd070p1024c.dts 支持RGB电容液晶屏,型号为i2M-LCD070P1024C,分辨率为1024x600。

  • stm32mp157a-panguboard-mipi.dts 支持MIPI接口

支持RGB LCD和MIPI的dts文件,都是基于stm32mp157a-panguboard.dts来修改的,所以stm32mp157a-panguboard.dts文件是基础文件。所以,可以直接修改stm32mp157a-panguboard.dts文件来添加各种功能,最终会影响其他三个文件。

Pinmux配置

PanGu开发板采用STM32MP1系列下的STM32MP157AAA芯片,在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信号
image

所以pinmux代码如下

pinmux = <STM32_PINMUX('G', 11, AF6)>;
作者:SteveChen  创建时间:2024-09-18 11:55
最后编辑:SteveChen  更新时间:2024-10-18 15:16
上一篇:
下一篇: