RK平台使用IO指令

news2024/10/7 18:29:52

简介

RK平台开发过程经常要用到IO指令,主要是用来读写CPU各个模块寄存器的值,从而实现在线调试。
RK平台的SDK默认有包含IO指令的源码,如果执行的时候找不到指令,可能是没有编译进去,找到对应的编译脚本编译进去即可。
由于IO指令是直接操作CPU寄存器,因此与SDK版本无关,无论是Android还是Linux,使用的方法都是一样的,但是不同芯片的寄存器地址不一样,因此,每个芯片的操作指令是不同的。

基本操作

查看帮助文档

console:/ # io
Raw memory i/o utility - $Revision: 1.5 $

io -v -1|2|4 -r|w [-l <len>] [-f <file>] <addr> [<value>]

    -v         Verbose, asks for confirmation
    -1|2|4     Sets memory access size in bytes (default byte)
    -l <len>   Length in bytes of area to access (defaults to
               one access, or whole file length)
    -r|w       Read from or Write to memory (default read)
    -f <file>  File to write on memory read, or
               to read on memory write
    <addr>     The memory address to access
    <val>      The value to write (implies -w)

Examples:
    io 0x1000                  Reads one byte from 0x1000
    io 0x1000 0x12             Writes 0x12 to location 0x1000
    io -2 -l 8 0x1000          Reads 8 words from 0x1000
    io -r -f dmp -l 100 200    Reads 100 bytes from addr 200 to file
    io -w -f img 0x10000       Writes the whole of file to memory

Note access size (-1|2|4) does not apply to file based accesses.

直接输入io,后面加寄存器地址即可,但是,默认是按1字节来读的,由于芯片每个寄存器都是32位(即4个字节),为了方便查阅,我们经常一次读4个字节,如:

console:/ # io -4 0xff7744b0
ff7744b0:  000000a1

有时候也会一次性读多个字节,比如一次性读32个字节,每4个字节显示为一组:

console:/ # io -4 -l 32 0xff7744b0                                             
ff7744b0:  000000a1 0000850c 0000e007 000002e7
ff7744c0:  00000200 00005554 00004555 00000005

写寄存器的操作相对读只是后面多了个寄存器的值,一般经常是一次写4个字节,如:

console:/ # io -4 0xff7744b0 0x00070007

使用示例

目标

该示例主要实现通过寄存器操作一个gpio口,实现上拉或者下拉操作,本示例以RK3399的gpio0_b0为例。

设置gpio0_b0引脚为gpio功能

通过RK3399的TRM手册《2.1 Address Mapping》章节查得GRF的基址为:0xFF770000
通过RK3399的RTM手册《Chapter 4 General Register Files (GRF)》章节查到GRF_GPIO2B_IOMUX寄存器的情况如下:
在这里插入图片描述
在这里插入图片描述
因此可知,把gpio2_b0设置为gpio功能,需要把GRF_GPIO2B_IOMUX的bit[1:0]设置为0,由于高位有写允许位bit[17:16],因此需要写的值应该是:0x00030000,地址是RGF的基址+GRF_GPIO2B_IOMUX的偏移址:0xFF77E004,指令为:

io -4 0xFF77E004 0x00030000

操作gpio引脚的状态值

通过RK3399的RTM手册《Chapter 4 General Register Files (GRF)》章节查到GRF_GPIO2B_P寄存器的情况如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因此可知,操作gpio0_b0,应该写GRF_GPIO2B_P寄存器的bit[1:0],拉高为2‘b01,拉低为2’b10,由于高位有写允许位bit[17:16],因此拉高的时候需要写的值是:0x00030001,拉低的时候需要写的值是:0x00030002,地址是RGF的基址+GRF_GPIO2B_P的偏移址:0xFF77E044,指令为:

io -4 0xFF77E044 0x00030001 #拉高
io -4 0xFF77E044 0x00030002 #拉低

常见错误处理

执行io指令的时候报以下错误:

# io -4 0xff774488
open /dev/mem: No such file or directory

