Uboot USB模式(RK3288变砖头的解决办法)

RK3288启动后有三种模式,可以分别进行操作。

第一种是normal也就是正常的启动模式。这个模式无法刷固件。一般板子通电就是这个模式

第二种是loader模式。就是刷固件模式。这个模式可以刷各种image。按住recover按键再通电,通过uboot的检测进入这个模式

第三种是MASKROM模式。这种模式用于拯救砖头机器。比如bootloader无法启动。无法进入loader正常下载。需要通过在板子上找对应的T13 C155 焊点,短接后通电,进入MASKROM模式,这些点需要问板子的生产商。 也可参考链接:http://www.t-firefly.com/doc/product/info/287.html

对于模式的检测是在uboot里面进行的。如果uboot执行有问题。没法进入loader模式,就需要进入maskrom模式。检测的代码在uboot的board_late_init->board_fbt_preboot->board_fbt_key_pressed->checkKey() 根据按键的结果确定接下来执行哪一步。checkKey通过配置数据使用GetPortState函数得到是否有按键。

配置的内容如下

RockusbKeyInit中

key->type = KEY_AD;
key->key.adc.index = KEY_ADC_CN;
key->key.adc.keyValueLow = 0;
key->key.adc.keyValueHigh= 30;
key->key.adc.data = SARADC_BASE;
key->key.adc.stas = SARADC_BASE+4;
key->key.adc.ctrl = SARADC_BASE+8;

#define SARADC_BASE             RKIO_SARADC_PHYS

在io-rk3288.h中

#define RKIO_SARADC_PHYS                0xFF100000
#define RKIO_SARADC_SIZE                SZ_64K

接下来就是到芯片手册中看资料了

http://rockchip.fr/RK3288%20TRM/

http://wiki.t-firefly.com/index.php/Firefly-RK3288/RK3288_TRM

三通道的模拟信号转数字信号

Rockchip RK3288TRM V1.0 Technical Reference Manual.pdf

 

可以看到地址FF100000是SAR-ADC的基地址

内存地址从0-FF100000 16M-4GB大小

key->key.adc.index = 1;  key->key.adc.keyValueLow = 0;  key->key.adc.keyValueHigh= 30;  key->key.adc.data = SARADC_BASE;  key->key.adc.stas = SARADC_BASE+4;  key->key.adc.ctrl = SARADC_BASE+8;  
typedef struct  
{  uint32  index;  uint32  keyValueLow;  uint32  keyValueHigh;  uint32  data;  uint32  stas;  uint32  ctrl;  
}adc_conf;  

对照SAR-ADC源码进行解析:

for(tt = 0; tt < 10; tt++)  
{  // read special gpio port value.  
    uint32 value;  uint32 timeout = 0;  /* 控制寄存器清零 初始化状态 */  write_XDATA32( adc->ctrl, 0);  DRVDelayUs(1);  /* 写入 0x0028| 1=0x29 第0 3 5 bit为1 0:2为001 表示选择输入源 Input source 1 (SARADC_AIN[1]) 第3bit为1 表示ADC电源启动 第5bit为1 表示开启中断 */  write_XDATA32( adc->ctrl, 0x0028|(adc->index));  DRVDelayUs(1);  do {  /* 接下来读取控制寄存器如果第6bit为0那么持续读取,直到第6bit为1 6bit是中断状态位,当转换结束以后会被设置为1,设置为0表示清除中断 */  value = read_XDATA32(adc->ctrl);  timeout++;  } while((value&0x40) == 0);  /* 前面的操作就是设置好输入源开启中断这些并开始转换。 然后等待转换结束 使用read_XDATA32(adc->data)读取数据 adc->data得到的是最后一次AD转换的值 */  value = read_XDATA32(adc->data);  //printf("adc key = %d\n",value);  //DRVDelayUs(1000);  /* 如果最后一次AD转化的值处于keyValueLow和keyValueHigh之间。 表明电源被接通。计数器+1 keyValueLow和keyValueHigh控制着不同的按键类型? */  if( value<=adc->keyValueHigh && value>=adc->keyValueLow)  hCnt++;  
}  
/* 
清空初始化状态 
如果10次里面有8次接通,那么说明电源按钮被按下。返回1 
*/  
write_XDATA32( adc->ctrl, 0);  
return (hCnt>8)  

总之根据keyValueHigh和keyValueLow检测完不同的按键后就根据这些按键做对应的操作。比如进入loader模式还是normal模式

如果进入的是rockusb那么执行 do_rockusb(NULL, 1, 0, NULL)

参考复制自:https://blog.csdn.net/groundhappy/article/details/56280576

转载于:https://www.cnblogs.com/debruyne/p/9225730.html

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

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

相关文章

java邮件实例_java邮件小实例

新建一个包&#xff0c;名为mail第一个类&#xff1a;MailSenderInfo.java###########################################package com.util.mail;/*** 发送邮件需要使用的基本信息*author by wangfunhttp://www.5a520.cn 小说520*/import java.util.Properties;public class Mai…

DEV GridView嵌套

/// <summary> /// 绑定主表和明显表到GridView /// </summary> /// <param name"machineProduct">主表</param> /// <param name"configureData">字表</param> private void Mas…

局域网大型文件分发的可能解决方案

客户原来的做法是把文件上传到服务器&#xff0c;然后后形成一个普通的HTTP地址下入网站后台系统&#xff0c;然后客户端用户看到后&#xff0c;则下载下来。但是随着文件越来越大&#xff0c;客户端下载量增加&#xff0c;在局域内网环境中这种文件分发方式的弊端立现。服务器…

android——获取ImageView上面显示的图片bitmap对象

