使用 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

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号