0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux不写驱动控制直接控制GPIO

h1654155971.7688 来源:21ic电子网 2019-12-09 15:38 次阅读

说到控制硬件,马上就能想到写个内核模块,驱动一下,像gpio_request、open、read、write……一堆API就出来了。

其实,只是想简单的控制一下GPIO输入或者输出,不用这么复杂,系统已经实现相关驱动了,只需要了解怎么用就可以了。

在用户空间通过sysfs控制GPIO,先访问/sys/class/gpio/,向export文件写入要操作的GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO输入或者输出模式,而value可控制GPIO的状态或者读取状态。

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

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

/sys/class/gpio/gpiochipX目录保存系统中GPIO寄存器信息,包括每个寄存器控制引脚的起始编号,寄存器名称,引脚总数;

/sys/class/gpio/gpioX/direction文件,可以写入in或out设置输入输入方向;

/sys/class/gpio/gpioX/value文件是可以读写GPIO状态;

示例:

1. 导出2号GPIO /sys/class/gpio# echo 2 > export

2. 设置方向为输出 /sys/class/gpio/gpio2# echo out > direction

3. 查看当前方向 /sys/class/gpio/gpio2# cat direction

4. 设置输出高电平 /sys/class/gpio/gpio2# echo 1 > value

5. 查看当前值 /sys/class/gpio/gpio2# cat value

6. 取消导出2号GPIO /sys/class/gpio# echo 2 > unexport

查看当前GPIO使用情况:

cat /sys/kernel/debug/gpio

那么问题来了,在SOC手册上看到的GPIO引脚号都是GPIOA5、GPIOB7、GPH12等这样的名称,哪来的GPIO编号呢?

别急,给你一个shell脚本,肯定是你想要的:

#! /bin/shforiin/sys/class/gpio/gpiochip*doecho`cat$i/label`: `cat$i/base`done

上面的脚本在开发板上执行,可能会是这样的输出结果:

GPIOA: 0GPIOB: 32GPIOC: 64GPIOD: 96GPIOE: 128GPIOF: 160GPIOG: 192GPIOH: 224

这是什么意思嘞?举个例子:

假设要操作的GPIO是GPE5,那么,对应的GPIO就是133,怎么算的呢?

其实,上面是各个GPIO组的起始编号,GPE的起始编号是128,即GPE0的编号是128,那么GPE5的编号就是GPE0 + 5 = 128 + 5 = 133

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10988

    浏览量

    206725
  • 驱动控制
    +关注

    关注

    0

    文章

    88

    浏览量

    15638
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50562

原文标题:神操作!Linux不写驱动控制直接控制GPIO