这是kernel没有打开CONFIG_DEVMEM配置,在kernel的menuconfig中选中即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dream音频芯片开发虚拟环绕声算法概论

1 项目需求 2 开发平台介绍 Dream S.A.S France公司网站&#xff1a;https://www.dream.fr Dream全系列的芯片包含SAM2000 series ICs、SAM3000 series ICs以及SAM5000 series ICs。 SAM5000 series ICs包括 sam5504、sam5704、sam5708、sam5808、sam5716、sam5916。 目前drea…

为什么电源纹波那么大?

某用户在用500MHz带宽的示波器对其开关电源输出5V信号的纹波进行测试时&#xff0c;发现纹波和噪声的峰峰值达到了900多mV&#xff08;如下图所示&#xff09;&#xff0c;而其开关电源标称的纹波的峰峰值<20mv。虽然用户电路板上后级还有LDO对开关电源的这个输出再进行稳压…

出学校干了 5 年外包,已经废了

如果不是女朋友和我提分手&#xff0c;我估计现在还没醒悟 本科大专&#xff0c;17年通过校招进入某软件公司做测试&#xff0c;干了接近5年的功能。 今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01;而我已经…

Spring面向切面编程(AOP)

Spring面向切面编程&#xff08;AOP&#xff09; 概念 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;即面向切面编程&#xff0c;利用一种称为"横切"的技术&#xff0c;剖开封装的对象内部&#xff0c;并将那些影响了多个类的公共行为封装到…

DICOM笔记-CT图像的边界

常见CT图像在有效范围内都是有效CT值。 对CT值的处理也就仅限于做斜率和截距的线性处理&#xff1b; 可参加常用的DICOM标签信息&#xff1a; DICOM笔记-DICOM常用Tag标签汇总_dicom tag列表_黑山老妖的博客的博客-CSDN博客文件引言MetaInfoGroupElementTag Description中文解…

尚无忧货运物流app系统享集运转运uniapp系统

物流货运app系统 找货源 找车源 查找货源 开通会员 开创性的物流货运管理云系统&#xff0c;将货运环节中的制造商、承运商、司机和收货方链接在同一平台&#xff0c;轻松管理运输。 <template> <diy ref"diy" v-if"isDiy"></diy&…

vue——antd+elementUi——table表格实现滚动加载(分页滚动加载)——技能提升

今天遇到一个需求&#xff0c;就是要实现表格的滚动加载。 通常我们经常实现的效果是&#xff1a;下图中带分页的表格 如果要实现滚动分页加载的话&#xff0c;则需要保证的一点就是数据量不能过大&#xff0c;过多的数据量会导致页面的卡顿。 下面来介绍滚动分页加载的实现…

jmeter的使用

一、jmeter介绍和下载 1.1 jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 JMeter 可以用于对服务器、网络或对象模拟巨大的负载&#xff0c;来自不…

【Python】FastAPI 配置日志即 logging 模块使用

目录 1. 日志 2. FastAPI 示例 1. 日志 日志是对软件执行时所发生事件的一种追踪方式。软件开发人员对他们的代码添加日志调用&#xff0c;借此来指示某事件的发生。一个事件通过一些包含变量数据的描述信息来描述&#xff08;比如&#xff1a;每个事件发生时的数据都是不同的…

Python之并发编程多线程理论

一、什么是线程 在传统操作系统中&#xff0c;每个进程有一个地址空间&#xff0c;而且默认就有一个控制线程 线程顾名思义&#xff0c;就是一条流水线工作的过程&#xff0c;一条流水线必须属于一个车间&#xff0c;一个车间的工作过程是一个进程 车间负责把资源整合到一起…

项目开发中异常处理需要注意的问题(详细!!)

文章目录 1、各层在对异常处理时需要注意的问题2、业务代码层面对于异常的处理姿势3、错误的异常处理方式&#xff1a;1、丢弃异常2、丢失异常的原始信息3、抛出异常时不指定任何信息 4、线程池处理异常方法 1、各层在对异常处理时需要注意的问题 这是日常开发中请求的处理过程…

