首页 > 其他分享 >RK3399驱动开发 | 01 -RK3399 gpio的使用(用户态和设备树两种方式)

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

时间:2023-08-19 15:55:51浏览次数:41  
标签:01 引脚 RK3399 FUNC GPIO gpio RK define

一、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

计算公式为:

其中pin指最终得出的GPIO引脚编号,比如GPIO0_B5:bank为0、group为字母B,x为5。

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

这样最终计算出:

 

 

三、用户态使用GPIO
1. 申请GPIO
echo 13 > /sys/class/gpio/export
1.
2. 设置GPIO引脚方向
先查看一下默认引脚方向:

cat /sys/class/gpio/gpio13/direction
1.


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

echo out > /sys/ChAss/g`io/g`io!3/direction
1.
3. 设置引脚输出电平
输出高电平,点亮LED:

echo 1 > /sys/class/gpio/gpio13/value
1.
输出低电平,熄灭LED:

echo 0 > /sys/class/gpio/gpio13/value
1.
四、设备树中使用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作为系统心跳指示灯:

 

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

 

标签:01,引脚,RK3399,FUNC,GPIO,gpio,RK,define
From: https://www.cnblogs.com/wanglongjiang/p/17642558.html

相关文章

  • iwebsec-文件上传 01 前端JS过滤绕过
    01、题目分析事实上,文件上传过滤是很正常的,需要自行判断是前端过滤还是后端过滤,一般上传木马的时候可以进行抓包,如果直接点击上传直接弹出禁止上传的界面,而没有抓到数据包,那就说明是前端js过滤,但是这个题目已经说明了是前端js过滤,就不用再测试了02、文件上传先用哥斯拉创建一个......
  • office2016下载,Microsoft Office2016完整版 系列软件
    Office2021新增了五大功能:Excel中的动态数组(一个公式返回多个单元格),Excel中的XLOOKUP,比VLOOKUP更强大,同时更易于编写,PowerPoint(和其他应用程序)中内置的库存图片,Excel、PowerPoint和Word支持共同创作。软件地址:看置顶贴功能介绍1、云服务加强任何位置、任何设备访......
  • [NOI2014] 起床困难综合症
    [NOI2014]起床困难综合症洛谷题目描述\(21\)世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳。作为一名青春阳光好少年,atm一直坚持与起床困难综合症作斗争。通过研究相关文献,他找到了该病的发病原因:在深邃的太平洋海底中,出现了一条名为drd的......
  • [代码随想录]Day21-回溯算法part01
    题目:77.组合思路:回溯就是dfs的一个特殊情况也就是递归的一种情况,值得注意的一点:要记得深拷贝,不然最后全是空代码:varres[][]intvarpath[]intfunccombine(nint,kint)[][]int{res=[][]int{}path=make([]int,0,k)Combine(n,1,k,0)ret......
  • 12 pinctrl 和 gpio 子系统实验
    一、pinctrl子系统1.什么是pinctrl子系统?  首先回顾一下如何初始化LED所使用的GPIO:①、修改设备树,添加相应的节点,节点里面重点是设置reg属性,reg属性包括了GPIO相关寄存器。②、获取reg属性中GPIOI_MODER、GPIOI_OTYPER、GPIOI_OSPEEDR、GPIOI_PUPDR和GPI......
  • 「BJWC2012」冻结题解
    「BJWC2012」冻结题解一.题目"我要成为魔法少女!""那么,以灵魂为代价,你希望得到什么?""我要将有关魔法和奇迹的一切,封印于卡片之中"在这个愿望被实现以后的世界里,人们享受着魔法卡片(SpellCard,又名符卡)带来的便捷。现在,不需要立下契约也可以使用魔法了!你还不来试一试?比如,我们在......
  • iwebsec-sql注入 01 数字型注入
    01、题目分析数字型注入的sql语句select * from news where id=$id;最最最常规的,直接注入02、手工注入:先判断有多少列http://www.bdrwmy.cn:8001/sqli/01.php?id=1orderby3--id=-1就是不显示内容http://www.bdrwmy.cn:8001/sqli/01.php?id=-1unionselect1,2,......
  • P1012 [NOIP1998 提高组] 拼数
     题解:这道题最大的坑:32和321,32321>32132 1#include<bits/stdc++.h>2usingnamespacestd;3stringa[25];4boolcmp(conststring&a,conststring&b)5{6return(a+b>b+a);//这里太妙了7}8intmain()9{10int......
  • 吴恩达机器学习2011版本学习笔记
    这是看完视频后,按自己的理解做了笔记。监督学习学的比较认真,33之后的无监督学习心态已经浮躁了,以后要再学一遍2022最新版视频课。1,有正确答案是有监督学习,反之是无监督学习2,模型就是把训练数据拟合为一个公式(严格来说是个函数,关系)。入门的拟合的方法是最小二乘法,先假设一个公式,......
  • day10 - 栈与队列part01
    232. 用栈实现队列详解classMyQueue{public:stack<int>st_in;stack<int>st_out;MyQueue(){}voidpush(intx){st_in.push(x);}intpop(){if(st_out.empty()){while(!st_in.empt......