跳到主要内容

扩展IO使用

提示

本指南将指导您如何使用 RK3506-EVBGPIO 功能。

1. gpio资源介绍

  HD-RK3506-EVB在JP4 扩展排针上提供了除电源脚和和空脚外,其他所有的端口均能被复用成GPIO,但是有部分IO口默认复用为了I2C、UART、CAN、SPI等功能,使用时请注意。

  出厂固件,串口相关IO默认复用成了UART功能,如不需要串口扩展,可自行在设备树中disabled相关节点。

image.png

2. gpio号计算

  以JP4中的29、31、33、35、37脚为例,说明下GPIO的使用方法

细节描述说明
计算公式pin=bank*32+num
输入项bankbank号,计算gpio序号时需要乘32
num分为字母和数字两部分,num值为二者之和,其中字母A、B、C、D,分别代表0、8、16、24
输出项pin得到的GPIO引脚号
插针编号引脚标号引脚功能计算公式GPIO值
29脚GPIO1_C1GPIO1_C11*32+16+149
31脚GPIO1_C0GPIO1_C01*32+16+048
33脚GPIO1_B7GPIO1_B71*32+8+747
35脚GPIO1_B6GPIO1_B61*32+8+646
37脚GPIO1_B5GPIO1_B51*32+8+545

【注意】各插针的功能记录在【引脚列表】HD-RK3506G-CORE V1.0.xlsx内;

  当用户需要直接控制GPIO引脚电平时,可以通过来操作GPIO编号实现,以GPIO1_C1为例

  我们可以将其用杜邦线引出并用万用表测量其输出电平,现我们通过sysfs来对其输出不同电平以进行GPIO的测试,GPIO1_C1的GPIO编号值:

1*32+16+1 = 49

3. gpio操作

  计算出GPIO编号后,通过以下命令导出到用户空间:

root@hd-rk3506:/# echo 49 > /sys/class/gpio/export

  生成的gpio49目录内容如下所示。

root@hd-rk3506:/# ls /sys/class/gpio/gpio49/
active_low device direction edge power subsystem uevent value

  direction为GPIO的方向控制接口,可输入in和out来指定该gpio用作输入还是输出功能。value为GPIO的引脚电平接口,作为输入口时此接口表示外接输入的电平,作为输出口时此接口表示输出的电平。

  例如通过以下命令来设置引脚49输出电平。

root@hd-rk3506:/# echo out > /sys/class/gpio/gpio49/direction   # 设置方向
root@hd-rk3506:/# echo 1 > /sys/class/gpio/gpio49/value # 1为高电平
root@hd-rk3506:/# echo 0 > /sys/class/gpio/gpio49/value # 0为低电平

  当向“/sys/class/gpio/gpio49/value”写入“1”时可以通过万用表测试其输出是否为高来验证,写入“0”时其输出应为低。

4. gpio功能查询

  GPIO的编号以及状态也可通过下述命令查询:

root@hd-rk3506:/# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-31, parent: platform/fdd60000.gpio, gpio0:
gpio-0 ( |ads7846_pendown ) in hi
gpio-5 ( |vcc5v0_otg ) out lo
...
gpio-27 ( |sysfs ) out lo

注意:如果某个GPIO已经在被内核占用,则导出时可能会出现不能被导出并且系统提示"Device or resource busy"的情况(例如被内核用作SPI功能)。

  检查板子上的功能和引脚定义

root@hd-rk3506:/# cat /sys/kernel/debug/pinctrl/pinctrl-maps  | egrep "function|gpio"