本帖最后由 qq7643066 于 2020-8-3 15:58 编辑

RK3326 RK3399 GPIO寄存器操作指南

参考资料基本环境

RK3326 小板

8pin引出接口中的GPIO0_B3(实际为GPIO1_C2)

RK3326 EVB开发板

RK3399 EVB开发板

Linux与Android系统都适用FAE给的操作步骤IOMUX复用为GPIO

GPIO设置为输出

设置GPIO高低

补充,事实上还漏了一个重要一部,要先设置时钟,否则前面的设置都不生效RK3326寄存器手册查询

参考寄存器手册Address Maping部分

GRF基地址为0xFF140000

GPIO1基地址为0xFF250000

DDR(方向寄存器)偏移地址0x04, 所以寄存器地址为0xFF250004

DR(设置高低电平)偏移地址为0x00, 所以寄存器地址为0xFF250000

GRF_GPIO1C_IOMUX_L 偏移地址为0x10, 所以IOMUX地址为0xFF140010

GPIO1_C2对应的位为bit19RK3326 GPIO1_C2 设置实验

读取GPIO1_C2的值(DR)

io -4 -l 4 0xFF250000

输出

ff250000: 00000000

bit19 为0, 测得电压为0.26V

写入bit19 为 1

io -4 -w 0xff250000 0x00040000

回读正常,测得电压为3V

方向寄存器

io -4 -l 4 0xFF2500004

输出

ff250004: 00040000

IOMUX寄存器

io -4 -l 4 0xFF140010

输出

ff140010: 00000011

根据寄存器手册P104可知, bit11:8为0, gpio1_c2为gpio功能RK3326 WAKE_UP设置实验(对应GPIO1_C3, 对应bit20)

有前面可知,IOMUX已经设置为GPIO

设置方向寄存器(DR)为输出

io -4 -w 0xff250004 0x000C0000

设置为高电平

io -4 -w 0xff250000 0x000C0000

回读

io -4 -l 4 0xFF250000

返回:

ff250000: 000c0000

万用表测得为3V, 同理,设置为低电平,万用表测得为0.027V,实验成功!RK3326 MAV022 GPIO驱动分析

内核文件节点

/sys/class/leds/call_answer_led/brightness

echo 255 > /sys/class/leds/call_answer_led/brightness (高电平)

echo 0 > /sys/class/leds/call_answer_led/brightness(低电平)

原先的驱动设计是具有pwm功能的,这里我借用了这个接口,没有pwm功能,只有高低电平

DTS中的位置

rk3326-mav022-v10.dts

关键字

搜索RK_PC2或者gpio-leds

驱动不用修改,只需要修改DTS中两处即可,移植到开发板GPIO3_C2也可行RK3326 EVB GPIO寄存器控制

选定开发板D12-GPIO3-C0作为控制脚,对应的bit = (C-A)*8 + 0 = 16

对应位设为1, 0x00010000, 设为0, 0x00000000

设置DDR方向寄存器

io -4 -w 0xFF270004 0x00050000

设置输出为低电平

io -4 -w 0xFF270000 0x00000000

LED灯亮

设置输出为高电平

io -4 -w 0xFF270000 0x00010000

LED灯灭

这一步一开始实验一直控制无效,后来参考文档《Rockchip GPIO常见问题.pdf》,发现是CLK没有设置造成的,前面的实验之所以成功,应该是在DTS里配置了相应的管脚,CLK在驱动里已经打开,而DTS没有配置的管脚,CLK默认是关闭的

查询clk

cat /sys/kernel/debug/clk/clk_summary |grep gpio

GPIO3果然为0

使能GPIO3 ClK

echo 1 > /sys/kernel/debug/clk/pclk_gpio3/clk_enable_countRK3399 EVB GPIO2_B2, GPIO2_B3测试

首先根据RK3326经验查询CLK

cat /sys/kernel/debug/clk/clk_summary |grep gpio

gpio2为0, 写入1

echo 1 > /sys/kernel/debug/clk/pclk_gpio2/clk_enable_count

GPIO2_B2 bit位为(B-A)8 + 2 = 10

GPIO3_B3 bit位为(B-A)8 + 3 = 11

测试DDR寄存器

io -4 -r 0xff780004

返回

807f1

读取DR寄存器

io -4 -r 0xff780004

返回

0x3f0

开始GPIO控制

测试GPIO2_B2

写入GPIO2_B2位低电平