springcloud-alibaba (05)Seata实现分布式事务-个人笔记

前言 本文将介绍如何使用Seata实现分布式事务。将覆盖以下主题&#xff1a; seata下载与安装如何配置和启动Seata服务器如何编写应用程序以使用Seata如何解决常见问题 本文只是我个人seata学习笔记&#xff0c;不是什么学习教程 如果你是一名Java开发人员&#xff0c;那么你…

官方喊你来免费下载 Navicat Premium 16.2 Beta 中文版 | Redis 体验官火热招募中

今天&#xff0c;我们发布了 Navicat 16.2 Beta 中文版&#xff0c;它适用于 Windows、macOS 和 Linux 平台。届时&#xff0c;我们诚邀广大 Redis 用户及爱好者亲测 Beta 版&#xff0c;希望 Redis 新功能将为 Redis 相关工作者&#xff08;应用开发人员、DBA 和数据分析师等&…

【paddlecls】多机多卡-linux(二:环境搭建)

构建并进入 docker 容器后&#xff0c;我们进入下一步&#xff1a; 1. 退出/进入 docker 容器&#xff1a; 在进入 Docker 容器后&#xff0c;可使用组合键 Ctrl P Q 退出当前容器&#xff0c;同时不关闭该容器&#xff1b; 如需再次进入容器&#xff0c;可使用下述命令&am…

微信小程序项目实例——生活记账本

今日推荐&#x1f481;‍♂️ 2023五月天演唱会&#x1f3a4;&#x1f3a4;&#x1f3a4;大家一起冲冲冲&#x1f3c3;‍♂️&#x1f3c3;‍♂️&#x1f3c3;‍♂️ &#x1f52e;&#x1f52e;&#x1f52e;&#x1f52e;&#x1f52e;往期优质项目实例&#x1f52e;&…

蓝牙资讯|Counterpoint发布2023年Q1中国智能手表报告

根据市场调查机构 Counterpoint Research 公布的最新报告&#xff0c;2023 年第 1 季度中国智能手表出货量同比下降 28%&#xff0c;环比下降 16%&#xff0c;达到过去 12 个季度以来的最低水平。 本季度智能手表市场中&#xff0c;华为、苹果和小天才&#xff08;imoo&#…

想要入坑C++?当我拿出菱形虚拟继承,阁下又该如何应对

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;继承的定义方式&#x1f337;继承方式与访问限定符&#x1f337;基类和派生类对象赋值转换&#x1f337;继承中的作用域&#x1f337;派生类的默认成员函数&#x1f337;继承与友元&#x1f337;继承与静态成…

基于 ESP32 通过 SMTP 服务器 来发送电子邮件信息

电子邮件在全球范围内被用作数字通信的重要组成部分。电子邮件主要用于官方通信目的,因为它最方便、成本效益高、保存记录、覆盖全球且环保。电子邮件是一种非常快捷的通信方式,只是您需要稳定的互联网连接。 在这个项目中,我们将使用ESP32开发板发送电子邮件(纯文本和 HTM…

因为计算机中丢失VCRUNTIME140怎么办?为什么会丢失VCRUNTIME140.dll

vcruntime140.dll是一个Windows动态链接库&#xff0c;其主要功能是为C/C编译的程序提供运行时支持。这个库在Microsoft Visual Studio 2015中被引入&#xff0c;其名称中的“140”代表版本号。在我们打开运行软件或者游戏程序的时候&#xff0c;电脑提示因为计算机中丢失VCRUN…

windows下编译roadrunner和作为laravel服务器实践

roadrunner源码地址&#xff1a;https://gitee.com/mirrors/RoadRunner?_fromgitee_search windows下编译roadrunner源码获得rr.exe可执行文件 将rr.exe拷贝到laravel目录下 .rr.yaml配置文件内容&#xff1a; version: 3 server: command: "php vendor/spiral/road…