获取的函数方法为&#xff1a;Bitmap bitmapimageView.getDrawingCache(); 但是如果只是这样写我们得到的bitmap对象可能为null值&#xff0c;正确的方式为&#xff1a; imageView.setDrawingCacheEnabled(true);Bitmap bitmapimageView.getDrawingCache();imageView.setDrawin…

java监听com口_简单了解Java接口+事件监听机制

1.接口&#xff1a;定义方法&#xff1a;public interface interName //extends interName2, interName3...可继承多个接口在接口里只能定义常量和抽象方法。public static final String Name;public abstract void method(String Name);//这里不能用大括号&#xff0c;不然就不…

例子:好友列表选中效果

<style type"text/css"> *{ margin:0px auto; padding:0px; font-family:微软雅黑; font-size:16px;} .f{ width:200px; height:30px; background-color:#63C; color:white; text-align:center; line-height:30px; vertical-align:middle; margin-top:3px} .f:…

sublime 常用插件

AutoFileName 文件提示路径&#xff0c;在img,script的[src]属性。link,a的[href]属性&#xff0c;background 的[url]属性后提示文件的路径 CSS Format css格式化工具 Pretty JSON json格式化工具转载于:https://www.cnblogs.com/zhangtao1990/p/9231608.html

有一句说一千句,是作家....

有一句说一千句&#xff0c;是作家&#xff0c;这叫文采&#xff1b;有一句说一百句&#xff0c;是演说家&#xff0c;这叫口才&#xff1b;有一句说十句&#xff0c;是教授&#xff0c;这叫学问&#xff1b;有一句说一句&#xff0c;是律师&#xff0c;这叫严谨&#xff1b;说…

java jsoup爬取动态网页_java通过Jsoup爬取网页(入门教程)

一&#xff0c;导入依赖org.jsoupjsoup1.10.3org.apache.httpcomponentshttpclient二&#xff0c;编写demo类注意不要导错包了,是org.jsoup.nodes下面的package com.taotao.entity;import org.apache.http.HttpEntity;import org.apache.http.client.methods.CloseableHttpResp…

Java设计模式之七大结构型模式

总体来说设计模式分为三大类&#xff1a;创建型模式、结构型模式和行为型模式。 结构型模式&#xff0c;共有七种&#xff1a;适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 其中适配器模式主要分为三类&#xff1a;类的适配器模式、对象的适配…

一个Option请求引发的深度解析

在当前项目中&#xff0c;前端通过POST方式访问后端的REST接口时&#xff0c;发现两条请求记录&#xff0c;一条请求的Request Method为Options&#xff0c;另一条请求的Reuest Method为Post。想要解决这个疑惑还得从以下3个概念说起。 Http Options Method RFC2616标准&#x…

ionic+AnjularJs实现省市县三级联动效果

建议对ionic和AnjularJs有一定了解的人可以用到&#xff0c;很多时候我们要用到选择省份、城市、区县的功能&#xff0c;现在就跟着我来实现这个功能吧&#xff0c;用很少的代码&#xff08;我这里是根据客户的要求&#xff0c;只显示想要显示的部分省份和其相对应的城市、区县…

md5和SHA校验码

md5已经不安全了,中国山东大学女学霸王小云破解了一系列密码,当真是巾帼不让须眉.说是破解,其实就是给你一个md5码,让你求出这个md5码所对应的原始信息,显然一个md5对应无数种原始信息.而md5的特性就是难以还原初始信息,但是王小云可以迅速找到给定md5码的可行解.md5的解空间虽…

Confluence 6 附件存储文件系统的分级

从 Confluence 3.0 开始&#xff0c;附件的存储方式有了重大的改变和升级。如果你是从 Confluence 2.10 及其早期版本升级上来的&#xff0c;请参考 Upgrading Confluence 页面中推荐的升级路径&#xff0c;同时请阅读 Confluence 3.0 文档中 Hierarchical File System Attachm…

Fragment与Activity交互(使用接口)

在Fragment中: 1. // 定义一个回调接口&#xff0c;该Fragment所在Activity需要实现该接口// 该Fragment将通过该接口与它所在的Activity交互 { public void onItemSelected(Integer id);}2. // 当该Fragment被添加、显示到Activity时&#xff0c;回调该方法 public void onA…

java保龄球计分_自己写的java保龄球记分

package com.java.bowlingscore1;import java.util.Arrays;public class Game { int[] bowlingScore new int[21]; //用来存放投掷击倒的数目 int ball0; //数组下标 int score;//分数 int countframe0;//记录当前是第几轮 boolean firs…

你不知道的JavaScript-0

【数组】 删除数组的几种方法&#xff1a; https://www.cnblogs.com/Joans/p/3981122.html http://www.cnblogs.com/qiantuwuliang/archive/2010/09/01/1814706.html 【数字转换】 parseInt(num, radix): 【宽松相等和严格相等】 允许在相等比较中进行强制类型转换&#xff0c…

真是,原来可以这样啊

一下午&#xff0c;解决了两个问题。。。。。 先列上这两个真是Bug的问题&#xff1a; 1、数据库有个表book&#xff0c;里面有个字段 create_time Datetime类型的字段&#xff0c;这个字段是 not null 的。下午下代码往数据库里插入数据时&#xff0c;总是提示&#xff0c;cre…

1026. Table Tennis (30)

题目如下&#xff1a; A table tennis club has N tables available to the public. The tables are numbered from 1 to N. For any pair of players, if there are some tables open when they arrive, they will be assigned to the available table with the smallest numb…

java运行时异常中文_JAVA——运行时异常(RuntimeException)

Exception中有一个特殊的子类异常RuntimeException运行时异常。如果在函数内抛出该异常&#xff0c;函数上可以不用声明&#xff0c;编译一样通过。如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过。之所以不用在函数上声明&#xff0c;是因为不需要让调用者处…