文章出处:【微信号:weixin21ic,微信公众号:21ic电子网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用STM32 HAL库进行GPIO控制的实例

    在基于STM32微控制器的嵌入式系统开发中,GPIO(GeneralPurposeInput/Output)控制是其中最基本、最常见的操作之一。通过使用STM32的HAL库,可以轻松地对GPI
    的头像 发表于 12-21 15:22 1111次阅读

    如何通过GPIO驱动配置实现控制i.MX8芯片引脚电平变化

    本文我们要讲的是如何通过 GPIO 驱动配置实现控制 i.MX8 芯片引脚电平变化。
    的头像 发表于 12-04 11:41 562次阅读
    如何通过<b class='flag-5'>GPIO</b><b class='flag-5'>驱动</b>配置实现<b class='flag-5'>控制</b>i.MX8芯片引脚电平变化

    STM32使用GPIO配置的5种方式

    采用五种不同的方式,具体如下: 一、使用直接寄存器访问 这种方式是最原始的GPIO访问方式,直接访问GPIO控制寄存器来配置相应的复用功能
    的头像 发表于 10-26 17:42 768次阅读

    Linux平台来研究GPIO软件框架

    方法,让它可以像单片机一样简单的操作 IO 口,这得益于各路 Linux 大神对系统底层的封装。 在 Linux 中有 pinctrl 和 gpio 子系统,它们提供了 API 接口给你使用,让你方便
    的头像 发表于 09-28 16:05 371次阅读
    从<b class='flag-5'>Linux</b>平台来研究<b class='flag-5'>GPIO</b>软件框架

    如何实现Linux下的LED驱动

    LED驱动 我们以imx6ull pro开发板的板载led为例,其板载了一个可控制的Led2,原理图如下: LED2进行上拉电阻,另外一个管脚接到了 GPIO5_3 ,因此 GPIO5
    的头像 发表于 09-27 11:03 312次阅读
    如何实现<b class='flag-5'>Linux</b>下的LED<b class='flag-5'>驱动</b>

    请问可以用Byte为单位控制GPIO吗?

    请问,可以用Byte为单位控制GPIO吗? 要如何使用呢? (BSP内都用bit) 或者,有详细GPIO控制文件可以下载吗? 或者,哪裡可以查到G
    发表于 08-28 07:11

    步进电机的控制原理是什么?如何实现步进电机的控制

    先来看一下硬件原理图,可看到控制步进电机的管脚分别为:GPIO6[2]、GPIO6[3]、GPIO6[4]和GPIO1[15]。使用的是一路
    发表于 08-04 14:45 2870次阅读
    步进电机的<b class='flag-5'>控制</b>原理是什么?如何实现步进电机的<b class='flag-5'>控制</b>?

    磁通矢量控制直接转矩控制介绍

    目前,在工控驱动层面存在三种主流的控制技术:V/F标量控制、磁通矢量控制直接转矩控制(DTC)
    发表于 07-17 09:45 1269次阅读
    磁通矢量<b class='flag-5'>控制</b>和<b class='flag-5'>直接</b>转矩<b class='flag-5'>控制</b>介绍

    Milk-V Duo开发板免费体验 GPIO分析

    0: gpio@03020000 {porta: gpio-controller@0 {interrupt-controller;interrupts = ;interrupt-parent = ;};}; 驱动 cv180x的
    的头像 发表于 07-14 22:14 915次阅读

    使用Genode控制Zybo Z7 GPIO - 第2/2部分

    电子发烧友网站提供《使用Genode控制Zybo Z7 GPIO - 第2/2部分.zip》资料免费下载
    发表于 07-13 11:32 0次下载
    使用Genode<b class='flag-5'>控制</b>Zybo Z7 <b class='flag-5'>GPIO</b> - 第2/2部分

    基于Linux使用spidev驱动OLED

    如果不想编写spi设备驱动,那么linux内核提供了一个通用的spidev设备驱动,提供统一的字符设备操作,那么只需要在应用层读写和控制即可。以SPI OLED为例子,使用spidev
    发表于 06-16 10:36 2710次阅读
    基于<b class='flag-5'>Linux</b>使用spidev<b class='flag-5'>驱动</b>OLED

    使用Genode控制Zybo Z7 GPIO

    电子发烧友网站提供《使用Genode控制Zybo Z7 GPIO.zip》资料免费下载
    发表于 06-13 14:35 0次下载
    使用Genode<b class='flag-5'>控制</b>Zybo Z7 <b class='flag-5'>GPIO</b>

    一文搞懂Linux pinctrl/gpio子系统

    注: 所有文章基于linux-3.13以上,本系列主要介绍 GPIO的一些基本知识,驱动操作GPIO的接口,应用层通过sysfs操作GPIO
    发表于 06-09 09:52 1519次阅读

    Linux驱动中创建sysfs接口的方法

    在一些linux开发板中,经常可以看到通过echo的方式来直接控制硬件或者修改驱动
    发表于 05-31 16:24 572次阅读

    应用指南|基于TQT507开发板介绍如何控制GPIO

    本文档介绍了应用层如何控制GPIO,适用于天嵌开发板TQT507。1.sysfs方式控制GPIO通过sysfs方式进行操控,进入到/sys/class/
    的头像 发表于 05-30 10:39 569次阅读
    应用指南|基于TQT507开发板介绍如何<b class='flag-5'>控制</b><b class='flag-5'>GPIO</b>