Pinctrl/Gpio简介(以应用层角度修改设备树)

news2024/11/23 15:13:51

1.先举个例子

1 、添加 pinctrl 节点
iomuxc 节点就是 I.MX6ULL 的 IOMUXC 外设对应的节点
imx6ull.dtsi

iomuxc: iomuxc@020e0000 {
	 compatible = "fsl,imx6ul-iomuxc";
	 reg = <0x020e0000 0x4000>;
}

imx6ull.dts 根节点下

gpioled {
	#address-cells = <1>;
	#size-cells = <1>;
	compatible = "atkalpha-gpioled";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_led>;
	led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
	status = "okay";
};
	...
&iomuxc {
	pinctrl-names = "default";
	imx6ul-evk {
        pinctrl_led: ledgrp {
            fsl,pins = <
            	MX6UL_PAD_GPIO1_IO03__GPIO1_IO03        0x10B0 /* LED0 */
            >;
        };
        ....
}

arch/arm/boot/dts/imx6ul-pinfunc.h文件

#define MX6UL_PAD_GPIO1_IO03__I2C1_SDA                            0x0068 0x02F4 0x05A8 0x0 0x1
#define MX6UL_PAD_GPIO1_IO03__GPT1_COMPARE3                       0x0068 0x02F4 0x0000 0x1 0x0
#define MX6UL_PAD_GPIO1_IO03__USB_OTG2_OC                         0x0068 0x02F4 0x0660 0x2 0x0
#define MX6UL_PAD_GPIO1_IO03__REF_CLK_32K                         0x0068 0x02F4 0x0000 0x3 0x0
#define MX6UL_PAD_GPIO1_IO03__USDHC1_CD_B                         0x0068 0x02F4 0x0668 0x4 0x0
#define MX6UL_PAD_GPIO1_IO03__GPIO1_IO03                          0x0068 0x02F4 0x0000 0x5 0x0
#define MX6UL_PAD_GPIO1_IO03__CCM_DI0_EXT_CLK                     0x0068 0x02F4 0x0000 0x6 0x0
#define MX6UL_PAD_GPIO1_IO03__SRC_TESTER_ACK                      0x0068 0x02F4 0x0000 0x7 0x0
#define MX6UL_PAD_GPIO1_IO03__UART1_DCE_RX                        0x0068 0x02F4 0x0624 0x8 0x1
#define MX6UL_PAD_GPIO1_IO03__UART1_DTE_TX                        0x0068 0x02F4 0x0000 0x8 0x0

IOMUX概念引出

1.IOMUX概念

IOMUX概念的引出:SOC厂商为了推出功能丰富的核心板,以应对不同市场不同用户的需求,引入了引脚复用-IOMUXC架构。

IOMUX架构:输入输出多路复用器(Input/Output Multiplexer ),说白了就是用有限的引脚资源实现尽可能多的功能,每个引脚最多可复用好几种功能,每个功能又可以出现在不同的引脚上。

2.IOMUX引脚功能配置方法

IOMUX引脚功能配置,主要是对SOC芯片中IOMUXC控制器中的各寄存器作相应参数配置。

控制器中的寄存器主要分为三大类:

IOMUXC_SW_PAD_CTRL_X - 管脚控制寄存器

IOMUXC_SW_MUX_CTL_PAD_X - 输出路由寄存器

IOMUXC_X_SELECT_INPUT - 输入路由寄存器

在Linux内核中,我们定义引脚时,会用到以下6个参数,分别是:

_pad_ctrl_ofs - 控制寄存器的偏移地址(16进制)

_mux_ctrl_ofs - MUX控制寄存器的偏移地址(16进制),用于选择引脚的功能

_mux_mode - MUX模式,bit03,范围07

_select_input_ofs - SELECT_INPUT寄存器偏移地址(16进制)

_select_input - Daisy Chain模式,bit01,范围03

_pad_ctrl - 引脚控制寄存器

关于前5个参数的配置方法,网上有很多文档讲的很好,很细致。而且在Linux内核的dtb目录中,SOC厂商已经把各功能引脚的这五个参数的值写到了相应的宏定义头文件(xxx-pinfunc.h)中,直接查看即可,无需更改。

对应关系,如下例所示:

0x00680x02F40x50x00000x0
mux_ctrl_ofspad_ctrl_ofssel_input_ofsmux_modesel_input

此图包含了 _pad_ctrl_ofs 和 _pad_ctrl_ofs 的值_select_input_ofs
在这里插入图片描述
这里主要讲最后一个参数如何确定,因为最后一个参数往往需要我们自己在设备树-dtb中添加或修改。

_PAD_CTRL的确定:

首先,要有soc芯片厂商提供的芯片使用手册。
0x10B0 就是 conf_reg 寄存器值!此值由用户自行设置,通
过此值来设置一个 IO 的上/下拉、驱动能力和速度等。在这里就相当于设置寄存器
IOMUXC_SW_PAD_CTL_PAD_UART1_RTS_B 的值为 0x10B0 。
在这里插入图片描述

其次,翻阅到IOMUXC章节,找到对应引脚功能的MUX_PAD_CTRL寄存器,根据手册说明确定其值即可。

比如,我在xxx-pinfunc.h头文件中,查到A引脚可做GPIO1_IO01使用,那么我就在IOMUXC章节中搜索包括GPIO1_IO01和PAD_CTRL的寄存器即可。

若搜索不到,可以在External Signals and Pin Multiplexing章节搜索GPIO1_IO01,看看他被哪个功能名称所替代,然后再用那个功能名称去IOMUXC章节搜索即可。

最后,在设备树的dtb中的iomux部分,添加该功能引脚定义即可。

IOMUX的寄存器配置是通过物理地址->总线地址一
一映射到复用控制器上的,将物理地址的参数值传递给挂载在总线的IOMUXC控制寄存器上,也就是引脚功能配置最终是靠IOMUXC控制器来完成。
引脚配置完成后,还需要配置具体功能的控制器里寄存器参数,这样才能共同完成引脚的功能确定。IOMUX只起了一个功能切换的作用。

Pinctrl是一种硬件抽象层,它允许驱动程序通过配置引脚的电平、输入/输出、时钟等属性来控制硬件设备的行为。

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

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

相关文章

深入业务场景的数据使用安全管控实践

《数据安全法》第三条对数据安全给出了明确的定义&#xff1a;“数据处理包括数据的收集、存储、使用、加工、传输、提供、公开等。数据安全是指通过采取必要措施&#xff0c;确保数据处于有效保护和合法利用的状态&#xff0c;以及具备保障持续安全状态的能力。” 数据随着业…

Python 学到什么程度才可以去找工作?掌握这 4 点足够了!

大家在学习Python的时候&#xff0c;有人会问“Python要学到什么程度才能出去找工作”&#xff0c;对于在Python培训机构学习Python的同学来说这都不是问题&#xff0c;因为按照Python课程大纲来&#xff0c;一般都不会有什么问题&#xff0c;而对于自学Python来说&#xff0c;…

【2023B题】人工智能对大学生学习影响的评价(思路、代码)

目录 &#x1f4a5;1 概述 &#x1f4da;2 Matlab代码实现 &#x1f389;3 参考文献 &#x1f308;4 运行结果 &#x1f4a5;1 概述 人工智能简称AI&#xff0c;最初由麦卡锡、明斯基等科学家于1956年在美国达特茅斯学院开会研讨时提出。 2016年&#xff0c;人工智能AlphaGo …

【day 06】vue的组件

组件 组件就是把一个网页分割成独立的小的模块&#xff0c;然后通过把模块进行组合&#xff0c;构建成一个大型的应用 单文件组件 只有一个组件 html css js 都在这个文件内 非单文件组件 可有多个组件 全局注册 !! 得先注册子组件 再生成 vm实例对象 创建子组件 const …

JS - 写一个简单的静态页面支持上传文件并转Base64编码

JS - 写一个简单的静态页面支持上传文件并转Base64编码 前言静态页面代码 前言 我后端有一个上传文件并判断其文件类型的功能&#xff0c;我希望拿不同的文件流进行测试&#xff0c;但是文件的请求体又得获得。拿来作为参数传递。因此写了个静态文件去获取。 静态页面代码 &…

STM32用CUBEMx生成工程, 不使用CMSIS, 自己移植freertos

目录 完整工程代码: 零. 参考 一. 外围配置 二, 放进来freertos源代码 三.修改makefile 四. 解决修改函数重定义报错 五. 让Freertos的systick工作起来 六. 验证 完整工程代码: ​​​​​​https://download.csdn.net/download/u011493332/87821404 零. 参考 正在入门…

虚拟机磁盘扩容及重新分区方法

创建虚拟机的时候&#xff0c;如果分配的磁盘过小&#xff0c;在后续的使用时可能需要进行扩容&#xff0c;在扩容后你会发现好像磁盘并没有变大&#xff0c;这时候就需要进行重新分区 一、虚拟机扩容 在将需要扩容的虚拟机关机后&#xff0c;点击VMware的菜单栏中的虚拟机&…

面试:前端安全之XSS及CSRF

一、概念&#xff1a; XSS攻击全称跨站脚本攻击(Cross Site Scripting); CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;也被称为“One Click Attack”或者Session Riding&#xff0c;通常缩写为CSRF或者XSRF;是一种挟制用户在当前已登录的…

合同管理系统对企业的重要性,不仅能降本增效,还能规避风险

企业管理合同有哪些通病 企业在管理合同会经常遇到在约定条款时存在空泛、笼统的情况&#xff0c;导致在实际操作时产生争议&#xff0c;没有系统化进行操作规范&#xff0c;由于签订合同的时候可能存在一些法律问题&#xff0c;如未经授权签署的合同、涉及侵犯他人权益的条款…

港联证券|北向资金为何大量买入?哪些股容易受到青睐?

北向资金由于流动情况透明且披露及时&#xff0c;一直备受投资者们的关注。那么北向资金为何大量买入&#xff1f;哪些股容易受到青睐&#xff1f;港联证券也为大家准备了相关内容&#xff0c;以供参考。 北向资金为何大量买入&#xff1f; 1、中国经济增长预期较好。这为北向…

Prettier Eslint Stylelint Husky lint-staged

关于代码格式的讨论数不胜数&#xff0c;个人认为没有绝对的对与错&#xff0c;代码只要始终遵守可读性&#xff0c;可拓展性强这两点我认为就是优秀的代码。 如果是个人项目那就没有什么问题&#xff0c;但是如果涉及到多人开发&#xff0c;就不可避免的遇到代码风格迥异&…

uni-app 中如何实现触底加载功能

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是全栈 …

队列与C++中的std::queue详解(多图超详细)

文章目录 队列&#xff08;Queue&#xff09;什么是队列队列的基本操作和应用1. 入队2. 出队3. 入队出队的复杂度和应用 类模板std::queue形参T和Container成员函数1. 元素访问2. 容量3. 队列的修改 用法示例 队列&#xff08;Queue&#xff09; 什么是队列 队列就是一种线性…

单模光纤三维模场分布动画的MATLAB实现

利用MATLAB的动画功能&#xff0c;我们可以把上一篇中绘制的三维分布图变为动画 clear close all clcV 2.4000; U 1.6453; W 1.7473;Npoint 501; Rx 5; Ry 5; x linspace(-Rx,Rx,Npoint); y linspace(-Ry,Ry,Npoint); [X Y] meshgrid(x,y); R sqrt(X.^2Y.^2);E1 …

Android自定义View:超过最大高度时支持滚动并且解决滑动冲突的TextView

VerticalScrollTextView&#xff1a;超过最大高度时支持滚动并且解决滑动冲突的TextView 正如标题所说&#xff0c;这个自定义TextView在它的行数超过最大行数或是高度超过最大高度限制时&#xff0c;会将TextView设置为可纵向滑动的状态&#xff0c;如果没有超过限制&#xf…

python 的APScheduler配置的定时任务会被Miss掉

背景 python 的APScheduler配置的定时任务会被Miss掉&#xff0c;经常在控制台收到一些Miss的告警信息&#xff0c;就觉得是任务太多导致的&#xff0c;为了定位到具体的原因&#xff0c;看了一些源码&#xff0c;了解到了定时任务的6大模块的协同工作模式。异常信息及来源 异…

01.GATK人种系变异最佳实践SnakeMake流程:WorkFlow简介

<~生~信~交~流~与~合~作~请~关~注~公~众~号生信探索> 学习的第一个GATK找变异流程&#xff0c;人的种系变异的短序列变异&#xff0c;包括SNP和INDEL。写了一个SnakeMake分析流程&#xff0c;从fastq文件到最后的vep注释后的VCF文件&#xff0c;关于VCF的介绍可以参考上一…

Windows 安装 GCC

文章目录 GCC 是什么&#xff1f;GCC 和 gcc 什么关系&#xff1f;Windows 安装 GCC选型下载安装配置环境变量验证 参考文献 GCC 是什么&#xff1f; GCC&#xff08;GNU Compiler Collection&#xff09;是一个开源的编译器套件&#xff0c;由 GNU 项目开发和维护。 GNU 编译…

悠可集团再获金鼠标3项大奖,自研营销工具助推全渠道数字营销

5月19日,第14届金鼠标数字营销大赛评选结果揭晓,悠可集团斩获3项大奖,其中悠可集团被评为“年度数字营销杰出代理商”,悠可DTC团队自主研发的智能广告投放引擎Turbo Media及点正科技申报的KOL优先自动化工具均荣获“年度最佳数字营销工具”奖项。 据主办方介绍,本届金鼠标数字营…

java基础 - jvm 堆、栈、方法区 java 内存模型

一、 概览 在进入主题前&#xff0c;我们先了解一些相关的知识&#xff0c;方面后面对运行时数据区进行分类。 进程中&#xff0c;有很多数据是多线程之间共享的&#xff0c;线程在执行时&#xff0c;会先从主存中读取数据&#xff0c;然后复制一份到高速缓存中&#xff0c;当…