嵌入式驱动学习第七周——pinctrl子系统

news2024/11/27 12:34:13

前言

   pinctrl子系统用来控制每个端口的复用功能和电气属性,这篇博客来介绍一下pinctrl子系统。

   嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏,一起讨论一起学习。现在关注就是老粉啦!

目录

  • 前言
  • pinctrl介绍
  • pinctrl 设备树
    • 服务端
    • 客户端
  • pinctrl添加
  • 参考资料

pinctrl介绍

   pinctrl顾名思义就是控制pin引脚的。如下图所示,pinA可以通过IOMUX连接到GPIO,也可以连接到I2C,同时每个引脚的状态例如上拉、下拉、开漏开源等都可以交由pinctrl来控制。

在这里插入图片描述

   因此pinctrl的作用如下所示:

引脚枚举与命名
引脚复用:如GPIO、I2C或其他功能
引脚配置:如上拉、下拉、 开漏开源、驱动强度等

   一般Pinctrl驱动由芯片厂家的BSP工程师提供,一般的驱动工程师只需要在设备树里之名使用哪些引脚、复用为哪些功能、配置为哪些状态。

pinctrl 设备树

   pinctrl分为两部分,客户端和服务端:

客户端可以指定引脚描述、引脚组描述和配置描述,以满足其特定的功能和需求,不同厂商在客户端的编写格式相同
服务端是提供GPIO引脚配置的pinctrl设备树节点,描述GPIO引脚配置和使用规则的节点,定义了一组GPIO引脚的配置选项、引脚功能、电气特性等。

服务端

   打开设备树文件,我们以一个gpio为例:

pinctrl_led: ledgrp {
	fsl,pins = <
		MX6UL_PAD_GPIO1_IO03__GPIO1_IO03	0x10B0
	>;
};

   如上所示,我们配置GPIO1_IO3复用为GPIO功能,其他属性配置综合下来为:0x10B0,这个0x10b0就是之后会写入寄存器的值,实现复用为GPIO的功能。

客户端

   有了以上服务端的配置,接下来来看看如何使用,依旧是在设备树文件中,可以看到gpioled节点:

gpioled {
	#address-cells = <1>;
	#size-cells = <1>;
	compatible = "atkmini-gpioled";
	pinctrl-names = "default";				/* 用于pinctrl */
	pinctrl-0 = <&pinctrl_led>;				/* 用于pinctrl */
	led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
	status = "okay";
};

   上面的设备树中,pinctrl-names 代表状态名,pinctrl-0 代表“default”状态下对应的配置方案,即我们上一步设置的服务端的设备数代码,需要用&来引用。

   既然有pinctrl-0,那就肯定也有pinctrl-1等等,现在来看多个状态怎么配置

   假设现在服务端有pinctrl_led节点,pinctrl_led2 节点, pinctrl_led3 节点,然后我们配置的时候对应不同的速度,默认,100M,200M。

gpioled {
	...
	pinctrl-names = "default", "state_100mhz", "state_200mhz";				/* 用于pinctrl */
	pinctrl-0 = <&pinctrl_led>;				/* 用于pinctrl */
	pinctrl-1 = <&pinctrl_led2>;				/* 用于pinctrl */
	pinctrl-2 = <&pinctrl_led3>;				/* 用于pinctrl */
	...
};

   这样就可以根据不同的状态选择不同的引脚电气属性的配置,即state_100mhz时对应节点pinctrl_led2中的配置,state_200mhz时对应节点pinctrl_led3中的配置。

pinctrl添加

   由于服务端的写法不同的芯片也不同,因此如果要添加pinctrl,一般有三种方式:

第三方的辅助工具:如果芯片是stm32,可以选择用STM32CubeMX,如果芯片是IMX可以使用i.MX Pins Tool v6进行配置
厂家给出的例程
看源码写

参考资料

[1] 【正点原子】I.MX6U嵌入式Linux驱区动开发指南 第四十五章

