文章目录
参考文章
https://blog.csdn.net/qq_41483419/article/details/134015533
https://blog.csdn.net/baidu_38661691/article/details/97147652
一、简介
在用户空间中控制GPIO:
/sys/class/gpio为通用输入输出(GPIO)设备类的子目录,用于与外部设备进行数字输入和输出的通信。
知识点补充:/sys/class 该目录下包含所有注册在kernel里面的设备类型,这是按照设备功能分类的设备模型,每个设备类型表达具有一种功能的设备。每个设备类型子目录下都是这种设备类型的各种具体设备的符号链接,这些链接指向/sys/devices/name下的具体设备。设备类型和设备并没有一一对应的关系,一个物理设备可能具备多种设备类型;一个设备类型只表达具有一种功能的设备,比如:系统所有输入设备都会出现在/sys/class/input之下,而不论它们是以何种总线连接到系统的。(/sys/class也是构成linux统一设备模型的一部分)
在/sys/class/gpio/下有个export文件,向export文件写入要操作的GPIO号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO输入或者输出模式,而value可控制GPIO的状态或者读取状态。
/sys/class/gpio/目录下各个文件说明:
/sys/class/gpio/export文件用于通知系统需要导出控制的GPIO引脚编号;
/sys/class/gpio/unexport 用于通知系统取消导出;
/sys/class/gpio/gpioX/direction文件,可以写入in(设置输入方向)或out(设置输出方向);
/sys/class/gpio/gpioX/value文件是可以读写GPIO状态;
/sys/class/gpio/gpiochipX目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号,寄存器名称,引脚总数;其中X表示具体的引
需要导出的GPIO编号(GPIO Number)往往取决于具体的硬件设计和应用需求。每个GPIO口在硬件设计图(如原理图)中通常都有对应的编号,这个就是GPIO的物理编号。而在编程中使用的GPIO编号则取决于操作系统和驱动如何映射这些物理GPIO口。在许多情况下,硬件设计师或者系统集成者会提供一个文档==(芯片手册)==,列出了各个GPIO口的物理编号和它们的功能(比如连接到哪个设备、控制什么信号等)。在这个文档的帮助下,你可以确定你在应用程序中需要使用哪个GPIO口,然后查找相应的GPIO编号。
在某些情况下,你可能需要查看内核源代码或者硬件抽象层(HAL)的源代码来找出物理GPIO口和GPIO编号之间的映射关系。
缺点:这种方式一般不采用,为了gpio使用的安全性,一般是不将gpio的使用权暴露给应用层的,即sys/class/下没有gpio节点。
二、GPIO接口原理图
通过GPIO控制LED1~3的亮灭(LED4被占用为常亮状态)
设备 | GPIO的物理编号 | 编程中使用的GPIO编号 |
---|---|---|
LED1 | GPIO49 | 465 |
LED2 | GPIO51 | 467 |
LED3 | GPIO50 | 466 |
三、在用户空间控制GPIO步骤
-
执行 echo <GPIO_Number> > /sys/class/gpio/export 导出 GPIO 管脚,将 GPIO_Number 替换为你想操作的 GPIO 编号。
-
检查 /sys/class/gpio/gpio<GPIO_Number> (将 GPIO_Number 替换为你想操作的 GPIO 编号)目录下是否有 direction 和 value 文件。
物理GPIO口和GPIO编号之间的映射关系: 参考自己所用芯片的手册,我的在 Linux外设驱动开发参考.pdf下
LED1
## LED1
echo 465 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio465/direction
echo 1 > /sys/class/gpio/gpio465/value
echo 0 > /sys/class/gpio/gpio465/value
LED2
## LED2
echo 467> /sys/class/gpio/export
echo out > /sys/class/gpio/gpio467/direction
echo 1 > /sys/class/gpio/gpio467/value
echo 0 > /sys/class/gpio/gpio467/value
LED3
## LED3
echo 466 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio466/direction
echo 1 > /sys/class/gpio/gpio466/value
echo 0 > /sys/class/gpio/gpio466/value
LED1与LED2
## LED1与LED2
echo 465 > /sys/class/gpio/export
echo 467 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio465/direction
echo out > /sys/class/gpio/gpio467/direction
echo 1 > /sys/class/gpio/gpio465/value
echo 1 > /sys/class/gpio/gpio467/value
echo 0 > /sys/class/gpio/gpio465/value
echo 0 > /sys/class/gpio/gpio467/value
标签:Linux,用户,value,echo,sys,gpio,GPIO,class
From: https://blog.csdn.net/weixin_56438859/article/details/139234001