NXP MCU 技术论坛
直播中

李艺银

8年用户 1160经验值
私信 关注
[问答]

在A核心imx8ulp上启用TPM,使用示波器测量波形,它不断输出高电平信号,为什么?

根据您的文章,我正在使用 iMX8ULP-evk 在 A 内核中启用 TPM:https://community.nxp.com/t5/i-mx-processors-knowledge-base/how-to-use-pwm-on-imx93-evk-board/ta-p/1...
我选择了 PTF19 (J20 pin3)来生成 PWM 信号。

闪烁后,I oPen a Terminal 并执行以下命令:
cd /sys/class/pwm/pwmchip0;
echo 0 > export;
cd pwm0;
echo 400000 > period;
echo 200000 > duty_cycle;
echo 1 > enable;然后,我使用示波器测量波形,它不断输出高电平信号。
您能给我一些建议吗?
我的 dts 、 config、log 如下。
最好的问候!
                                       

回帖(1)

张强

2025-3-2 13:17:16

根据您的描述,以下是可能的原因及解决方案,按优先级排序:


1. 检查引脚复用配置(Pinctrl)



  • 问题:PTF19可能未被正确配置为TPM PWM功能模式。

  • 解决:在设备树中确认PTF19的引脚控制组配置为TPM通道。例如:
     &flexpmux {
         tpm_pwm_pins: tpm-pwm-pins {
             pinmux = <
                 IMX8ULP_PAD_PTF19__TPM0_CH4  // 确认TPM实例和通道号
             >;
             drive-strength = <5>;
             bias-pull-up;
         };
    };

  • 使用 i.MX8ULP参考手册 确认PTF19支持的TPM实例(如TPM0/1/2)及通道号(CH0~CH5)。


2. 确认设备树中TPM节点启用



  • 问题:TPM节点未启用或配置错误。

  • 解决:在设备树中检查TPM节点状态是否为"okay",并关联正确的时钟和引脚控制:
     &tpm0 {
         pinctrl-names = "default";
         pinctrl-0 = <&tpm_pwm_pins>;
         status = "okay";
         assigned-clocks = <&pcc2 IMX8ULP_CLK_TPM0>;
         assigned-clock-parents = <&clk_1b>;
    };

  • 确保assigned-clock-parents指向有效时钟源(如clk_1b对应1分频的PERCLK)。


3. 检查时钟配置



  • 问题:TPM模块时钟未启用或频率异常。

  • 解决

    • 在设备树中确认PCC2的TPM0时钟使能(IMX8ULP_CLK_TPM0)。

    • 通过dmesg | grep tpm查看内核日志,确认时钟注册无错误。



4. 验证用户空间配置步骤



  • 问题:占空比或周期值超出硬件限制。

  • 解决

    • 检查TPM计数器位数(通常为16位),计算最大允许周期值。例如,若时钟源为48MHz,周期最大值约为 (2^16-1)/48e6 ≈ 1.366ms

    • 若当前周期400000ns(0.4ms)在范围内,尝试更小值测试(如2000ns)。



5. 检查PWM极性设置



  • 问题:PWM默认极性导致信号锁定。

  • 解决
     echo "normal" > polarity  # 或尝试 "inversed"

    在启用PWM前设置极性。



6. 内核驱动与权限问题



  • 问题:PWM驱动未加载或权限不足。

  • 解决

    • 执行 lsmod | grep pwm_imx_tpm 确认驱动加载。

    • 使用 sudo 执行命令,确保对sysfs的写入权限。



7. 硬件测量确认



  • 问题:示波器探头接触不良或引脚选错。

  • 解决

    • 使用万用表测量PTF19电压,确认是否随PWM使能变化。

    • 对照开发板原理图,确认J20引脚3对应TPM输出。



调试命令参考


# 确认TPM驱动状态
dmesg | grep -i tpm

# 查看PWM设备树节点
cat /sys/class/pwm/pwmchip0/device/of_node/name

# 快速测试:设置极短周期观察响应
echo 1000 > period
echo 500 > duty_cycle
echo 1 > enable

请按上述步骤逐一排查,重点检查设备树中的引脚复用和时钟配置。如果问题仍然存在,请提供具体的设备树片段及dmesg日志以便进一步分析。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分