[2] 【Linux驱动】pinctrl 和 gpio子系统(一)—— pinctrl 节点解析,引入gpio子系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1587349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java数据结构与算法刷题-----LeetCode461. 汉明距离

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 异或统计1的个数2. 位移操作处理3. Brian Kernighan算法 位运…

构建强大的物联网平台系统架构:关键步骤与最佳实践

随着物联网&#xff08;IoT&#xff09;技术的快速发展和广泛应用&#xff0c;越来越多的企业开始意识到搭建一个强大而可靠的物联网平台系统架构的重要性。一个完善的物联网平台可以帮助企业高效地管理和监控各种连接设备&#xff0c;并实现数据的收集、处理和分析。在本文中&…

个人劳保用品穿戴检测系统 安全帽、工服、面罩、防护手套、防护鞋、安全背带穿戴检测等

背景 在工业生产、医疗护理、消防救援等高风险领域&#xff0c;正确穿戴个人防护装备或劳保用品&#xff08;PPE&#xff1a;Personal Protective Equipment&#xff09;是保障人员安全的重要措施&#xff0c;如安全帽、反光衣、安全背带等。然而&#xff0c;现实中往往会出现…

数据结构之排序了如指掌(一)

目录 题外话 正题 排序概念 稳定性 直接插入排序 直接插入排序代码详解 直接插入排序复杂度分析 希尔排序(缩小增量排序) 希尔排序代码详解 小结 题外话 昨晚肚子疼没睡好,今天博客写的确实有点晚(找个借口),我一定会坚持,不辜负热爱我的家人们!! 正题 排序概念 一串…

去掉el-date-picker弹窗默认回显当前月份的方法

打开日期弹窗&#xff0c;默认会显示当前月份&#xff0c;如图 会发现加了穿透&#xff1a;&#xff1a;v-deep 样式也不生效 .el-month-table .today .cell {color: pink&#xff1b;font-weight: 400;}要让 popper-class“xclass” :append-to-body“false” 这俩配合着使用…

[Kubernetes[K8S]集群:Slaver从节点初始化和Join]:添加到主节点集群内

文章目录 操作流程&#xff1a;上篇主节初始化地址&#xff1a;前置&#xff1a;Docker和K8S安装版本匹配查看0.1&#xff1a;安装指定docker版本 **[1 — 8] ** [ 这些步骤主从节点前置操作一样的 ]一&#xff1a;主节点操作 查看主机域名->编辑域名->域名配置二&#x…

StylizedGS: Controllable Stylization for 3D Gaussian Splatting

StylizedGS: Controllable Stylization for 3D Gaussian Splatting StylizedGS&#xff1a;3D高斯溅射的可控样式化 Dingxi Zhang, Zhuoxun Chen, Yu-Jie Yuan, Fang-Lue Zhang, Zhenliang He, Shiguang Shan, and Lin Gao1 张定西&#xff0c;陈卓勋&#xff0c;袁玉洁&#x…

赋能力量,幸福花开 ——罗湖区懿米阳光开启全职妈妈社工培育计划

最美人间四月天&#xff0c;不负春光不负卿。 四月&#xff0c;迎来了全国社会工作师考试报名的日子&#xff0c;罗湖区全职妈妈妇联与罗湖区阳光妈妈妇联在服务过程中发现&#xff0c;全职妈妈们有获得社会工作师职业资格证的需求&#xff0c;为了更好地针对这一需求&#xf…

关于部署ELK和EFLKD的相关知识

文章目录 一、ELK日志分析系统1、ELK简介1.2 ElasticSearch1.3 Logstash1.4 Kibana&#xff08;展示数据可视化界面&#xff09;1.5 Filebeat 2、使用ELK的原因3、完整日志系统的基本特征4、ELK的工作原理 二、部署ELK日志分析系统1、服务器配置2、关闭防火墙3、ELK ElasticSea…

使用 Axios 处理 AxiosError 的三种常见方法

