ST意法半导体
直播中

吕珠峰

10年用户 785经验值
擅长:可编程逻辑
私信 关注
[问答]

openSTLinux上的sysfs接口无法使用可能是什么问题?

我正在尝试使用 openSTLinux 上的 sysfs 接口对一些引脚进行 PWM,但不幸的是,它不起作用。
我一直在更改设备树文件以使其正常工作,但仍然没有成功。
当我运行时:
  • ls /sys/class/pwm
我什么也得不到。
可能是什么问题?PWM 在内核上启用。


回帖(1)

陈龙

2022-12-15 11:34:00
好的,谢谢,我以为你没有整个文件夹 pwm。
要将文件夹pwmchipx放在文件夹/sys/class/pwm中,您必须在 dts 中配置并启用计时器。
在这个定时器中,你必须定义一个子节点 pwm 并设置它的管脚。
我查看了您发送的 DTS,我的印象是您为此目的启用了 timers1:


  • &timers1 {
  •         /* spare dmas for other usage */
  •         /delete-property/dmas;
  •         /delete-property/dma-names;
  •         status = "okay";
  •         pwm1: pwm {
  •                 pinctrl-0 = <&pwm1_pins_a>;
  •                 pinctrl-1 = <&pwm1_sleep_pins_a>;
  •                 pinctrl-names = "default", "sleep";
  •                 status = "okay";
  •         };
  •         timer@0 {
  •                 status = "okay";
  •         };
  • };

您已将 pwm pinctrl 设置为引脚 a。
但是你在 stm32mp15-pinctrl.dtsi 中的 pinctrl 设置很奇怪:


  •         pwm1_pins_a: pwm1-0 {
  •                 pins {
  •                         pinmux = ,
  •                                  ;
  •                         bias-pull-down;
  •                         drive-push-pull;
  •                         slew-rate = <0>;
  •                 };
  •         };

  •         pwm1_sleep_pins_a: pwm1-sleep-0 {
  •                 pins {
  •                         pinmux = ,
  •                                 ;
  •                 };
  •         };

如果您查看STM32MP157F的数据表
PA15 AF1与定时器1无关,与TIM2相关

PH6 AF1 不存在:

所以它不能工作。

我在我的 157F-DK2 上进行了测试,例如,我通过配置 timers8 成功获得了 /sys/class/pwm/ 的内容。
由于在我的板上可以使用 PC7 引脚,因此我在我的 pinctrl“stm32mp15-pinctrl.dtsi”中添加了一个 pwm pinmux:


  •         pwm8_pins_b: pwm8-1 {
  •                 pins {
  •                         pinmux = ; /* TIM8_CH2 */
  •                         bias-pull-down;
  •                         drive-push-pull;
  •                         slew-rate = <0>;
  •                 };
  •         };

  •         pwm8_sleep_pins_b: pwm8-sleep-1 {
  •                 pins {
  •                         pinmux = ; /* TIM8_CH2 */
  •                 };
  •         };

因为 PC7 AF3 专用于 TIM8:

然后我在 stm32mp157f-dk2.dts 中配置 timers8 以在其子节点 pwm 中使用这些引脚:


  • &timers8 {
  •         status = "okay";
  •         dmas = <&dmamux1 47 0x400 0x80000001>;
  •         dma-names = "ch1";
  •         pwm {
  •                 pinctrl-0 = <&pwm8_pins_b>;
  •                 pinctrl-1 = <&pwm8_sleep_pins_b>;
  •                 pinctrl-names = "default", "sleep";
  •                 status = "okay";
  •         };
  • };

进入董事会后,您可以通过查看以下内容来检查 PIN 是否已正确声明:


  • cat /sys/kernel/debug/pinctrl/soc:pin-controller@50002000/pinmux-pins | grep "timer"

它给了我:


  • pin 39 (PC7): device 44001000.timer:pwm function af3 group PC7

这证实它有效。
现在您可以验证文件夹的内容:


  • root@stm32mp1:~# ls /sys/class/pwm/
  • pwmchip0
  • root@stm32mp1:~# ls /sys/class/pwm/pwmchip0/
  • device  export  npwm  power  subsystem  uevent  unexport

举报

更多回帖

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