This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM4377:无法在设备树中声明 ehrpwm4

Guru**** 657930 points
Other Parts Discussed in Thread: AM4377, AM4372
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1236474/am4377-cannot-declare-ehrpwm4-in-device-tree

器件型号:AM4377
主题中讨论的其他器件: AM4372

您好!

我正在使用 AM4377的基于 IDK437x 的定制电路板上工作。 我使用的是 SDK ti-processor-sdk-linux-rt-am437X-evm-08.02.00.24

我要将 引脚 H25设置为用作 EHRPWM4A。

我添加了引脚的配置 :

ehrpwm_4_PINS_DEFAULT:ehrpwm_4_PINS_DEFAULT{
 PINCCTRL-SINGLE、PINS =<
  AM4372_IOPAD (0xa28、PIN_OUTPUT | MUX_MODE6)/*(h25) uart3_rxD.ehrpwm4A */
 >;
};

和 etpwm4的配置:

epwmss4 (&E){
 状态="可以";
};

和 ehrpwm4{\f429 (&E)}
 状态="可以";
 pinctrl-names ="默认";
 pinctrl-0 =<&ehrpwm_4_PINS_default>
};

我使用的是  SDK 附带的 am4372.dtsi 文件、

在使用器件树进行这些修改时、我无法在定制板上看到指向"gpiochip4"的链接。 仅显示"gpiochip0"、来自 IDK437x 的原始配置。

我在启动过程中检查了错误、尝试了许多更改、但到目前为止运气不好。

是否有任何线索缺少什么来启用 etpwm4a 的访问?

感谢您的帮助与时间!

此致、

