dts配置
i2C-MP15X-B开发板采用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信号
所以pinmux代码如下
pinmux = <STM32_PINMUX('G', 11, AF6)>;
作者:SteveChen 创建时间:2024-09-18 17:39
最后编辑:SteveChen 更新时间:2024-09-18 17:40
最后编辑:SteveChen 更新时间:2024-09-18 17:40