一、问题描述
在 i.MX8MP 平台的 LVDS 背光调试过程中,需要对背光使能(EN)和调光(PWM)两个信号进行设备树(DTS)配置。初始配置存在以下问题:
-
背光使能信号(
LVDS0_BLT_EN)的 GPIO 编号不确定 :最初推测接在 SoC 的GPIO1_IO09上,但未在原理图中最终确认。 -
背光使能信号的有效电平不确定 :当前占位符写的是
GPIO_ACTIVE_HIGH,但需根据原理图中 Q9 MOSFET 的电路拓扑确认极性。 -
调光信号(
LVDS0_BLT_PWM)的对应引脚存在分歧 :GPIO1_IO09、GPIO1_IO11、GPIO1_IO13均可复用为PWM2_OUT,需根据原理图确认 LVDS0 背光 PWM 实际接在哪个引脚。
二、排查过程
2.1 第一轮排查:原理图第 18 页(IO 扩展)
-
发现 :
LVDS0_BLT_EN网络标号连接在型号为PCAL6416AHF,128的 I2C IO 扩展芯片(U59)的P1_0引脚上。 -
结论 :
LVDS0_BLT_EN不是 直接接在 i.MX8MP 的 GPIO 上,而是通过 I2C 扩展芯片控制。原推测的&gpio1 9不适用。
2.2 第二轮排查:原理图第 20 页(i.MX8MP Power/GND 引脚图)
-
发现:该页仅包含电源和地引脚,无 GPIO 功能复用信息。
-
结论:该页无法确认 GPIO 编号,需查看外设(Peri)引脚定义页。
2.3 第三轮排查:原理图第 6 页(i.MX8MP-Peri 引脚定义图)
-
发现 :图中
GPIO1_IO09旁边标注为LVD S0_BLT_PWM(疑似LVDS0_BLT_PWM),GPIO1_IO10旁边标注为LVDS0_BLT_PWM。 -
初步结论 :
LVDS0_BLT_PWM可能接在GPIO1_IO09或GPIO1_IO10,存在歧义,需进一步核对引脚表。
2.4 第四轮排查:引脚表(决定性确认)
通过查阅引脚表原始行号,得到决定性证据:
| 行号 | 信号 | 对应 GPIO / 扩展芯片 |
|---|---|---|
| 第 884 行 | LVDS0_BLT_PWM |
GPIO1_IO10(PWM3) |
| 第 889 行 | LVDS1_BLT_PWM |
GPIO1_IO13(PWM2) |
| 第 5053 行 | LVDS0_BLT_EN |
I2C IO EXP P1_0(pcal6416 GPIO 8) |
| 第 5055 行 | LVDS1_BLT_EN |
I2C IO EXP P1_1(pcal6416 GPIO 9) |
-
最终结论:
-
LVDS0_BLT_PWM实际接在GPIO1_IO10,复用为PWM3_OUT(不是GPIO1_IO09)。 -
LVDS0_BLT_EN接在 I2C 扩展芯片PCAL6416A的P1_0(GPIO 8)。 -
之前截图误看为
GPIO1_IO09,是因为图上的文字排版换行造成了视觉偏差。
-
2.5 第五轮排查:原理图第 24 页(Dimming CTRL 电路)
-
发现 :
LVDS0_BLT_EN输入到 U30(74LV1T34GWH,同相缓冲器),输出BLT0_ON控制背光模块。 -
结论 :因 U30 为同相缓冲器,有效电平为高电平有效 (
GPIO_ACTIVE_HIGH)。
三、最终确认结果
3.1 硬件映射关系
| 信号 | 连接目标 | 对应 GPIO / PWM |
|---|---|---|
LVDS0_BLT_EN |
I2C 扩展芯片 PCAL6416A 的 P1_0 |
pcal6416 GPIO 8 |
LVDS0_BLT_PWM |
GPIO1_IO10 |
PWM3_OUT |
LVDS1_BLT_EN |
I2C 扩展芯片 PCAL6416A 的 P1_1 |
pcal6416 GPIO 9 |
LVDS1_BLT_PWM |
GPIO1_IO13 |
PWM2_OUT |
3.2 有效电平
LVDS0_BLT_EN:GPIO_ACTIVE_HIGH(经同相缓冲器 U30,高电平使能)。
四、DTS 修正方案
4.1 修改内容
| 项目 | 修改前(错误) | 修改后(正确) |
|---|---|---|
enable-gpios |
&gpio1 9 GPIO_ACTIVE_HIGH |
&pcal6416 8 GPIO_ACTIVE_HIGH |
pwms |
<&pwm3 ...> |
保持不变(&pwm3 正确) |
pinctrl_backlight |
配置 GPIO1_IO09 为 GPIO |
删除(不再使用) |
4.2 修正后的 DTS 片段
dts
/* 1. 删除不再使用的 pinctrl_backlight */
// &iomuxc {
// pinctrl_backlight: backlightgrp {
// fsl,pins = <
// MX8MP_IOMUXC_GPIO1_IO09__GPIO1_IO09 0x19
// >;
// };
// };
/* 2. 确保 I2C1 下已正确注册 pcal6416 为 GPIO 控制器 */
&i2c1 {
pcal6416: gpio@20 {
compatible = "nxp,pcal6416";
reg = <0x20>;
gpio-controller;
#gpio-cells = <2>;
/* ... 其他属性按实际配置 ... */
};
};
/* 3. 背光节点修正 */
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwm3 0 100000 0>; /* 对应 GPIO1_IO10 → PWM3 */
enable-gpios = <&pcal6416 8 GPIO_ACTIVE_HIGH>; /* P1_0 → gpio 8,高电平有效 */
/* ... 其他属性保持不变 ... */
};
/* 4. 确保 PWM3 的引脚复用配置正确 */
&iomuxc {
pinctrl_pwm3: pwm3grp {
fsl,pins = <
MX8MP_IOMUXC_GPIO1_IO10__PWM3_OUT 0x6
>;
};
};
4.3 注意事项
-
确认
pcal6416节点已存在:若 DTS 中尚未添加该 I2C 扩展芯片节点,需先补充完整配置。 -
GPIO 编号映射 :
PCAL6416A有 16 个 GPIO,P1_0通常映射为第 8 号(P0_0~P0_7 为 0~7,P1_0~P1_7 为 8~15),需确认驱动实际映射关系。 -
PWM 通道确认 :
GPIO1_IO10复用为PWM3_OUT,务必确认所用 PWM 控制器为&pwm3。 -
极性验证 :理论分析为高电平有效,建议上电实测。若背光默认状态异常,可将
GPIO_ACTIVE_HIGH改为GPIO_ACTIVE_LOW再验证。
五、验证步骤
-
编译 DTS:修改后重新编译设备树,确保无语法错误。
-
烧录并启动:将新 DTS 部署到目标板。
-
检查背光状态 :上电后观察背光是否默认点亮(若
GPIO_ACTIVE_HIGH正确);若背光不亮,尝试改为GPIO_ACTIVE_LOW。 -
PWM 调光测试:调整 PWM 占空比,验证背光亮度是否随之变化。
-
I2C 通信验证 :通过
i2cget/i2cset直接读写PCAL6416A的P1_0,确认使能信号可控。
六、总结
| 项目 | 最终结论 |
|---|---|
LVDS0_BLT_EN 控制方式 |
I2C 扩展芯片 PCAL6416A 的 P1_0(GPIO 8) |
LVDS0_BLT_PWM 控制方式 |
GPIO1_IO10 复用为 PWM3_OUT |
| 使能有效电平 | GPIO_ACTIVE_HIGH(同相缓冲器,高电平有效) |
| DTS 核心修改 | enable-gpios 改为 &pcal6416 8;删除 pinctrl_backlight |
按此文档在 BSP 服务器上直接修改 DTS 并重新生成 patch 即可。