我是靠谱客的博主 勤奋茉莉,最近开发中收集的这篇文章主要介绍OpenBmc开发14:gpio管理1 GPIO简介2 GPIO驱动3 GPIO控制4 GPIO控制脚本 ,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1 GPIO简介

GPIO(General-purpose input/output),即通用型之输入输出,可以让使用者自由控制。GPIO的PIN脚依可以作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO)。GPIO可以用于输入、输出或其他特殊功能,那么就需要对应的寄存器来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电位的高低;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。一般在linux下已经有gpiolib提供通用接口来控制,刻个厂家需要提供底层驱动,即寄存器控制,用户既可以通过dts添加驱动进行,在系统下对gpio进行操作。也可以在系统下通过工具(如devmem)直接操作对应的寄存器实现对GPIO的控制。

2 GPIO驱动

aspeed默认配置已经有gpio的驱动(CONFIG_GPIOLIB=y,CONFIG_GPIO_ASPEED=y),如果其他CPU没有需要自己添加。

3 GPIO控制

进入BMC系统后可以看到/sys/class/gpio/下文件,gpiochip804表示的是gpio的base节点,base值是804,创建gpio节点使用“echo <value> > /sys/class/gpio/export”,删除gpio节点使用“echo <value> > /sys/class/gpio/uneexport”,新创建gpio节点的value值需要依据804进行计算得到。

3.1 获取gpiobase

cat /sys/devices/platform/ahb/ahb:apb/1e780000.gpio/gpio/*/base

3.2 创建gpio节点

创建一个GPIOA4的设备节点

echo 810  >  /sys/class/gpio/export 

创建节点后,默认GPIOA6为输出,高电平有效, 并且此时的GPIO输出的高电平。

3.3 设置有效状态

 一般电路做了上拉处理,因此逻辑“1”是低电平,而逻辑“0”是高电平,因此需要设置active_low值为“1”,即低电平有效。

echo 1 > /sys/class/gpio/gpio810/active_low

设置actove_low值为1(或大于1)后,可以看到value值已经变为0,即高电平对应值为0 。 

3.3 输如设置

设置GPIOA4位输入

echo in > /sys/class/gpio/gpio808/direction

设置edge值(中断触发模式)

echo rising > /sys/class/gpio/gpio808/egde

echo falling > /sys/class/gpio/gpio808/egde

echo both > /sys/class/gpio/gpio808/egde

 rising——上升沿

falling——下降沿

both——轮训

 

3.4 输出设置

设置GPIOA6位输出

echo out > /sys/class/gpio/gpio810/direction

 设置输出并设置输出电平

echo low > /sys/class/gpio/gpio810/direction

echo high > /sys/class/gpio/gpio810/direction

low ——输出为低电平

high——输出为高电平

设置value值:

echo out > /sys/class/gpio/gpio810/value

3.5 GPIO offset表 

GPIO类别

Offset1

GPIO类别

Offset1

GPIO类别

Offset1

GPIOA

0

GPIOK

80

GPIOU

160

GPIOB

8

GPIOL

88

GPIOV

168

GPIOC

16

GPIOM

96

GPIOW

176

GPIOD

24

GPION

104

GPIOX

184

GPIOE

32

GPIOO

112

GPIOY

192

GPIOF

40

GPIOP

120

GPIOZ

200

GPIOG

48

GPIOQ

128

 

 

GPIOH

56

GPIOR

136

 

 

GPIOI

64

GPIOS

144

 

 

GPIOJ

72

GPIOT

152

 

 

 

4 GPIO控制脚本

系统下创建init_gpio.sh脚本内容如下:

#!/bin/bash
##create by master  20210404

GPIO_BASE=$(cat /sys/devices/platform/ahb/ahb:apb/1e780000.gpio/gpio/*/base)

function init_gpio() {
	if [ $# -ne 2 ]; then
    	echo "set_gpio_active_low: need both GPIO# and initial level";
    	return;
	fi
	if [ ! -d "/sys/class/gpio/gpio${1}" ];then
  		echo $1 > /sys/class/gpio/export
	fi
	echo 1 > /sys/class/gpio/gpio${1}/active_low
  	echo ${2} > /sys/class/gpio/gpio${1}/direction
}

# GPIOA4, active high
init_gpio $((${GPIO_BASE} + 4)) low

# GPIOA6, active low
init_gpio $((${GPIO_BASE} + 4)) high

# GPIOG4, in
init_gpio $((${GPIO_BASE} + 48 + 4)) in

 

 

 

最后

以上就是勤奋茉莉为你收集整理的OpenBmc开发14:gpio管理1 GPIO简介2 GPIO驱动3 GPIO控制4 GPIO控制脚本 的全部内容,希望文章能够帮你解决OpenBmc开发14:gpio管理1 GPIO简介2 GPIO驱动3 GPIO控制4 GPIO控制脚本 所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部