在使用 Axios 时处理 AxiosError 有几种常见的方法: 使用 try-catch 语句捕获异常: try {const response await axios.get(/api/data);// 处理响应数据 } catch (error) {if (error.response) {// 请求成功但状态码不在 2xx 范围console.log(error.response.data);console.l…

三款好用的 Docker 可视化管理工具

文章目录 1、Docker Desktop1.1、介绍1.2、下载地址1.3、在Windows上安装Docker桌面1.4、启动Docker Desktop1.5、Docker相关学习网址 2、Portainer2.1、介绍2.2、安装使用 3、Docker UI3.1、介绍3.2、安装使用3.2.1、常规方式安装3.2.2、通过容器安装 Docker提供了命令行工具&…

Docker Redis Debian服务器版

1.使用官方安装脚本自动安装docker 安装命令如下&#xff1a; curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh 如果安装提示 -bash sudo command not found 则需要 #update sudo apt-get update sudo apt-get install sudo再执行安装脚本1 安装…

STM32学习和实践笔记(9): 使用位带操作实现LED闪的实验

控制GPIO的那些寄存器&#xff0c;都在位带区。 根据上一篇讲的原理&#xff0c;要想每次只操作这些寄存的某一个bit而不影响别的bit&#xff0c;可以使用与这些bit相对应的位带别名区。 因此&#xff0c;在使用GPIO的位带操作之前&#xff0c;先要按上篇讲的原理&#xff0c…

从 Oracle 到 MySQL 数据库的迁移之旅

文章目录 引言一、前期准备工作1.搭建新的MySQL数据库2 .建立相应的数据表2.1 数据库兼容性分析2.1.1 字段类型兼容性分析2.1.2 函数兼容性分析2.1.3 是否使用存储过程&#xff1f;存储过程的个数&#xff1f;复杂度&#xff1f;2.1.4 是否使用触发器&#xff1f;个数&#xff…

知识图谱与人工智能:携手共进

知识图谱与人工智能&#xff1a;携手共进 一、引言&#xff1a;知识图谱与人工智能的融合 在这个数据驱动的时代&#xff0c;知识图谱与人工智能&#xff08;AI&#xff09;之间的融合不仅是技术发展的必然趋势&#xff0c;也是推动各行各业创新的关键。知识图谱&#xff0c;作…

[C++][算法基础]树的重心(树图DFS)

给定一颗树&#xff0c;树中包含 n 个结点&#xff08;编号 1∼n&#xff09;和 n−1 条无向边。 请你找到树的重心&#xff0c;并输出将重心删除后&#xff0c;剩余各个连通块中点数的最大值。 重心定义&#xff1a;重心是指树中的一个结点&#xff0c;如果将这个点删除后&a…

Unity之PlayableGraph实现动画的正播和倒播

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity之PlayableGraph实现动画的正播和倒播 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取&am…

python-study-day1

ps&#xff1a;前言 可做毕设&#xff0c;html&#xff0c;web&#xff0c;app&#xff0c;小程序&#xff0c;bug修改&#xff0c;可加急 作者自述 作为一名前端开发工程师&#xff0c;这个大环境不好的情况下&#xff0c;我试过我前端接单子但是没有后端&#xff0c…

Leetcode 239. 滑动窗口最大值和Leetcode 347. 前 K 个高频元素

目录标题 Leetcode 239. 滑动窗口最大值题目描述C语言代码和题解解题思路 Leetcode 347. 前 K 个高频元素题目描述C语言题解和思路解题思路 Leetcode 239. 滑动窗口最大值 题目描述 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最…

Java基础07--多线程-网络编程-Java高级

一、多线程 1.认识多线程 ①线程 ②多线程 2.创建线程方式 ①方式一&#xff1a;继承Thread类 1.让子类继承Thread线程类 2.重写run方法&#xff0c;就是这个线程执行会执行的操作。 3.创建继承Thread的子类对象就代表一个线程 4.启动线程:.start()-自动执行run方法 注意&am…