RK3399驱动开发 | 01 -RK3399 gpio的使用(用户态和设备树两种方式)

Posted Mculover666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RK3399驱动开发 | 01 -RK3399 gpio的使用(用户态和设备树两种方式)相关的知识,希望对你有一定的参考价值。

一、RK3399的GPIO


RK3399有5组GPIO,GPIO0-GPIO4,每一组GPIO成为一个GPIO bank,每组GPIO包含32个引脚,需要注意,不是所有 bank 都有全部编号,例如 GPIO4 就只有 C0-C7,D0-D2,所以一共有122个可用GPIO

二、计算GPIO编号

Friendly的开发板上板载一个状态LED,如下:

该LED接在GPIO0_B5上,想要使用这个GPIO,需要手动计算GPIO引脚编号。

GPIO

计算公式为:

p i n = b a n k ∗ 32 + g r o u p ∗ 8 + x pin=bank * 32 + group * 8 + x pin=bank32+group8+x
其中pin指最终得出的GPIO引脚编号,比如GPIO0_B5:bank为0、group为字母B,x为5。

字母分别代表的值如下:A=0、B=1、C=2、D=3。

这样最终计算出:
p i n = 0 ∗ 32 + 1 ∗ 8 + 5 = 13 pin=0*32 + 1*8 +5=13 pin=032+18+5=13

三、用户态使用GPIO

1. 申请GPIO

echo 13 > /sys/class/gpio/export

2. 设置GPIO引脚方向

先查看一下默认引脚方向:

cat /sys/class/gpio/gpio13/direction


默认是输入,设置为输出:

echo out > /sys/ChAss/g`io/g`io!3/direction

3. 设置引脚输出电平

输出高电平,点亮LED:

echo 1 > /sys/class/gpio/gpio13/value

输出低电平,熄灭LED:

echo 0 > /sys/class/gpio/gpio13/value

四、设备树中使用GPIO

1. 设置引脚功能复用与电气属性

查看Rockchip关于pinctrl子系统的绑定文档:Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.txt 。

其中关于引脚功能复用配置需要的属性有为rockchip,pins,属性值是三个整数组成的数组,格式如下:

rockchip,pins = <PIN_BANK PIN_BANK_IDX MUX &phandle>
  • PIN_BANK:引脚所在bank号
  • PIN_BANK_IDX:所在bank内的引脚号
  • MUX:功能复用设置,0表示普通gpio,1-N表示特殊的功能复用
  • phandle:引脚配置,在pinctrl-bindings.txt文件中描述

下面来看一个实例,在设备树中找到 pinctrl 子节点,其中有关于led节点的描述:

PIN_BANK是0,PIN_BANK_IDX是13,表示GPIO0这个bank内的13个引脚,也就是PB5,复用设置为RK_FUNC_GPIO。

除了直接使用数字之外,也可以用宏定义,在<dt-bindings/pinctrl/rockchip.h>头文件中定义。

比如 PIN_BANK 号的可用值如下:

#define RK_GPIO0	0
#define RK_GPIO1	1
#define RK_GPIO2	2
#define RK_GPIO3	3
#define RK_GPIO4	4
#define RK_GPIO6	6

PIN_BANK_IDX的可用值如下:

#define RK_PA0		0
#define RK_PA1		1
#define RK_PA2		2
#define RK_PA3		3
#define RK_PA4		4
#define RK_PA5		5
#define RK_PA6		6
#define RK_PA7		7

//...后续省略

MUX的可用值如下:

#define RK_FUNC_GPIO	0
#define RK_FUNC_1	1
#define RK_FUNC_2	2
#define RK_FUNC_3	3
#define RK_FUNC_4	4
#define RK_FUNC_5	5
#define RK_FUNC_6	6
#define RK_FUNC_7	7

2. 使用gpio

添加LED节点,使用Linux内核自带的LED驱动,将该LED作为系统心跳指示灯:

3. 编译设备树

重新编译设备树,使用新的设备树启动,可用看到LED闪烁。

以上是关于RK3399驱动开发 | 01 -RK3399 gpio的使用(用户态和设备树两种方式)的主要内容,如果未能解决你的问题,请参考以下文章

iTOP-3399开发板搭建Android编译坏境

飞凌嵌入式 OK3399-C+开发板试用体验+开发板收货开箱

飞凌嵌入式 OK3399-C+开发板试用体验+开发板收货开箱

飞凌嵌入式 OK3399-C+开发板试用体验+QT编写家庭环境监测

飞凌嵌入式 OK3399-C 开发板试用体验(.NET CORE的跨平台使用)

飞凌嵌入式 OK3399-C 开发板试用体验(.NET CORE的跨平台使用)