第十二期 | GPIO子系统
文章平均质量分 93
GPIO子系统
北京迅为
让学习更简单,让开发更容易
展开
-
RK3568驱动指南|第十二篇 GPIO子系统-第128章 GPIO入门实验
我们甚至不用去写驱动,直接命令操作就可以了,因为linux系统本身有好多成熟的驱动框架,使用这些框架的好处就是当我们更换平台的时候,比如换到RK3568平台,我们应用程序可以几乎不用做任何改变,就可以直接在新的平台上运行。GPIO的实际应用举例,比如按键输入,当按下按键的时候,GPIO引脚的状态会发生变化,可以通过读取GPIO引脚的状态来检测按键事件,并进行相应的处理。控制led灯,GPIO可以控制LED的状态,通过设备GPIO引脚的输出状态,可以控制LED的亮灭,实现指示灯,状态指示等功能。原创 2024-01-13 10:19:01 · 1972 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第129章 GPIO控制和操作实验
GPIO软件编程方式有多种,可以写驱动程序调用GPIO函数操作GPIO,也可以直接通过操作寄存器的方式操作GPIO,还可以通过sysfs方式实现对GPIO的控制。会发现在/sys/class/gpio 目录下生成了一个名为 gpio15 的文件夹(gpioX,X 表示对应的编 号),该文件夹就是导出来的 GPIO 引脚对应的文件夹,用于管理、控制该 GPIO 引脚。出现上图报错的原因是该GPIO已经被其他GPIO使用,需要在内核中找到使用GPIO的驱动,并取消该驱动才可以正常使用GPIO。原创 2024-01-13 11:27:02 · 3346 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第130章 GPIO的调试方法
6. /sys/kernel/debug/pinctrl/*/pinconf-pins:这些文件包含了GPIO引脚的配置信息,如输入/输出模式、上拉/下拉设置等。如下图所示,我们进入/sys/kernel/debug/目录下。5. /sys/kernel/debug/pinctrl/*/pingroups:该路径提供有关用于配置和控制系统上的 GPIO引脚的引脚组的信息。2. /sys/kernel/debug/pinctrl/*/pins:这些文件列出了GPIO的引脚编号,可以查看GPIO编号。原创 2024-01-13 14:10:10 · 1402 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第131章 GPIO子系统API函数的引入
新版本GPIO子系统接口是基于描述符(descriptor-based)来实现的,而旧版本的GPIO子系统接口是基于整数(integer-based)来实现的,在Linux内核中为了保持向下的兼容性,旧版本的接口在最新的内核版本中仍然得到支持,而随着时间的推移,新版本的GPIO子系统接口会越来越完善,最终完全取代旧版本,所以在本课程中主要讲解新版本的GPIO子系统接口。(11)void *data: 指向与GPIO设备相关的数据的指针,用于存储和访问与GPIO设备相关的自定义数据。原创 2024-01-13 15:08:52 · 1121 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第133章 GPIO操作函数实验
返回值为整型,表示GPIO的方向。如果成功获取到GPIO方向,返回值为GPIO_LINE_DIRECTION_IN(0)表示输入,或GPIO_LINE_DIRECTION_OUT(1)表示输出。gpiod_direction_input 将给定的GPIO描述符所代表的GPIO配置为输入模式。gpiod_direction_output 函数用于配置GPIO的方向为输出,并可指定初始输出值。gpiod_get_direction函数用于获取GPIO的方向,即判断GPIO是输入还是输出。原创 2024-01-13 16:10:07 · 1320 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第134章 三级节点操作函数实验
该函数的功能是在给定的父设备节点 dev 下获取当前子设备节点 child 的下一个子设备节点。在上一个章节中讲解了新版本GPIO子系统中的GPIO操作实验,而在进行操作之前首先要获取相应的gpio描述,在前面的示例中获取的都是二级节点的GPIO描述,那如果我们要如何获取下面led1和led2两个三级节点的gpio描述呢?如果仍旧使用gpiod_get来获取gpio描述会发现是获取不成功呢,获取三级节点的GPIO描述要使用什么函数呢,带着疑问,让我们进入本章节的学习吧。如果获取失败,返回值为 NULL。原创 2024-01-13 16:57:14 · 1121 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第135章 GPIO子系统与pinctrl子系统相结合实验
在第四行中的pinctrl-names参数并不是default,这就需要用到我们前面pinctrl子系统中的知识来查找并设置相应的pinctrl状态了,所以再第一节中我们将会重新学习一下pinctrl的一些相关函数。pinctrl 状态是与引脚相关的配置和控制状态,例如引脚模式、电气属性等。struct pinctrl *p:指向 pinctrl 实例的指针,表示要进行状态查找的 pinctrl。struct pinctrl *p:指向 pinctrl 实例的指针,表示要进行状态设置的 pinctrl。原创 2024-01-13 17:28:59 · 1007 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-第136章 实战:实现动态切换引脚复用功能
当向selectmux文件写入0时表示选择功能2,也就是将该引脚复用为I2C3_SDA,当向selectmux文件写入1时表示选择功能1,也就是将该引脚复用为GPIO,这里我们先输入以下命令向selectmux文件写入1,验证GPIO的复用。左侧为该引脚的一些其他复用功能,在前面的章节中复用的都是GPIO功能,而本章节中将实现I2C3_SDA和GPIO两个复用功能的动态切换。pinctrl-1 指定了与该配置相关联的引脚控制器句柄,这里为 &i2c3_sda,表示复用为i2c3_sda功能。原创 2024-01-13 17:49:58 · 1530 阅读 · 0 评论 -
RK3568驱动指南|第十二篇 GPIO子系统-132章 获取单个gpio描述实验
相较于上面介绍的gpiod_get函数,下面的三个函数可能会多一个index参数和optional的函数后缀,其中index 表示GPIO的索引值,当设备树的GPIO属性值包含多个GPIO引脚描述时,使用index来表示每个GPIO引脚的唯一标识。在第三行的内容中,1 表示引脚索引,RK_PA0表示资源描述符,用于标识与该引脚相关联的物理资源,表示引脚所属的功能组,RK _FUNC_GPI0 表示将引脚的功能设置为GPIO,&pcfg_pull_none表示引脚配置为无上下拉。原创 2024-01-13 15:48:40 · 1275 阅读 · 0 评论