RK3399如何在Loader模式下拉高GPIO

目录

一、RK GPIO计算方法

  •    1.1 GPIO2_A6计算它的num值

二、在烧录的Loader模式拉高GPIO

  • 2.1 如何找到GPIOA2_A6的寄存器
  • 2.2 设置GPIO上面的映射的地址
  • 2.3 设置GPIO上面的映射的地址代码
  • 2.4 Loader模式串口log

一、RK GPIO计算方法

1.1 GPIO2_A6计算它的num值


K3399 有 5 组 GPIO bank:GPIO0~GPIO4,每组又以 A0~A7, B0~B7, C0~C7, D0~D7 作为编号区分

A : 0   B: 1  C: 2  D: 3

GPIO2_A6 计算方式为:2*32 + 0*8 + 6 = 70

GPIO4_A7计算方式为:    4*32 + 0*8 +  = 135

GPIO 在 Debugfs 文件系统中的使用情况:

看到是从1000开始所以在此基数上+1000即可

# cat /sys/kernel/debug/gpioGPIOs 1000-1031, platform/pinctrl, gpio0:
gpio-1001 ( |vcc_sdmmc ) out hi
gpio-1005 ( |power ) in hi
gpio-1006 ( |ap_wake_module_gpio ) out lo
gpio-1008 ( |module_state_gpio ) in hi
gpio-1011 ( |spk-ctl ) out lo
GPIOs 1032-1063, platform/pinctrl, gpio1:
gpio-1032 ( |destroy_gpio ) in hi
gpio-1045 ( |goodix_pwr ) out hi
gpio-1046 ( |vsel ) out hi
gpio-1049 ( |vsel ) out lo
gpio-1052 ( |goodix_reset ) out lo
gpio-1055 ( |vcc5v0_host ) out hi
gpio-1056 ( |GPIO Key Home ) in hi
GPIOs 1064-1095, platform/pinctrl, gpio2:
gpio-1064 ( |module_wake_ap_gpio ) in hi
gpio-1065 ( |ap_state_gpio ) out hi
gpio-1066 ( |reset_modem_gpio ) out lo
gpio-1067 ( |reset_module_gpio ) out hi
gpio-1070 ( |module_pwr_sw_gpio ) out hi
gpio-1071 ( |camsys_gpio ) out lo
gpio-1073 ( |camsys_gpio ) out hi
gpio-1074 ( |camsys_gpio ) out lo
gpio-1076 ( |camsys_gpio ) out lo
gpio-1091 ( |avdden ) out lo
gpio-1092 ( |aveeen ) out lo
GPIOs 1096-1127, platform/pinctrl, gpio3:
gpio-1109 ( |wacom_irq ) in hi
gpio-1111 ( |mdio-reset ) out hi
gpio-1112 ( |wacom_rst ) in hi
gpio-1124 ( |sy7803b_flen ) out lo
gpio-1125 ( |sy7803b_fltri ) out lo
gpio-1126 ( |reset ) out lo
GPIOs 1128-1159, platform/pinctrl, gpio4:
gpio-1132 ( |vcc5v0_host1 ) out hi
gpio-1133 ( |headset_gpio ) in lo
gpio-1134 ( |chg_source_sw_gpio ) out lo
gpio-1135 ( |pwr_module_gpio ) out hi
gpio-1149 ( |GTP_RST_PORT ) out hi
gpio-1150 ( |GTP_INT_IRQ ) out lo
gpio-1154 ( |vibrator ) out lo
gpio-1156 ( |goodix_irq ) in lo
gpio-1158 ( |chg_source_sw_gpio ) out hi

二、在烧录的Loader模式拉高GPIO

问题:

       使用GPIO的设置函数不生效

              int gpio_direction_output(unsigned gpio);

              int gpio_get_value(unsigned gpio);

解决方法:直接写GPIO的寄存器来控制

