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”,即低电平有效。
ec