弗雷德里克.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Frederic:

    若干说明:

    1) 1)请对顶级电路板 devicetree 文件而不是低级处理器定义文件 am4372.dtsi 或 AM437x-L4.dtsi 进行 devicetree 更改。 devicetree 文件按从上到下的顺序应用、因此如果您对处理器级.dtsi 文件进行更改、后续的.dts 文件可能会覆盖所做的更改。

    2)我不清楚你要做什么。 是否尝试配置和使用来自 PWM 的信号? 您是否尝试使用来自 GPIO 模块的信号? (与来自 PWM 的信号不同、这需要不同的引脚多路复用设置)

    3) 3)您使用的是 AM437x IDK、定制板还是其他器件?

    4) 4)请显示在启动期间用于 PWM 初始化的终端输出以及您尝试通过终端进行交互的信号。

    此致、

    尼克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nick。

    感谢您的答复。 以下是请求作出的澄清:

    1) 1)我只修改文件 am437x-idk-evm.dts。 上面列出的更改(关于 ehrpwm_4_pins_default、epwmss4和 ehrpwm4)都已添加到该文件中。 对文件 am437x-L4.dtsi 或 am4372.dtsi 没有进行任何更改 。 对不起、不清楚。

    2) 2)我要尝试将引脚 H25配置为 ehrpwm04A、PWM 输出、并 在 Linux 中从用户空间对其进行设置。

    3) 3)代码 使用从 IDK437x 设计衍生的 AM4377在定制板上运行。

    4) 内核启动后、我希望在/sys/class/pwm 下方找到"pwmchip4"的链接、但只有"pwmchip0"(来自 IDK 的默认配置):

    root@am437x-evm:/sys/class/pwm# ls -al
    total 0
    drwxr-xr-x  2 root root 0 Jun  2 22:42 .
    drwxr-xr-x 55 root root 0 Jun  2 22:42 ..
    lrwxrwxrwx  1 root root 0 Jun  2 22:42 pwmchip0 -> ../../devices/platform/44000000.ocp/48000000.interconnect/48000000.interconnect:segment@300000/48300000.target-module/48300000.epwmss/48300100.pwm/pwm/pwmchip0
    root@am437x-evm:/sys/class/pwm#
    

     如果我 从 IDK 的器件树中删除 epwmss0和 ecap0、链接"pwmchip0"将消失(这是合理的)。

    在启动期间、我没有看到关于 PWM 的太多信息:

    root@am437x-evm:/sys/class/pwm# dmesg | grep pwm
    [ 1.270625] ecap 48300100.pwm: Driver needs updating to atomic API

    再次感谢您的快速回复。

    此致、

    弗雷德里克.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一个精度:我看到系统上似乎声明了 erhpwm4的时钟:

    root@am437x-evm:/# find | grep pwm4
    ./sys/kernel/debug/clk/ehrpwm4_tbclk
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_parent
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_duty_cycle
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_notifier_count
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_protect_count
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_enable_count
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_prepare_count
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_flags
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_phase
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_accuracy
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_max_rate
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_min_rate
    ./sys/kernel/debug/clk/ehrpwm4_tbclk/clk_rate
    ./sys/firmware/devicetree/base/ocp@44000000/interconnect@44c00000/segment@200000/target-module@10000/scm@0/scm_conf@0/clocks/ehrpwm4_tbclk@664
    ./sys/firmware/devicetree/base/ocp@44000000/interconnect@44c00000/segment@200000/target-module@10000/scm@0/scm_conf@0/clocks/ehrpwm4_tbclk@664/compatible
    ./sys/firmware/devicetree/base/ocp@44000000/interconnect@44c00000/segment@200000/target-module@10000/scm@0/scm_conf@0/clocks/ehrpwm4_tbclk@664/clocks
    ./sys/firmware/devicetree/base/ocp@44000000/interconnect@44c00000/segment@200000/target-module@10000/scm@0/scm_conf@0/clocks/ehrpwm4_tbclk@664/#clock-cells
    ./sys/firmware/devicetree/base/ocp@44000000/interconnect@44c00000/segment@200000/target-module@10000/scm@0/scm_conf@0/clocks/ehrpwm4_tbclk@664/phandle
    ./sys/firmware/devicetree/base/ocp@44000000/interconnect@44c00000/segment@200000/target-module@10000/scm@0/scm_conf@0/clocks/ehrpwm4_tbclk@664/reg
    ./sys/firmware/devicetree/base/ocp@44000000/interconnect@44c00000/segment@200000/target-module@10000/scm@0/scm_conf@0/clocks/ehrpwm4_tbclk@664/ti,bit-shift
    ./sys/firmware/devicetree/base/ocp@44000000/interconnect@44c00000/segment@200000/target-module@10000/scm@0/scm_conf@0/clocks/ehrpwm4_tbclk@664/name
    root@am437x-evm:/#

    但 PWM 输出没有控制链路(据我所知)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Frederic:

    好的、在启动日志中 、ECAP 48300100.pwm 指的是存储器映射中0x4830_0100处的 PWMSS0_ECAP。

    能否确认加载的器件树实际上就是您认为是的器件树?

    调试 devicetree 的提示  

    访问/sys/firmware/devicetree/... 检查 DT 属性是否按照您在 DTS 中更改的方式设置。 否则、表示不使用更新后的 dtb。

    此致、

    尼克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nick、

    我对所有内容进行了重置、清理并构建了 DTB、最后终于可以访问 ehrpwm4。

    我还定义了 ehrpwm5。

    在关闭此票证前有个小问题:ehrpwm4和 ehrpwm5可通过 pwmchip0和 pwmchip2访问。 为什么会这样呢? 它应该是 pwmchip4和 pwmchip5吗?

    root@am437x-evm:/sys/class/pwm# ls -la
    total 0
    drwxr-xr-x  2 root root 0 Jun  2 22:51 .
    drwxr-xr-x 55 root root 0 Jun  2 22:51 ..
    lrwxrwxrwx  1 root root 0 Jun  2 22:51 pwmchip0 -> ../../devices/platform/44000000.ocp/48000000.interconnect/48000000.interconnect:segment@300000/48308000.target-module/48308000.epwmss/48308200.pwm/pwm/pwmchip0
    lrwxrwxrwx  1 root root 0 Jun  2 22:51 pwmchip2 -> ../../devices/platform/44000000.ocp/48000000.interconnect/48000000.interconnect:segment@300000/4830a000.target-module/4830a000.epwmss/4830a200.pwm/pwm/pwmchip2
    root@am437x-evm:/sys/class/pwm#
    

    非常感谢您的帮助!

    此致、

    弗雷德里克.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Frederic:

    很高兴听到现在正在工作!

    问得好。 我已经观察到、/sys/class/...中不同外设的名称 不一定是确定性的。 例如、硬件技术参考手册(TRM)中定义的 i2c1可能不是内核中定义的 i2c1、不同的 PRU 内核在不同的引导周期中可能具有不同的 RemoteprocX 编号值等。

    我不确定是否有办法使这些 标签具有确定性。 至少对于像 PRU 这样的远程内核,如果您需要知道您总是使用同一个设备,我通常建议每次启动时,代码检查/sys/class/remoteproc/remoteproc */ name 下的特定硬件名称,以查看哪个 RemoteprocX 值与哪个内核相关联。

    此致、

    尼克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nick。

    好的、感谢您的提示。 我会喜欢这篇文章

    非常感谢您的帮助!

    此致、

    弗雷德里克