io -4 -w 0xff780000 0x7f0

红灯亮,设置生效

测试GPIO2_B3

写入GPIO2_B3为输出

io -4 -w 0xff780004 0x80ff1

GPIO2_B3输出为低

io -4 -w 0xff780000 0xff0

发现不生效,查询IOMUX寄存器

io -4 -r 0xff77e004

返回

0x00c0

查询寄存器文档可知bit7:6为11, gpio2_b3没有设为gpio

设置iomux为gpio

io -4 -w 0xff7e004 0x0000

设置无效,可能是被驱动限制了

测试GPIO2_B1

bit位为(B-A)*8 + 1 = 9

由前面可知,DDR应该已经是输出

直接设置DR

io -4 -w 0xff780000 0x5f0

设置成功,黄灯亮!另外一种用GPIO Debug接口控制的方法

原作者是在Android6.0下实验的,经测试Android8.1下一样可以使用

以GPIO2_B2为例查看GPIO2_B2的gpio number1. rk3399:/sys/kernel/debug # cat gpio   GPIOs 0-31, platform/pinctrl, gpio0:    gpio-1   (                    |vcc_sd              ) out lo        GPIOs 0-31, platform/pinctrl, gpio0:

gpio-1   (                    |vcc_sd              ) out lo

gpio-4   (                    |bt_default_wake_host) in  lo

gpio-5   (                    |power               ) in  hi

gpio-9   (                    |bt_default_reset    ) out lo

gpio-10  (                    |reset               ) out hi

GPIOs 32-63, platform/pinctrl, gpio1:

gpio-34  (                    |int-n               ) in  hi

gpio-35  (                    |camsys_gpio         ) out hi

gpio-45  (                    |enable              ) out hi

gpio-46  (                    |vsel                ) out lo

gpio-49  (                    |vsel                ) out lo

gpio-54  (                    |mpu6500             ) in  lo

GPIOs 64-95, platform/pinctrl, gpio2:

gpio-64  (                    |vbus-5v             ) out lo

gpio-69  (                    |power33             ) out hi

gpio-70  (                    |power               ) out hi

gpio-71  (                    |reset               ) out hi

gpio-72  (                    |stanby              ) out hi

gpio-73  (                    |power18             ) out hi

gpio-74  (                    |sysfs               ) out lo

gpio-76  (                    |int                 ) in  hi

gpio-83  (                    |bt_default_rts      ) in  hi

gpio-90  (                    |bt_default_wake     ) in  lo

可知GPIO2_B2的number 为GPIO74导出为GPIO

rk3399:/sys/class/gpio # echo 74 >export

1|rk3399:/sys/class/gpio # ls

export gpiochip0   gpiochip32 gpiochip96

gpio74 gpiochip128 gpiochip64 unexport

rk3399:/sys/class/gpio #

设置输出高低电平

rk3399:/sys/class/gpio/gpio74 # lsactive_low device direction edge power subsystem uevent valuerk3399:/sys/class/gpio/gpio74 # echo 1 > valuerk3399:/sys/class/gpio/gpio74 # echo 0 > valuerk3399:/sys/class/gpio/gpio74 #

但同样的方法GPIO73不能导出,看来这种方法还是有些局限

这个开发板可以了解

78b540a7944bc1298ece3af4fdcda98.png (768.97 KB, 下载次数: 0)

2020-8-3 15:53 上传