目标:

      1.查看并设置GPIO2_A6的IOMUX和Pull Up/Pull Down状态,并设置其默认Pull Up。

      2.查看并设置输入输出状态,并设置其输出高电平。

      3.查看并设置GPIO的电源域 GPIO2_A6:1.8V  

2.1 如何找到GPIOA2_A6的寄存器

查阅RK3399的数据手册找到寄存器地址

官方手册下载地址:

Rockchip open source Documenticon-default.png?t=N7T8https://opensource.rock-chips.com/wiki_Main_Page

GRF_GPIO2A_IOMUX: GPIO2A iomux control
     Address: Operational Base + offset (0x0e000)

GRF_GPIO2A_P : GPIO2A PU/PD control

     Address: Operational Base + offset (0x0e040)

GPIO_SWPORTA_DDR

Address: Operational Base + offset (0x0004)

GRF_IO_VSEL : 电源域设置

    Address: Operational Base + offset (0x0e640)

从 RK3399 Address Mapping 可以查到

GRF :  0xFF770000 

GPIO2 : 0xFF780000

GPIO4 : 0xFF790000

2.2 设置GPIO上面的映射的地址

设置步骤:

  1. 设置复用类型位gpio
    设置的地址为: 0xFF770000 + 0x0e000 = 0xFF77E000
     
  2. 设置gpio为output
    设置的地址为:0xFF770000 + 0x0e040 =  0xFF77E040
     
  3. 设置gpio pull-up
    设置的地址为:0xFF780000 + 0x00004 =  0xFF780004
     
  4. 设置电源域为1.8v
    设置的地址为:0xFF770000 +0x0e640 = 0xFF77E640
     

  由于在开机状态下两个GPIO是OK的可以用io工具导出寄存器值再去设置寄存器效率会高一些(偷个懒不然一个个算有点麻烦哈哈哈);

  

130|rk3399_syber:/ # io -4 -l 0x100 0xff77e040
ff77e040: 00004a11 00005515 0000ff03 000003f3
rk3399_syber:/ # io -4 -l 0x100 0xff77e000
ff77e000: 00000000 000000c0 00005555 00000005

rk3399_syber:/ # io -4 -l 0x100 0xff780004
ff790004: 180016ce 00000000 00000000 00000000

rk3399_syber:/ # io -4 -l 0x100 0xff77e640
ff77e640: 00000003 00000004 00000080 00000084
 

2.3 设置GPIO上面的映射的地址代码

代码块标题

u32 value = readl((void *)(0xFF77E000));
printf("YQ- GPIO2_Ax PU/PD Reset value:[0xFF77E000] 0x%08x\n",value);                                                                                                      value = readl((void *)(0xFF77E040));
printf("YQ- GPIO2_Ax PU/PD Reset value:[0xFF77E040] 0x%08x\n",value);value = readl((void *)(0xFF780004));
printf("YQ- GPIO2_Ax PU/PD Reset value:[0xFF780004] 0x%08x\n",value);value = readl((void *)(0xFF77E640));
printf("YQ- GPIO2A Setting PMU value:[0xFF77E640] 0x%08x\n",value);
printf("########### YQ- Read end ########### \n");value = 0xffff4a11;
writel(value,(void *)(0xFF77E040));
udelay(500*1000);
value = readl((void *)(0xFF77E040));                                                                                                                                                              
printf("YQ- GPIO2_Ax PU/PD Setting value:[0xFF77E040] 0x%08x\n",value);value = 0x180016ce;
writel(value, (void *)(0xFF780004));
udelay(500*1000);
value = readl((void *)(0xFF780004));
printf("YQ- GPIO2_xx DDR Setting value:[0xFF780004] 0x%08x\n",value);value = 0xffff0003;
writel(value, (void *)(0xFF77E640));
udelay(500*1000);
value = readl((void *)(0xFF77E640));
printf("YQ- GPIO2A Setting value:[0xFF77E640] 0x%08x\n",value);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/102278.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 扩展内存挂载

