文档章节

/sys/class/gpio 操作方法

宁宁爸
 宁宁爸
发布于 2016/01/29 15:50
字数 659
阅读 272
收藏 0

嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。下面以ZC702开发上调试为例子说明流程:

首先,看看系统中有没有“/sys/class/gpio”这个文件夹。

如果没有请在编译内核的时候加入   Device Drivers  —>  GPIO Support  —>     /sys/class/gpio/… (sysfs interface)。注:本人的内核默认是选中的,不需要重新选择

/sys/class/gpio 的使用说明:

1、gpio_operation 通过/sys/文件接口操作IO端口 GPIO到文件系统的映射;

2、控制GPIO的目录位于/sys/class/gpio;

3、 /sys/class/gpio/export文件用于通知系统需要导出控制的GPIO引脚编号;

4、/sys/class/gpio/unexport 用于通知系统取消导出;

5、/sys/class/gpio/gpiochipX目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称,引脚总数 导出一个引脚的操作步骤;

6、首先计算此引脚编号,引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数;

7、向/sys/class/gpio/export写入此编号,比如12号引脚,在shell中可以通过以下命令实现,命令成功后生成/sys/class/gpio/gpio12目录,如果没有出现相应的目录,说明此引脚不可导出:echo 12 > /sys/class/gpio/export;

8、direction文件,定义输入输入方向,可以通过下面命令定义为输出;

9、echo out > direction, direction接受的参数:in, out, high, low。high/low同时设置方向为输出,并将value设置为相应的1/0;

10、value文件是端口的数值,为1或0.echo 1 > value


下面在ZC702开发板下进行一下测试

1.取得GPIO信息,在终端中敲入以下命令:

1.1、$ cd /sys/class/gpio;

1.2、$ for i in gpiochip* ; do echo `cat $i/label`: `cat $i/base` ; done

本人用的命令是:echo `cat gpiochip906/label`: `cat gpiochip906/base`


终端中显示如下:

zynq_gpio: 906


2.计算GPIO号码

我们把GPE10用来控制LED。

GPIO的头是906,10 就是906+10 = 916.

$ echo 916 > /sys/class/gpio/export

ls 一下看看有没有 gpio916 这个目录

3.GPIO控制测试。

控制LED所以是输出。

所以我们应该执行:

$ echo out > /sys/class/gpio/gpio916/direction

之后就可以进行输出设置了。

$ echo 1 > /sys/class/gpio/gpio916/value

$ echo 0 > /sys/class/gpio/gpio916/value



本文转载自:http://bbs.elecfans.com/jishu_447971_1_1.html

宁宁爸
粉丝 82
博文 58
码字总数 26478
作品 0
高级程序员
私信 提问
Cubieboard官方 GPIO驱动使用总结

最近参考了tll同学的GPIO操作教程,终于完成了CB的GPIO控制操作。 板子使用的操作系统是官方标准系统1.1版本的linaro官方img的,本身已经带gpio驱动文件。 1.官方驱动为gpio-sunxi.ko,位于 ...

cubieboard
2014/08/22
1K
0
Android应用层操作GPIO

Android应用层操作GPIO的方法: http://my.oschina.net/u/1176566/blog/177554 在使用某个GPIO之前首先的保证此GPIO没有正在被使用,否则是无法操作的; 如NAND模块的NCE3/PC18,此io口正被使...

wangjian19
2014/07/28
12.4K
5
GPIO操作原理(Linux一切皆文件)

系统定义了一切皆文件的原则,甚至于硬件:,,等……,这样的好处是,在不同的平台和硬件上都能形成统一的调用方式。 这里,我们从,探讨下的操作原理(非内核原理):通过 sysfs 方式控制 ...

dingdayu
2018/09/08
984
1
把GPIO 通过sysfs导出到 用户空间

在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio”...

wangjian19
2013/11/19
4.7K
0
嵌入式linux系统的开发——GPIO及LED/KEY的功能实现

GPIO功能注册和控制 MT7688支持引脚功能的复用,通过配置GPIO1MODE和GPIO2MODE寄存器可指定引脚的功能,通常在dts文件中对引脚功能进行注册。 MT7688引脚的GPIO注册位于/target/linux/ramip...

元宵大师
2018/07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

自建redis笔记

自建redis笔记 最近在linux安装了一下redis,特做一些笔记! 本文先单节点启动redis,然后再进行持久化配置,在次基础上,再分享搭建主从模式的配置以及Sentinel 哨兵模式及集群的搭建 单节点...

北极之北
12分钟前
1
0
vue+element之多表单验证

方法一:利用promise var p1=new Promise(function(resolve, reject) { this.$refs[form1].validate((valid) => { if(valid){ ......

沉迷代码我爱学习
14分钟前
1
0
golang 1.13 errors 包 新函数介绍

引 这次 errors 包算重量级更新。很有更能把以前的一些设计模式给推到。下面聊下用法。 error 装包 以前返回一个错误,想要保存 error 链,还要定义结构体保存以前的 error 信息。感兴趣看下...

guonaihong
23分钟前
38
0
并发编程之线程池

一、线程池 1、什么是线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序 都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 第一:降...

codeobj
25分钟前
3
0
知识点总结思维导图模板分享,良心安利,建议收藏

思维导图经常被用在学习中,对大脑思维进行发散,对知识进行记忆。使用思维导图可以让知识更加简单更有层次。下面是利用思维导图所绘制的几款知识点总结思维导图模板,大家可以进行进行参考使...

干货趣分享
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部