当前位置: 首页 > web >正文

记录:RK3588 PWM调试

内核dts配置

&pwm3 {pinctrl-0 = <&pwm3m1_pins>;status = "okay";
};
&pwm5 {pinctrl-names = "default";pinctrl-0 = <&pwm5m1_pins>;status = "okay";
};
&pwm7 {pinctrl-0 = <&pwm7m1_pins>;status = "okay";
};
&pwm8 {pinctrl-names = "default";pinctrl-0 = <&pwm8m1_pins>;status = "okay";
};
&pwm9 {pinctrl-names = "default";pinctrl-0 = <&pwm9m1_pins>; status = "okay";
};
&pwm10 {pinctrl-names = "default";pinctrl-0 = <&pwm10m1_pins>;status = "okay";
};

参考上面的修改后发现"/sys/class/pwm"中中只有pwm3和pwm7,内核报错"No active pinctrl state"。
在这里插入图片描述
分析对应代码(drivers/pwm/pwm-rockchip.c)看到读取的pinctrl状态是"active",这里没有读到所以rockchip_pwm_probe返回错误。

static int rockchip_pwm_probe(struct platform_device *pdev)
{
...省略...pc->active_state = pinctrl_lookup_state(pc->pinctrl, "active");if (IS_ERR(pc->active_state)) {dev_err(&pdev->dev, "No active pinctrl state\n");ret = PTR_ERR(pc->active_state);goto err_pclk;}
...省略...
}

pinctrl_lookup_state‌ 函数用于在 Linux 内核中查找并返回指定名称的 pinctrl 配置状态。该函数的主要作用是根据提供的名称查找对应的 pinctrl 状态,并返回一个指向该状态的指针。如果找不到对应的名称,函数会返回一个错误指针。这里提供的名称就是pinctrl-names = “default"定义的名称,可以看到传入的名称是"active”,而dts中配置成了"default"。所以修改pinctrl-names = “active”,因为之前已经有定义所以这里删除也可以。编译重新烧写镜像后可以看到所有PWM被正常识别
在这里插入图片描述
PWM 驱动加载成功后,会在其下生成 pwmchipX 目录,如pwmchip0、pwmchip1 等,此处的 X 与 PWM 的控制器或通道 id 无关,仅与 PWM 设备的 probe 顺序有关。实际用到哪路PWM可以通过"ls -la"查看符号链接的源地址,通过目录中的基地址在dts中可查到对应的PWM。例如上面的"fd8b0030"对应的是pwm3
在这里插入图片描述
向 export 节点写入 Y,会在当前目录下产生一个 pwmY 目录,由于 Rockchip 平台每个 PWM device 只有一个 chip,Y 值只能为 0。反之,向unexport 节点写入 Y 就会删除 pwmY 目录。

  • enable:写入 1 使能 PWM,写入 0 关闭 PWM;
  • polarity:有 normal 或 inversed两个参数选择,对应 PWM 的极性配置 PWM_POLARITY_NORMAL/PWM_POLARITY_INVERSED;
  • duty_cycle:在 normal 模式下,表示一个周期内高电平持续的时间(单位:ns),在 reversed模式下,表示一个周期中低电平持续的时 间(单位:ns);
  • period:表示 PWM 波形的周期(单位:ns);
  • oneshot_count:需开启 CONFIG_PWM_ROCKCHIP_ONESHOT,表示 oneshot 模式的 PWM 波形个数;
  • oneshot_repeat:需开启 CONFIG_PWM_ROCKCHIP_ONESHOT 且仅 PWM v4 支持,表示oneshot 模式重复的次数,最后输出的波形个 数为 oneshot_repeat * oneshot_count;
  • duty_offset:需开启 CONFIG_PWM_ROCKCHIP_ONESHOT,表示 PWM 输出波形偏移的时间(单位:ns);
  • capture:使能 capture 模式,获取输入波形高低电平的时长(单位:ns)。
    Continous
cd /sys/class/pwm/pwmchip0/
echo 0 > export
cd pwm0
echo 10000 > period
echo 5000 > duty_cycle
echo normal > polarity
echo 1 > enable

Oneshot

cd /sys/class/pwm/pwmchip0/
echo 0 > export
cd pwm0
echo 10000 > period
echo 5000 > duty_cycle
echo 1000 > duty_offset
echo normal > polarity
echo 100 > oneshot_count
echo 10 > oneshot_repeat
echo 1 > enable

Capture

cd /sys/class/pwm/pwmchip0/
echo 0 > export
cd pwm0
cat capture
http://www.xdnf.cn/news/13047.html

相关文章:

  • Unity UGUI Button事件流程
  • AlgorithmVisualizer项目改进与部署-网页算法可视化
  • 【学习记录】使用 Kali Linux 与 Hashcat 进行 WiFi 安全分析:合法的安全测试指南
  • ConcurrentModificationException 并发修改异常详解
  • 用递归算法解锁「子集」问题 —— LeetCode 78题解析
  • 代码随想录算法训练营第60期第六十三天打卡
  • 华硕a豆14 Air香氛版,美学与科技的馨香融合
  • vue+cesium示例:3D热力图(附源码下载)
  • pycharm 设置环境出错
  • matlab时序预测并绘制预测值和真实值对比曲线
  • 浏览器指纹科普 | Do Not Track 是什么?
  • 2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
  • (14)-java+ selenium->元素定位大法之By xpath上卷
  • aurora与pcie的数据高速传输
  • 【从零学习JVM|第三篇】类的生命周期(高频面试题)
  • 自然语言处理——卷积神经网络
  • 你应该使用的 php 加解密函数
  • ELK实现nginx、mysql、http的日志可视化实验
  • centos7部署AWStats日志分析系统
  • java中word快速转pdf
  • Linux系统:进程间通信-匿名与命名管道
  • 离线语音识别方案分析
  • python3基础语法梳理
  • 行列视:企业数据分析新时代的利器(一)——深度解读与应用场景分析
  • 在Ubuntu中设置开机自动运行(sudo)指令的指南
  • 关于uniapp展示PDF的解决方案
  • UNECE R152——解读自动驾驶相关标准法规(AEB)
  • 论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
  • 2025.06.09【读书笔记】|PromptBio:让生信分析更简单的AI平台
  • 逻辑回归暴力训练预测金融欺诈