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 = ;
key->key.adc.keyValueLow = ;
key->key.adc.keyValueHigh= ;
key->key.adc.data = SARADC_BASE;
key->key.adc.stas = SARADC_BASE+;
key->key.adc.ctrl = SARADC_BASE+;
typedef struct
{
uint32 index;
uint32 keyValueLow;
uint32 keyValueHigh;
uint32 data;
uint32 stas;
uint32 ctrl;
}adc_conf;
对照SAR-ADC源码进行解析:
for(tt = ; tt < ; tt++)
{
// read special gpio port value.
uint32 value;
uint32 timeout = ;
/*
控制寄存器清零
初始化状态
*/
write_XDATA32( adc->ctrl, );
DRVDelayUs();
/*
写入 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();
do {
/*
接下来读取控制寄存器如果第6bit为0那么持续读取,直到第6bit为1
6bit是中断状态位,当转换结束以后会被设置为1,设置为0表示清除中断
*/
value = read_XDATA32(adc->ctrl);
timeout++;
} while((value&0x40) == );
/*
前面的操作就是设置好输入源开启中断这些并开始转换。
然后等待转换结束
使用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, );
return (hCnt>)
总之根据keyValueHigh和keyValueLow检测完不同的按键后就根据这些按键做对应的操作。比如进入loader模式还是normal模式
如果进入的是rockusb那么执行 do_rockusb(NULL, 1, 0, NULL)
参考复制自:https://blog.csdn.net/groundhappy/article/details/56280576
Uboot USB模式(RK3288变砖头的解决办法)的更多相关文章
- Response.Write()方法响应导致页面字体变大的解决办法
关于ASP.NET中用Response.Write()方法响应导致页面字体变大的解决办法 最近研究了ASP.NET,发现一个问题,比方说在页面里面有个Button,要点击以后要打开新窗口,而且 ...
- 直接端口打印 支持USB接口的打印机吗?解决办法
直接端口打印 支持USB接口的打印机吗?解决办法 www.MyException.Cn 网友分享于:2013-09-15 浏览:488次 直接端口打印 支持USB接口的打印机吗?问题如 ...
- html标签被div嵌套页面字体变大的解决办法
html标签被div嵌套页面字体变大的解决办法 <div> <html> <head> <title></title> </head& ...
- zynq中uboot的qspi启动报错及解决办法
问题描述: 用u-boot-xlnx-v2016.3版本编译的uboot通过qspi flash启动出现如下错误: 尝试在uboot命令行输入"sf probe 0 0 0"挂载q ...
- python使用xlrd读取excel数据时,整数变小数的解决办法
python使用xlrd读取excel数据时,整数变小数: 解决方法: 1.有个比较简单的就是在数字和日期的单元格内容前加上一个英文的逗号即可.如果数据比较多,也可以批量加英文逗号的前缀(网上都有方法 ...
- eclipse打断点调试进入到class文件中,不显示变量值的解决办法汇总
每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code 问题描述:eclipse打断点调试进入到class文件中,而且监视区不显示变量结果 是由于对应 ...
- Microsoft Office Word 2007 文档结构图突然变小的解决办法
前记: 一个word文档不知道修改了什么,突然发现文档结构图显示的文字变得非常的小了. 用ctrl+鼠标滚轮只能放大或是缩小行间距,对文字没有什么变化. 解决办法: 1.打开文档结构图 点击视图,勾选 ...
- chrome隐身模式无法播放flash的解决办法
困扰很多天的chrome无法播放flash的问题终于解决了 因为之前一直用隐身模式,一直不能播放flash,重装chrome,重装插件,还是不行 结果今天发现正常模式是可以播放的,所以找了一下chro ...
- 电脑无法识别U盘(usb类外接设备)的解决办法
首先分析USB无法识别的硬件原因: 1.BIOS禁用了USB设备.(进入BIOS,将"Enable USB Device"修改为"Enable") 2.USB接 ...
随机推荐
- [原][数学][C++][osg]空间向量OA到转到空间向量OB、以及四元素Q1转到Q2的函数
注意:Oa其实在OK的延长线上,上图只是为了好看才把Oa和OK分开了 算法需求如图所示: 已知空间向量OA和空间向量OB 我想算出OA向OB按某角度或者某时间移动 变成空间向量Oa的算法 先说废话:我 ...
- python 正则表达式规则收集
python正则表达式基本元字符 . 通配符,匹配所有字符 ^abc 匹配以abc开始的字符串 abc$ 匹配以abc结尾的字符串 [abc] 匹配字符集合 [A-Z0-9] 匹配字符范围 ...
- 力扣(LeetCode)219. 存在重复元素 II
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k. 示例 1: 输入: nums = ...
- RNN生产唐诗
1. 项目的RNN模型: 项目中的输入x是这样的:
- python中的break\return\pass\continue用法
continue: def func(): for i in range(1,11): if i % 2 == 0: continue # 作用是当符合上面的if判语句后,就直接跳过之后的语句,也就是 ...
- Bayesian generalized linear model (GLM) | 贝叶斯广义线性回归实例
一些问题: 1. 什么时候我的问题可以用GLM,什么时候我的问题不能用GLM? 2. GLM到底能给我们带来什么好处? 3. 如何评价GLM模型的好坏? 广义线性回归啊,虐了我快几个月了,还是没有彻底 ...
- 单分子荧光原位杂交(smFISH)
single-molecule RNA fluorescence in situ hybridization (RNA smFISH) 单分子荧光原位杂交(smFISH)是一种新的基因表达分析方法,能 ...
- 解决IIS7虚拟目录出现HTTP 错误 500.19(由于权限不足而无法读取配置文件)的问题
今天在windows 7笔记本上搭建一个ASP.NET网络平台,启动IIS 7 时候出现错误: 错误摘要HTTP 错误 500.19 - Internal Server Error无法访问请求的页面, ...
- Vue.js表单校验;动画指令;避免内存泄露。
Vue.js表单校验: 动画指令:创建自定义的滚动指令. 避免内存泄露. 避免内存泄露 在单页面应用开发时SPA,用户无需刷新浏览器.所以javascript应用需要自行清理组件来防止内存占用不断增长 ...
- canvas学习之小球动画
项目地址:http://pan.baidu.com/s/1skZGPgL 最近学习使用canvas做动画效果,主要原理就是创建一个小球对象,然后小球对象有一个moveball方法,每次让小球沿着随机路 ...