瑞芯微读取寄存器_RK3326 RK3399 GPIO寄存器操作指南相关推荐

  1. 瑞芯微读取寄存器_经验-瑞芯微RK3399嵌入式开发板调试方法-电路城论坛 - 电子工程师学习交流园地...

    RK3399的CPU采用big.LITTLE大小核架构,双Cortex-A72大核+四Cortex-A53小核结构,对整数.浮点.内存等作了大幅优化,在整体性能.功耗及核心面积三个方面都具革命性提升. ...

  2. 瑞芯微读取寄存器_【rockchip PX30平台】uboot中读取I2C设备的寄存器值

    前言 最近项目中有块rockchip的板子需要同时适配两块LCD,但是没看到RK平台本身有这个功能,所以我们想到通过TP本身提供的sensor id去判断,然后做相应的初始化动作. 所以我们需要先看一 ...

  3. 瑞芯微和全志的芯片选型和开发异同点

    国产通用SOC比较常见的有瑞芯微和全志. 瑞芯微有RK6.RV.RK其他和RK Power,其他都是不知名或者失败的产品不谈也罢.其中RK6是视频接口转换芯片跟龙迅做的一样.RV都是ISP,这是自20 ...

  4. 关于瑞芯微相关芯片了解

    http://www.t-firefly.com/doc/download/4.html 最近了解瑞芯微相关芯片  RK3188,RK3399.主要应用于同屏互动与安卓PC

  5. 瑞芯微RK3399设备树传递分析

    本文主要记录了在友善之臂使用的基于瑞芯微github上uboot的rkdevelop分支,以及瑞星微官方的stable-4.4-rk3399-linux分支中,uboot如何给linux内核所需要的k ...

  6. 瑞芯微RK3568对比RK3399性能解析

    RK3568核心板简介 ​ RK3568核心板是武汉万象奥科基于瑞芯微Rockchip的RK3568设计的一款高性能核心板.它采用四核Cortex-A55架构,最高主频可达2.0GHz,同时集成Mal ...

  7. rk3568 | 瑞芯微平台GPIO引脚驱动编写

    最近在玩瑞芯微平台的产品,移植了几个设备的驱动,遇到了一些问题,总结后发现大部分问题都出在了GPIO配置的问题上,写下本篇文章,用来分享一下调试的心得. 有喜欢瑞芯微的朋友,可以加我好友,拉你进群,一 ...

  8. 【北京迅为】瑞芯微系列RK3399六核服务器级开发板接口介绍

    迅为 iTOP-RK3399 开发板基于瑞芯微公司的 RK3399 六核处理器设计,Cortex-A72 架构: GPU Mali-T860 MP4 支持 4K H.265/H.264 视频解码:An ...

  9. 方案展示 | 基于瑞芯微RK3399的3D打印机解决方案

    在电影<机械公敌>中,拥有一条炫酷机械手臂的戴尔令观众念念不忘.随着科技的不断发展,科幻作品中天马行空的想象已成为触手可及的现实,因为,3D打印技术正在悄然改变这个世界. 3D打印是快速成 ...

  10. 迅为RK3399开发板瑞芯微64位六核Linux安卓8.1系统

    iTOP-3399 开发平台是基于瑞芯微的 RK3399 处理器设计开发的一款产品,Rockchip RK3399 是瑞芯微推出的一款低功耗,高性能的应用处理器芯片.该芯片基于 Big.Little ...

最新文章

  1. 计算机和人类“看”法不同,但这重要么?
  2. linux下mysql修改字符集,远程连接
  3. android动画封装,Android属性动画封装,快速构建动画
  4. 在 C++ 中实现一个轻量的标记清除 gc 系统
  5. Java 动作事件_java按钮动作事件
  6. react native bundle读取assets_react-native-easy-app 详解与使用之 (一)AsyncStorage
  7. myEclipse 界面窗口打不开问题
  8. springmvc java中转发_springmvc实现转发和重定向
  9. 开课吧课堂-Java面试题:面向对象的特征有哪些方面?
  10. 黑马程序员 NSString,NSMutableString
  11. Python提取PDF中的信息,写入Excel
  12. 为Visual Studio创建项目模板(VSIX / C#/ 2019)
  13. 如何实现话费充值api接口?详细讲解源码
  14. vsftpd cmds_allowed 权限控制
  15. php编辑器浅色还是深色,程序员的IDE到底是浅色主题好还是深色主题好?
  16. iPad 3发布在即,各平板优势大比拼
  17. 深度学习之LSTM案例分析(三)
  18. 服务器ping显示不是内部,如何解决ping不是内部或外部命令问题_网站服务器运行维护,ping,内部,外部,命令...
  19. GPS接收机学习小记(一)
  20. 计算机显示硬盘故障是怎么回事,如果计算机硬盘出现故障怎么办

热门文章

  1. 建立人脉关系以及可能认识的人推荐
  2. 一字千金的SEO达文
  3. 从软件工程师到有赞新零售技术负责人,34岁李星专访
  4. 一文读懂随机森林的解释和实现
  5. Python恶搞搞机程序弹窗
  6. [C#]Windows服务程序[转载西门吹雪的好文章]
  7. MATLAB画Correlation plots
  8. 360 电脑重装系统服务器,电脑如何重装系统?360快速重装电脑系统教程
  9. 剑网3手游微信52服务器灵霄峡,剑网3指尖江湖灵霄峡宝箱位置详解攻略
  10. gmx_MMPBSA--计算蛋白-配体自由能及能量分解