android 查看gpio状态_如何计算Linux中GPIO的编号并且操作它?

本文介绍了Linux GPIO子系统,用于统一不同开发板的GPIO驱动。通过sysfs在应用层访问GPIO,以gpiochipXX目录和label文件确定GPIO控制器和基址。以imx6ull开发板为例,展示了如何计算GPIO5_3对应的编号131,以及如何导入、设置方向和状态,最后卸载GPIO的操作流程。
摘要由CSDN通过智能技术生成

e3166fe1917b6313f1667f9cfd5a3ed3.png

首先简单介绍一下Linux的gpio子系统:

Linux是一个庞大的系统,除了支持pc以外,还支持很多嵌入式的开发板。而种类繁多的开发板的GPIO驱动往往都不同,这就是使得驱动工程师不得不对于每一种开发板都设计一套GPIO驱动来,而且长此以往Linux内核会被这类无意义的代码所占据,因此Linux引入了GPIO子系统的架构来解决这个问题。

具体想要了解GPIO子系统的请参考蜗窝科技上的文章

linux内核中的GPIO系统之(1):软件框架​www.wowotech.net
9a19e019b30ee29b01d1f6adc3780c57.png

言归正传:

如果你在驱动中注册了GPIO Controller那么我们就可以在linux系统的应用层查找到它,并且根据GPIO Controller的“base number”计算出我们要使用的引脚的真实引脚编号。

应用层我们可以通过sysfs访问GPIO(树莓派的IO控制库wiringPI 用的就是这个方法)。

具体方法如下:

  • 在开发板系统的 /sys/class/gpio的目录下,找到gpiochipXX 目录,如下图

957d914e45478871cee7b7675ba54a57.png
  • 进入某一个gpiochipxx的目录中,查看文件lable内容,以gpiochip128为例:获取到地址为"20ac000"。

145881ec1f0facd47e1928963d38e7a6.png
  • 使用这个地址,与设备树中的地址对应,查找设备树,发现gpio5 与之对应

3b5b497ddf736a07030aa3792e3a01ac.png

由此可以确定gpio5这组引脚的基准脚就是128.

如果想操作GPIO5_IO14 这个引脚的话,就需要操作gpio128这个控制器并且引脚的编号为128+14

例子:

我以我手中的imx6ull 开发板为例,举例说明如何操作这个引脚。

fc9c70665043ee75662ec134fa75cc45.png

使用引脚是GPIO5_3,按照之前的计算,这个引脚的编号应该是128+3=131

  • 导入GPIO:这个编号导入到export文件中

87eb1fbc6223b485951e82ffdeea6021.png

导入完成后会在gpio文件夹中创建一个GPIO131的文件夹,用户通过操作这个文件夹中的文件实现对gpio的控制。

  • 设置方向:

f90caa1cb38ea4ff5c91322c742c9a87.png
  • 设置LED状态:

99e1671688751dca861600efcef01fed.png
  • 卸载GPIO:将卸载编号写入unexport中

40dbf516304ed2a0f9d58e8079805332.png

操作完成后,gpio131 文件夹自动被删除。

至此计算GPIO的编号和操作方法就讲完了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值