NXP MCU 技术论坛
直播中

moonyuan

13年用户 157经验值
擅长:可编程逻辑 嵌入式技术 接口/总线/驱动 控制/MCU
私信 关注
[资料]

【AWorks试用体验】使用sysfs文件系统 控制IED(1) Shell 点亮LED

        在嵌入式设备中控制GPIO 一般做法是通过写一个单独的驱动程序。而大多数资料显示都是使用这一种方法。
       但其实Linux下有一个通用的 GPIO 控制接口, 就是 sysfs文件系统


什么是sysfs文件系统
       sysfs 是 Linux 2.6 引入的一个新型文件系统,是一个基于内存的文件系统,它的作用是
将内核信息以文件的方式提供给用户程序使用。 该文件系统的目录层次结构严格按照内核的
数据结构组织。
        sysfs 提供一种机制,使得可以显式的描述内核对象、对象属性及对象间关系。sysfs 有
两组接口,一组针对内核,用于将设备映射到文件系统中,另一组针对用户程序,用于读取
或操作这些设备。

        大意就是 sysfs 将设备映射到文件系统中来, 并提供一定的接口用于操作这些外设。

sysfs提供了什么样的接口
      因为这次重点是使用GPIO,主要看看  /sys/class/gpio 目录下的内容

1.png

有两个接口
* /sys/class/gpio/export         文件用于通知系统需要导出控制的GPIO引脚编号
* /sys/class/gpio/unexport     用于通知系统取消导出


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

GPIO引脚编号是什么
      引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数
      例如 GPIO3.26: 3 * 32 + 26 = 122

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

不可导出有两个原因。
1)没有这个外设
2)外设在其他复用功能中占用

使用sysfs文件系统控制LED


查看官方文档可知,使用AP-Demo 板子上的LED必须接上4个跳线帽, 如下图显示。
LED1 GPIO 3.26
LED2 GPIO 3.22
LED3 GPIO 3.20
LED4 GPIO 2.7


IMG_20150816_183414_640.jpg

  1. echo 122 > /sys/class/gpio/export


2.png

可以看到 出现了 gpio122 目录

目录里面的文件用于修改GPIO的功能。

3.png

direction:修改端口输出输入方向
value:端口的值

我们需要点亮LED灯,必须设置GPIO为输出。

  1. echo out > /sys/class/gpio/gpio122/direction


GPIO 输出低电平 此时LED1点亮。
  1. echo 0 > /sys/class/gpio/gpio122/value


IMG_20150816_191302_878.jpg

  1. echo 1 > /sys/class/gpio/gpio122/value


此时关闭LED1

4.png

到此已经可以自由控制灯的亮灭了。 下一篇 用 C 语言写一个流水灯的程序。

回帖(2)

Elecfans管家

2015-8-16 22:23:06
试用报告的发帖积分可以改为0分哈!系统默认是1个积分就变成悬赏提问帖了。
举报

moonyuan

2015-8-16 22:27:12
引用: Elecfans管家 发表于 2015-8-16 22:23
试用报告的发帖积分可以改为0分哈!系统默认是1个积分就变成悬赏提问帖了。

我确定有改的。 但还是会变悬赏帖。
之前都不会, 可能是换了 win10.   IE版本不同的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分