文档章节

/sys/class/gpio 操作方法

宁宁爸
 宁宁爸
发布于 2016/01/29 15:50
字数 659
阅读 232
收藏 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

共有 人打赏支持
宁宁爸
粉丝 80
博文 57
码字总数 25735
作品 0
高级程序员
Cubieboard官方 GPIO驱动使用总结

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

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

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

wangjian19
2014/07/28
0
5
把GPIO 通过sysfs导出到 用户空间

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

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

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

元宵大师
07/11
0
0
君正X系列开发11---pwm配置、分析

该芯片提供了4路PWM, 可以通过配置内核实现pwm节点; 具体配置 ->Device Drivers -> Pulse-Width Modulation (PWM) Support (PWM [=y]) --- Pulse-Width Modulation (PWM) Support <*> JZP......

cyf15238622067
05/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
34分钟前
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
46分钟前
0
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
0
0
LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)

Nginx负载均衡 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时...

蛋黄_Yolks
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部