gpio测试

浏览OpenWrt时看到的,感觉不错,整理装载于此,https://openwrt.org/docs/guide-developer/add.new.device

# 一、说明

基于gpiolib子系统,sys文件系统,还需要选中板级的gpio驱动。

Device Drivers  --->

    -*- GPIO Support  --->

        --- GPIO Support 

        [*]   /sys/class/gpio/... (sysfs interface)

 

关于gpiolib子系统相关的内容,建议阅读内核相关介绍文档

Documentation/gpio.txt

Documentation/pinctrl.txt

Documentation/zh_CN/gpio.txt

 

推荐一个源码浏览网站:https://elixir.bootlin.com/linux/v3.10.108/source/Documentation

 

# 二、单个GPIO测试

**注意**:要确保当前引脚的功能为gpio,而不是其它的功能。

cd /sys/class/gpio

# 导出gpio3
echo 3 > export

# 设置gpio3为输出
echo "out" > gpio3/direction

# gpio3输出低电平
echo 0 > gpio3/value

# gpio3输出高电平
echo 1 > gpio3/value

# 设置gpio3为输入
echo "in" > gpio3/direction

# 读取当前的引脚值

cat gpio3/value

# 释放gpio3引脚
echo 3 > unexport

 

# 三、查看系统当前使用的gpio资源

选中debugfs,

Kernel hacking  --->

    [*] Debug Filesystem 

 

挂载debugfs,查看gpio使用状况,

mount -t debugfs none /sys/kernel/debug

cat /sys/kernel/debug/gpio

 

# 三、GPIO LEDs(gpio输出批量测试)

为了快速的一个一个的检测所有的gpio led。执行下面的脚本程序,注意看LED的状态和终端的输出。如果USB LED亮了,而且最后的一句终端信息是`[GPIO12] Trying value 0`,那么USB LED用的是GPIO12,低电平有效。

GPIOCHIP=0:测试gpio0~gpio31

GPIOCHIP=32:测试gpio32~gpio63

以此类推

#!/bin/sh
GPIOCHIP=0
BASE=$(cat /sys/class/gpio/gpiochip${GPIOCHIP}/base)
NGPIO=$(cat /sys/class/gpio/gpiochip${GPIOCHIP}/ngpio)
max=$(($BASE+$NGPIO))
gpio=$BASE
while [ $gpio -lt $max ] ; do
 echo $gpio > /sys/class/gpio/export
 [ -d /sys/class/gpio/gpio${gpio} ] && {
  echo out > /sys/class/gpio/gpio$gpio/direction

  echo "[GPIO$gpio] Trying value 0"
  echo 0 > /sys/class/gpio/gpio$gpio/value
  sleep 3s

  echo "[GPIO$gpio] Trying value 1"
  echo 1 > /sys/class/gpio/gpio$gpio/value
  sleep 3s

  echo $gpio > /sys/class/gpio/unexport
 }
 gpio=$((gpio+1))
done

 

# 四、GPIO buttons(gpio输入批量测试)

按键按下时,连接的GPIO的获取的值会变化,所以,找出按键与GPIO的对应关系步骤为:

1. 打印所有GPIO的值

2. 按下按键并保持

3. 打印所有GPIO的值

4. 找出值有变化的GPIO

 

打印所有GPIO的值可用如下脚本:

#!/bin/sh
GPIOCHIP=0
BASE=$(cat /sys/class/gpio/gpiochip${GPIOCHIP}/base)
NGPIO=$(cat /sys/class/gpio/gpiochip${GPIOCHIP}/ngpio)
max=$(($BASE+$NGPIO))
gpio=$BASE
while [ $gpio -lt $max ] ; do
 echo $gpio > /sys/class/gpio/export
 [ -d /sys/class/gpio/gpio${gpio} ] && {
  echo in > /sys/class/gpio/gpio${gpio}/direction
  echo "[GPIO${gpio}] value $(cat /sys/class/gpio/gpio${gpio}/value)"
  echo ${gpio} > /sys/class/gpio/unexport
 }
 gpio=$((gpio+1))
done

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值