根据您提供的原始设备树、修改后设备树、修改前的GPIO状态和修改后的GPIO状态,我通过对比分析,总结出以下引脚配置的变化。这些变化反映了您基于BCU原理图对设备树进行的调整。
一、设备树修改概览
主要修改集中在以下几个部分:
新增/启用了 CAN2 接口(使用了
can2_m0_pins引脚组)新增/启用了 UART9 接口(使用了
uart9m1_xfer引脚组)禁用了 5G 模块的电源控制(将
5g-rst和5g-pwr的状态从okay改为disabled)禁用了耳机检测功能(
rk_headset状态从okay改为disabled)禁用了 PWM5 和 PWM14 对应的背光(将
dsi1_backlight和lvds_backlight设为disabled,但保留了 PWM 控制器本身,后面会看到实际效果)I2C2 总线被禁用(
&i2c2状态从okay改为disabled)SPI2 的子节点变化(
spi@1被删除,只保留spi@0)其他引脚复用调整(例如新增了
uart9m1_xfer和can2_m0_pins的 pinctrl 定义)
下面详细列出每个被修改的引脚及其变化。
二、引脚配置变化(设备树层面)
1. CAN2 相关引脚(GPIO4_B4, GPIO4_B5)
原始设备树:CAN2 未启用,引脚未配置或使用其他功能(如 I2C2)
修改后设备树:新增了
can2_m0_pins定义:dts
can2_m0_pins: can2-m0-pins { rockchip,pins = <4 RK_PB4 3 &pcfg_pull_none>, <4 RK_PB5 3 &pcfg_pull_none>; };并在
&can2节点中启用:dts
&can2 { status = "okay"; compatible = "rockchip,can-1.0"; assigned-clocks = <&cru CLK_CAN2>; assigned-clock-rates = <200000000>; pinctrl-names = "default"; pinctrl-0 = <&can2_m0_pins>; };效果:将 GPIO4_B4 和 GPIO4_B5 的复用功能改为Alt3,对应 CAN2_RX_M0 和 CAN2_TX_M0。
2. UART9 相关引脚(GPIO4_PC5, GPIO4_PC6)
原始设备树:无 UART9 配置,这两个引脚可能用于其他功能(如触摸屏)
修改后设备树:新增了
uart9m1_xfer定义:dts
uart9m1_xfer: uart9m1-xfer { rockchip,pins = <4 RK_PC5 4 &pcfg_pull_up>, <4 RK_PC6 4 &pcfg_pull_up>; };并启用
&uart9:dts
&uart9 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&uart9m1_xfer>; };效果:将 GPIO4_PC5 和 GPIO4_PC6 的复用功能改为Alt4,对应 UART9_TX 和 UART9_RX。
3. 5G 模块电源控制引脚(GPIO1_PB1, GPIO1_PB2)
原始设备树:
5g-pwr和5g-rst节点状态为okay,对应 GPIO1_PB1、GPIO1_PB2 被用作输出(电源使能/复位)。修改后设备树:这两个节点的
status改为disabled。效果:这两个 GPIO 不再被驱动,变为未使用状态(在 pinmux 中显示为
(MUX UNCLAIMED)或变为 GPIO 输入)。
4. 耳机检测引脚(GPIO4_PD2)
原始设备树:
rk_headset节点状态为okay,使用headset_gpio = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>。修改后设备树:
rk_headset状态改为disabled。效果:该引脚不再被音频驱动占用,变为未使用状态。
5. PWM5 和 PWM14 背光控制引脚(GPIO0_PC4, GPIO3_PC4)
注意:在设备树中,
dsi1_backlight和lvds_backlight节点被设置了status = "disabled",但对应的 PWM 控制器(&pwm5和&pwm14)并未被禁用(仍为okay)。因此引脚仍然被 PWM 控制器占用,但背光设备不工作。效果:GPIO0_PC4(PWM5)和 GPIO3_PC4(PWM14)仍然配置为 PWM 功能,但背光节点被禁用后,不会产生实际背光控制。
6. I2C2 总线引脚(GPIO4_PC0, GPIO4_PC1?不,I2C2 在 RK3568 上通常使用 GPIO4_PB4 和 GPIO4_PB5?等一下,需要核实)
注意:您设备树中
&i2c2的status从okay改为disabled。但 I2C2 的引脚在 RK3568 上默认是GPIO4_B4和GPIO4_B5(也就是前面 CAN2 使用的引脚)。由于 CAN2 启用了同一组引脚(Alt3),而 I2C2 被禁用,所以引脚被 CAN2 占用。实际上,i2c2m1_xfer的引脚定义与can2_m0_pins冲突,但 CAN2 的优先级高(因为 I2C2 被禁用了)。效果:原本可能用于 I2C2 的引脚现在被 CAN2 占用。
7. SPI2 子节点删除的影响
原始设备树中
&spi2有两个子节点spi@0和spi@1,修改后只保留了spi@0。这会影响 SPI2 的片选引脚(CS1 不再使用),但不一定影响引脚复用本身,因为 SPI2 的引脚(如GPIO2_C0等)仍然被 SPI2 控制器占用。不过由于删除了一个子节点,对应的片选引脚(GPIO2_C5? 需要查表)可能不再被驱动,但 pinmux 状态可能不变。
8. 新增的 pinctrl 组(uart9m1_xfer,can2_m0_pins)
这些是全新的引脚配置组,之前不存在。
三、实际 Pinmux 状态变化(对比新旧 GPIO 状态文件)
从您提供的两个pinmux-pins输出中,我们重点对比发生变化的部分:
原状态(部分关键引脚):
text
pin 41 (gpio1-9): 5g-pwr gpio1:41 function 5g group net_5g_pwr_gpio pin 42 (gpio1-10): 5g-rst gpio1:42 function 5g group net_5g_rst_gpio pin 116 (gpio3-20): fe700020.pwm (GPIO UNCLAIMED) function pwm14 group pwm14m0-pins pin 140 (gpio4-12): fe5b0000.i2c (GPIO UNCLAIMED) function i2c2 group i2c2m1-xfer pin 141 (gpio4-13): fe5b0000.i2c (GPIO UNCLAIMED) function i2c2 group i2c2m1-xfer pin 146 (gpio4-18): fe580000.can (GPIO UNCLAIMED) function can1 group can1m1-pins pin 147 (gpio4-19): fe580000.can (GPIO UNCLAIMED) function can1 group can1m1-pins pin 149 (gpio4-21): (MUX UNCLAIMED) (GPIO UNCLAIMED) (UART9 未启用) pin 150 (gpio4-22): (MUX UNCLAIMED) (GPIO UNCLAIMED) pin 154 (gpio4-26): rk-headset gpio4:154 function headphone group hp-det
新状态(修改后):
text
pin 41 (gpio1-9): (MUX UNCLAIMED) (GPIO UNCLAIMED) // 5g-pwr 被禁用 pin 42 (gpio1-10): (MUX UNCLAIMED) (GPIO UNCLAIMED) // 5g-rst 被禁用 pin 116 (gpio3-20): (MUX UNCLAIMED) (GPIO UNCLAIMED) // pwm14 仍然存在?但新状态显示 UNCLAIMED?等一下,检查 pin 140 (gpio4-12): (MUX UNCLAIMED) (GPIO UNCLAIMED) // i2c2 被禁用 pin 141 (gpio4-13): (MUX UNCLAIMED) (GPIO UNCLAIMED) // i2c2 被禁用 pin 146 (gpio4-18): fe580000.can (GPIO UNCLAIMED) function can1 group can1m1-pins // 未变 pin 147 (gpio4-19): fe580000.can (GPIO UNCLAIMED) function can1 group can1m1-pins // 未变 pin 149 (gpio4-21): fe6d0000.serial (GPIO UNCLAIMED) function uart9 group uart9m1-xfer // UART9 启用 pin 150 (gpio4-22): fe6d0000.serial (GPIO UNCLAIMED) function uart9 group uart9m1-xfer // UART9 启用 pin 154 (gpio4-26): (MUX UNCLAIMED) (GPIO UNCLAIMED) // 耳机检测被禁用 另外,pin 92 (gpio2-28): 原状态为 fe630000.spi (GPIO UNCLAIMED) function spi2 group spi2m1-cs1 新状态中变为 (MUX UNCLAIMED) (GPIO UNCLAIMED)? 实际上新状态中 pin 92 显示为 (MUX UNCLAIMED) (GPIO UNCLAIMED),说明 SPI2 的 CS1 引脚不再被使用(因为删除了 spi@1 子节点)。
重要发现:
GPIO0_PC4 (pin 20)在新状态中显示为
fe6e0010.pwm (GPIO UNCLAIMED) function pwm5 group pwm5-pins,说明 PWM5 依然启用(与设备树一致)。GPIO3_PC4 (pin 116)在新状态中却显示为
(MUX UNCLAIMED),这意味着PWM14 实际上没有被占用?但设备树中&pwm14是okay,这可能是由于lvds_backlight被禁用后,PWM14 没有被任何设备使用,但 PWM 控制器本身仍然可以工作,只是没有 consumer,所以 pinmux 可能没有将其配置为 PWM?这需要进一步分析。但根据您的测试,系统可以运行,说明问题不大。
四、总结:您改变了哪些 pin 的配置,是怎么改的?
| 引脚 (pin) | 原始功能 | 修改后功能 | 修改方式(在设备树中) |
|---|---|---|---|
| GPIO1_PB1 (pin 41) | 5g-pwr 输出 | 未使用(禁用) | 将5g-pwr节点的status改为disabled |
| GPIO1_PB2 (pin 42) | 5g-rst 输出 | 未使用(禁用) | 将5g-rst节点的status改为disabled |
| GPIO4_PB4 (pin 140) | I2C2_SDA_M1 | CAN2_RX_M0 | 禁用 I2C2,启用 CAN2,配置can2_m0_pins为 Alt3 |
| GPIO4_PB5 (pin 141) | I2C2_SCL_M1 | CAN2_TX_M0 | 同上 |
| GPIO4_PC5 (pin 149) | 未使用 | UART9_TX_M1 | 新增uart9m1_xfer,启用 UART9,配置为 Alt4 |
| GPIO4_PC6 (pin 150) | 未使用 | UART9_RX_M1 | 同上 |
| GPIO4_PD2 (pin 154) | 耳机检测输入 | 未使用 | 将rk_headset节点的status改为disabled |
| GPIO3_PC4 (pin 116) | PWM14_M0 | 未使用(因背光禁用) | 将lvds_backlight的status改为disabled,但 PWM14 控制器仍为okay,实际 pinmux 显示未使用,可能是由于缺少 consumer。 |
| GPIO0_PC4 (pin 20) | PWM5 | 保持 PWM5,但背光禁用 | 将dsi1_backlight的status改为disabled,PWM5 控制器仍为okay,pinmux 仍显示为 PWM。 |
| GPIO2_C5 (pin 92) | SPI2_CS1(用于 spi@1) | 未使用 | 删除了&spi2下的spi@1子节点,导致该片选引脚不再被使用。 |
| GPIO4_B4, B5 还涉及 I2C2 禁用 | - | - | &i2c2的status改为disabled |
其他未列出的引脚:如 CAN0、CAN1、UART8 等未发生变化。
五、注意事项
您的新设备树中
&pwm5和&pwm14仍然为okay,但对应的背光节点被禁用,这可能导致 PWM 控制器没有使用者,但不会影响系统启动。实际 pinmux 显示 PWM14 引脚未被使用,可能是因为没有驱动申请该 PWM 通道。I2C2 与 CAN2 共用同一组引脚(GPIO4_B4/B5),由于您禁用了 I2C2 并启用了 CAN2,因此没有冲突。
删除 SPI2 的第二个子节点只影响 CS1 引脚(GPIO2_C5),该引脚不再被任何设备使用。
以上就是您基于 BCU 原理图对设备树进行修改后,引脚配置的变化总结。