NanoPi 2 GPIO的使用(优化修改之后的)

转载自http://blog.csdn.net/huayucong/article/details/51735966 。但原文有几处疏漏,进行了优化修改。
      在嵌入式设备中对 GPIO 的操作,一般的做法是写一个单独驱动程序。其实 linux 下面有一个通用的 GPIO 操作接口,那就是  “/sys/class/gpio”  方式。使用这种方法,你不需要写驱动,便可直接使用 GPIO 引脚,更方便开发,内核更小。
  • GPIO管脚定义
Pin#NamePin#Name
1SYS_3.3V2VDD_5V
3I2C0_SDA4VDD_5V
5I2C0_SCL6DGND
7GPIOD8/PPM8UART3_TXD/GPIOD21
9DGND10UART3_RXD/GPIOD17
11UART4_TX/GPIOB2912GPIOD1/PWM0
13GPIOB3014DGND
15GPIOB3116GPIOC14/PWM2
17SYS_3.3V18GPIOB27
19SPI0_MOSI/GPIOC3120DGND
21SPI0_MISO/GPIOD022UART4_RX/GPIOB28
23SPI0_CLK/GPIOC2924SPI0_CS/GPIOC30
25DGND26GPIOB26
27I2C1_SDA28I2C1_SCL
29GPIOC830DGND
31GPIOC732GPIOC28
33GPIOC13/PWM134DGND
35SPI2_MISO/GPIOC1136SPI2_CS/GPIOC10
37AliveGPIO338SPI2_MOSI/GPIOC12
39DGND40SPI2_CLK/GPIOC9

下面是以友善之臂的 NanoPi2 为例,简单的写一下 GPIO 的使用方法。

        首先,进入根文件系统,查看系统中有没有  “/sys/class/gpio”  这个文件夹。如果没有请在编译内核的时候通过 make menuconfig 加入

Device Drivers  —>  
  
GPIO Support  —>      /sys/class/gpio/… (sysfs interface)
        
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 ,寄存器名称,引脚总数   导出一个引脚的操作步骤;( X 表示数字)
6 :首先计算此引脚编号,引脚编号  =  控制引脚的寄存器基数   +  控制引脚寄存器位数;
7   /sys/class/gpio/export 写入此编号,比如 12 号引脚,在 shell 中可以通过以下命令实现,命令成功后生成 /sys/class/gpio/gpio12 目录,如果没有出现相应的目录,说明此引脚不可导出;

8 echo  12 /sys/class/gpio/export
9 direction 文件,定义输入输出方向,可以通过下面命令定义为输出;

10. 进入产生的gpio12 文件夹,

cd gpio12

echo  out >  direction
11 direction 接受的参数: in, out, high, low high/low 同时设置方向为输出,并将 value 设置为相应的 1/0
12 value 文件是端口的数值,为 1 0
13 echo 1  & > value

 /sys/class/gpio 的使用说明:
测试: 由于我们需要通过sysfs的方式来操作GPIO, 因此,我们还需要找到这组引脚在内核中所对应的编号(每一个GPIO引脚,内核都会赋于它一个编号)查询内核编号的方法如下

1 NanoPi 2 开机后,进入根文件系统;
2 )在超级终端中输入以下命令(因命令比较长,建议直接复制运行):
# cd /sys/class/gpio
# for i in gpiochip* ; do  echo `cat $i/label`: `cat $i/base` ; done
nxp-gpio.0:0
nxp-gpio.4:128
nxp-gpio.5:160
nxp-gpio.1:32
nxp-gpio.2:64
nxp-gpio.3:96

其实这里的gpio.0表示的是GPIOAgpio.1表示GPIOB,其他是也是这样计算。
假如,我们需要使用NanoPi 2GPIOB30引脚,想在应用程序使用,我们可以表示为:
32+30=62也就是说我们使用的是第62GPIO
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值