NanoPi 2 GPIO的使用
来源:互联网 发布:手机淘宝的二手在哪里 编辑:程序博客网 时间:2024/05/16 23:35
在嵌入式设备中对GPIO的操作,一般的做法是写一个单独驱动程序。其实linux下面有一个通用的GPIO操作接口,那就是 “/sys/class/gpio” 方式。使用这种方法,你不需要写驱动,便可直接使用GPIO引脚,更方便开发,内核更小。
下面是以友善之臂的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: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表示的是GPIOA,gpio.1表示GPIOB,其他是也是这样计算。
假如,我们需要使用NanoPi 2的GPIOB30引脚,想在应用程序使用,我们可以表示为:
64+30=94 也就是说我们使用的是第94根GPIO。
0 0
- NanoPi 2 GPIO的使用
- NanoPi 2 GPIO的使用(优化修改之后的)
- NanoPi 2 Fire的GPIO引脚图
- NanoPi M2 gpio驱动编写
- NanoPi 2 Fire 连接使用USB WiFi
- 40 pins GPIO comparison table for NanoPi
- NanoPi M3 使用心得
- Nanopi 使用 i2cdump
- NanoPi的网络配置
- AU1200 GPIO的使用
- Sigmatel37xx GPIO的使用
- 6410的GPIO使用
- dm365 GPIO的使用
- 6410的GPIO使用
- GPIO 的使用
- DM642 GPIO的使用
- 6410的GPIO使用
- STM32的GPIO使用
- Docker化运维方式
- 判断radio是否被选中
- spi驱动框架全面分析,从master驱动到设备驱动
- Linux软件安装管理(二)-RPM命令管理
- Retrofit2 简明教程(一)
- NanoPi 2 GPIO的使用
- Qt 显示中文代码
- 单利
- Java 学习笔记(1)
- 【SSH系列】Hibernate映射 -- 继承映射
- 加密
- CToolBarCtrl,在工具栏中增加一个与按钮长度不一样宽的静态文本
- 使用zkweb维护zookeeper数据
- [DIV/CSS] Vue.js 开发实践:实现精巧的无限加载与分页功能