一般新建虚拟机时,系统默认的空间是20G,但是当我们搭建一些环境之后,需要解压一些稍微大点的源码时内存可能不够用了,这时我们需要扩展内存。 一、硬盘扩展 首先,关闭虚拟机,在虚拟机设置中将硬盘容量扩展…

RabbitMQ: topic 结构

生产者 package com.qf.mq2302.topic;import com.qf.mq2302.utils.MQUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection;public class Pubisher {public static final String EXCHANGE_NAME"mypubilisher";public static void ma…

【Springcloud】Actuator服务监控

【Springcloud】Actuator服务监控 【一】基本介绍【二】如何使用【三】端点分类【四】整合Admin-Ui【五】客户端配置【六】集成Nacos【七】登录认证【八】实时日志【九】动态日志【十】自定义通知 【一】基本介绍 (1)什么是服务监控 监视当前系统应用状…

pdf怎么转换成dwg格式?简单转换方法分享

当我们需要在CAD中编辑PDF文件中的向量图形时,将PDF转换成DWG格式是一个非常好的选择。因为PDF是一种非常流行的文档格式,很多时候我们会接收到PDF文件,但是PDF文件中的向量图形无法直接在CAD中编辑。而将PDF转换成DWG格式后,就可…

shell入门运算符操作、条件判断

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏&#xf…

PHP8函数包含文件-PHP8知识详解

在php中&#xff0c;可以使用以下函数来包含其他文件&#xff1a;include()、include_once()、require()、require_once()。 1、include(): 包含并运行指定文件中的代码。如果文件不存在或包含过程中出现错误&#xff0c;将发出警告。 <?php include filename.php; ?>…

2023年高教社杯数学建模国赛C题详细版思路

C 题 蔬菜类商品的自动定价与补货决策 2023年国赛如期而至&#xff0c;为了方便大家尽快确定选题&#xff0c;这里将对C题进行解题思路说明&#xff0c;以分析C题的主要难点、出题思路以及选择之后可能遇到的难点进行说明&#xff0c;方便大家尽快找到C题的解题思路。 难度排…

uni-app 折叠自定义

uni-app的uni-collapse折叠组件样式修改 下面是修改后的样式 <uni-collapse accordion class"ze" v-model"isCollapse" click"toggleCollapse"><!-- 因为list默认带一条分隔线&#xff0c;所以使用 titleBorder"none" 取消…

Linux之防火墙

目录 什么是防火墙 分类&#xff1a; Netfilter(数据包过滤) 防火墙无法完成的任务 iptables 与 firewalld 区别 iptables iptables执行原则 规则链 概念 分析 流程图 规则链分类 iptables 流量处理动作 iptables表 四种规则表 安装iptables 预处理 管理命令 …

2023 年高教社杯全国大学生数学建模竞赛题目 A 题 定日镜场的优化设计

A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统&#xff0c;是我国实现“碳达峰”“碳中和”目标的一项重要措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站&#xff08;以下简称塔式电站&#xff09;收集太阳能的基…

SpringBoot 拦截org.thymeleaf.exceptions.TemplateInputException异常

SpringBoot 拦截thymeleaf异常 org.thymeleaf.exceptions.TemplateInputException异常 org.thymeleaf.exceptions.TemplateProcessingE xception: Could not parse as each: "message : xxx " (template: “xxxx” - line xx, col xx) thymeleaf异常复现 你是故意的…

ubuntu上ffmpeg使用framebuffer显示video

这个主题是想验证使用fbdev(Linux framebuffer device&#xff09;&#xff0c;将video直接显示到Linux framebuffer上&#xff0c;在FFmpeg中对应的FFOutputFormat 就是ff_fbdev_muxer。 const FFOutputFormat ff_fbdev_muxer {.p.name "fbdev",.p.long_…