使用 Shell 调试 GPIO 设备

摘要:
在gpioN中,N是要操作的GPIO编号,等于GPIO组编号*8+组内偏移编号,例如GPIO1_6的编号为1*8+6=14。导出导出、未导出注销、方向设置输入或输出方向、值设置高1或低0级别。在Hi3516EV200_PINOUT_CN的2.函数信号白表中查找GPIO1。xlsx_6获取相关引脚控制寄存器为iocfg_ Reg49,检查3。引脚控制寄存器表显示寄存器地址为0x120C0018,默认值为0x1D00。当位[3:0]为0x02时,选择GPIO1_6功能。
概述

板:hi3516ev200
灯:接到GPIO1_6

寄存器操作

使用命令:Usage: devmem ADDRESS [WIDTH [VALUE]],其中WIDTH可选值为8, 16, 32, 64,默认值是32

在地址0x120C0018读取32bit值

# devmem 0x120C0018 

在地址0x120C0018写入32bit值0x1d02

# devmem 0x120C0018 32 0x1d02

原理:devmem工具通过使用/dev/mem驱动中mmap方法的,映射设备物理地址到用户空间,实现寄存器读写操作。

初始化

在 gpioN 中 N 为要操作的 GPIO 编号,该编号等于 GPIO 组号 * 8 + 组内偏移号,例如 GPIO1_6 的编号为 1 * 8 + 6 = 14。
export 导出,unexport 注销,direction 设置方向输入in或输出out,value 设置为高1或低0电平。

在《Hi3516EV200_PINOUT_CN.xlsx》的2.功能信号白表中查找GPIO1_6得到相关管脚控制寄存器是iocfg_reg49,查看3.管脚控制寄存器表知该寄存器地址为0x120C0018,默认值为0x1D00,当bit[3:0]为0x02时选择为GPIO1_6功能。

LED="/sys/class/gpio/gpio14"

ledInit(){
    if [ ! -d "$LED" ]
    then
        devmem 0x120C0018 32 0x1d02
        echo "14">/sys/class/gpio/export
        echo "out">/sys/class/gpio/gpio14/direction
        echo "0">/sys/class/gpio/gpio14/value
    fi
}
闪烁
onRun(){
        while [ true ]
        do
                echo "0">/sys/class/gpio/gpio14/value
                sleep 1
                echo "1">/sys/class/gpio/gpio14/value
                sleep 1
        done
}
开关
onSwitch(){
        if [ $1 == "on" ]
        then
                echo "0">/sys/class/gpio/gpio14/value
        elif [ $1 == "off" ]
        then
                echo "1">/sys/class/gpio/gpio14/value
        fi
}
逻辑
ledInit

if [ $# == 0 ]
then
        onRun
else
        onSwitch $1
fi

免责声明:文章转载自《使用 Shell 调试 GPIO 设备》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇docker笔记线段树详解(原理、实现与应用)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

shell脚本调试技术_转

转自:http://itlab.idcquan.com/linux/SHELL/727128.html 参考:https://linux.cn/article-8045-1.html 本文全面系统地介绍了shell脚本调试技术,包括使用echo, tee, trap等命令输出关键信息,跟踪变量的值,在脚本中植入调试钩子,使用“-n”选项进行shell脚本的...

shell脚本之sed详解(1)

shell脚本之sed详解 (sed命令 , sed -e , sed s/ new / old / ... ) Sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。vi中的正则表达式命令在sed中大多可以通用。 sed常用选项 -e script 指定sed编辑命令 -f scriptfile 指定的文件中是sed编辑命令 -n 寂...

【zabbix监控+python爬虫+shell脚本】 理财对接天天基金网实现相关基金波动邮件/钉钉提醒

前序 刚开始接触理财, 第一次朋友介绍的是[安信证券]这款app, 看了几天, 以每笔500的价格入手了两个基金玩玩接触一下行情, 后来发现, 每次都不知道它什么时候更新这个变动净值参数,每次都要自己去搜索, 或者又要登录一遍去看盈亏, 够懒吧, 嘿嘿, 后来突发奇想, 跟朋友了解一下是不是有什么公式能计算得到相关的净值参数的, 于是翻了一遍, 发现对[天...

运维与自动化系列④自动化部署基础与git

运维与自动化系列④自动化部署基础与git 自动化部署基础与git 一:上一篇的代码是保存在本地,但是在生产环境当中是由版本控制进行代码管理,以便于发布代码和回滚,一般是使用gitlib比较多,另外还有用svn的公司,趋势是git为主,因此本文以git为使用对象 1.1:在git服务器新建一个web组和项目web-demo: 准备web页面并提交至git服务...

Linux根文件系统分析之init和busybox

Hi,大家好!我是CrazyCatJack。今天给大家讲解Linux根文件系统的init进程和busybox的配置及编译。 先简单介绍一下,作为一个嵌入式系统,要想在硬件上正常使用的话。它的软件组成大概有这三部分:1)bootloader 2)嵌入式系统kernel 3)根文件系统 。这其实非常好理解,类比于PC上的操作系统,首先我们需要类似BIOS的东东...

shell编程笔记六:实现ll命令

发现debian不支持ll,在别的linux发行版几乎时刻在用这个命令,没有真不习惯,果断自己写个来实现它,顺便温习一下shell 脚本非常简单,就那个几行 #!/bin/bash a=`pwd` if [ $# -eq 0 ]; then ls -l $a else ls -l ${1} fi pwd 获得当前目录 $# 计算命令 行参数个...