• 使用 Shell 调试 GPIO 设备


    概述

    板: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
    
  • 相关阅读:
    一个很好的命令行分享网站
    Docker inside Docker 基于 Alpine Linux
    CentOS 下运行Docker 内执行 docker build 命令的简单方法
    CentOS 安装 Harbor的简单过程(仅使用http 未使用https)
    [财务会计] 表外科目
    jira 插件介绍地址
    Linux 下安装nginx的总结 (之前写的有问题))
    Jira 的 数据库备份恢复 简单过程
    Jira 7.2.4简单安装过程
    Tomcat绑定具体IP
  • 原文地址:https://www.cnblogs.com/llil/p/14642680.html
Copyright © 2020-2023  润新知