Linux提供了GPIO子系统驱动框架,使用该驱动框架即可灵活地控制板子上的GPIO。

GPIO命名

Rockchip Pin的ID按照 控制器(bank)+端口(port)+索引序号(pin) 组成。

  • 控制器和GPIO控制器数量⼀致
  • 端口固定 A、B、C和D,每个端口仅有8个索引号,(a=0,b=1,c=2,d=3)
  • 索引序号固定 0、1、2、3、4、5、6、7

rk356x具有5个GPIO控制器,每个控制器可以控制32个IO,作为GPIO功能时, 端口⾏为由GPIO控制器寄存器配 置。
GPIO1_A4表达的意思为第1组控制器,端口号为A,索引号为4。该引脚号的计算公式为32 x 1 + 0 x 8 + 4 = 36

使用GPIO sysfs接口控制IO

在Linux中,最常见的读写GPIO方式就是用GPIO sysfs interface, 是通过操作 /sys/class/gpio 目录下的 exportunexportgpio{N}/direction, gpio{N} /value (用实际引脚号替代{N})等文件实现的,经常出现shell脚本里面。 在kernel 4.8开始,加入了libgpiod的支持;而原有基于sysfs的访问方式,将被逐渐放弃。

  1. #以下所有操作均需要打开管理者权限使用
  2. #使能引脚
  3. echo 36 > /sys/class/gpio/export
  4. #设置引脚为输入模式
  5. echo in > /sys/class/gpio/gpio36/direction
  6. #读取引脚的值
  7. cat /sys/class/gpio/gpio36/value
  8. #设置引脚为输出模式
  9. echo out > /sys/class/gpio/gpio36/direction
  10. #设置引脚为低电平
  11. echo 0 > /sys/class/gpio/gpio36/value
  12. #设置引脚为高电平
  13. echo 1 > /sys/class/gpio/gpio36/value
  14. #复位引脚
  15. echo 36 > /sys/class/gpio/unexport

使用libgpiod控制IO

libgpiod是一种字符设备接口,GPIO访问控制是通过操作字符设备文件(比如 /dev/gpiodchip0 gpio控制器)实现的, 并通过libgpiod提供一些命令工具、c库以及python封装。
想要使用libgpiod,需要在板卡上安装libgpiod库。

  1. #安装libgpiod库及头文件
  2. sudo apt install libgpiod-dev
  3. #安装gpiod 命令行工具
  4. sudo apt install gpiod

常用的命令行如下,可使用 -h 查看命令相对应的使用说明(以GPIO1_A4为例)

命令 作用 使用举例 说明
gpiodetect 列出所有的GPIO控制器 gpiodetect(无参数) 列出所有的GPIO控制器
gpioinfo 列出gpio控制器的引脚情况 gpioinfo 1 列出第一组控制器引脚组情况
gpioset 设置gpio gpioset 1 4=0 设置第一组控制器编号4引脚为低电平
gpioget 获取gpio引脚状态 gpioget 1 4 获取第一组控制器编号4的引脚状态
gpiomon 监控gpio的状态 gpiomon 1 4 监控第一组控制器编号4的引脚状态