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大小

  1. key->key.adc.index = ;
  2. key->key.adc.keyValueLow = ;
  3. key->key.adc.keyValueHigh= ;
  4. key->key.adc.data = SARADC_BASE;
  5. key->key.adc.stas = SARADC_BASE+;
  6. key->key.adc.ctrl = SARADC_BASE+;
  7. typedef struct
  8. {
  9. uint32 index;
  10. uint32 keyValueLow;
  11. uint32 keyValueHigh;
  12. uint32 data;
  13. uint32 stas;
  14. uint32 ctrl;
  15. }adc_conf;

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

  1. for(tt = ; tt < ; tt++)
  2. {
  3. // read special gpio port value.
  4. uint32 value;
  5. uint32 timeout = ;
  6. /*
  7. 控制寄存器清零
  8. 初始化状态
  9. */
  10. write_XDATA32( adc->ctrl, );
  11. DRVDelayUs();
  12. /*
  13. 写入 0x0028| 1=0x29
  14. 第0 3 5 bit为1
  15. 0:2为001 表示选择输入源 Input source 1 (SARADC_AIN[1])
  16. 第3bit为1 表示ADC电源启动
  17. 第5bit为1 表示开启中断
  18. */
  19. write_XDATA32( adc->ctrl, 0x0028|(adc->index));
  20. DRVDelayUs();
  21. do {
  22. /*
  23. 接下来读取控制寄存器如果第6bit为0那么持续读取,直到第6bit为1
  24. 6bit是中断状态位,当转换结束以后会被设置为1,设置为0表示清除中断
  25. */
  26. value = read_XDATA32(adc->ctrl);
  27. timeout++;
  28. } while((value&0x40) == );
  29. /*
  30. 前面的操作就是设置好输入源开启中断这些并开始转换。
  31. 然后等待转换结束
  32. 使用read_XDATA32(adc->data)读取数据
  33. adc->data得到的是最后一次AD转换的值
  34. */
  35. value = read_XDATA32(adc->data);
  36. //printf("adc key = %d\n",value);
  37. //DRVDelayUs(1000);
  38.  
  39. /*
  40. 如果最后一次AD转化的值处于keyValueLow和keyValueHigh之间。
  41. 表明电源被接通。计数器+1
  42. keyValueLow和keyValueHigh控制着不同的按键类型?
  43. */
  44. if( value<=adc->keyValueHigh && value>=adc->keyValueLow)
  45. hCnt++;
  46. }
  47. /*
  48. 清空初始化状态
  49. 如果10次里面有8次接通,那么说明电源按钮被按下。返回1
  50. */
  51. write_XDATA32( adc->ctrl, );
  52. return (hCnt>)

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

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

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

Uboot USB模式(RK3288变砖头的解决办法)的更多相关文章

  1. Response.Write()方法响应导致页面字体变大的解决办法

    关于ASP.NET中用Response.Write()方法响应导致页面字体变大的解决办法     最近研究了ASP.NET,发现一个问题,比方说在页面里面有个Button,要点击以后要打开新窗口,而且 ...

  2. 直接端口打印 支持USB接口的打印机吗?解决办法

    直接端口打印 支持USB接口的打印机吗?解决办法 www.MyException.Cn  网友分享于:2013-09-15  浏览:488次       直接端口打印 支持USB接口的打印机吗?问题如 ...

  3. html标签被div嵌套页面字体变大的解决办法

    html标签被div嵌套页面字体变大的解决办法 <div> <html> <head> <title></title> </head& ...

  4. zynq中uboot的qspi启动报错及解决办法

    问题描述: 用u-boot-xlnx-v2016.3版本编译的uboot通过qspi flash启动出现如下错误: 尝试在uboot命令行输入"sf probe 0 0 0"挂载q ...

  5. python使用xlrd读取excel数据时,整数变小数的解决办法

    python使用xlrd读取excel数据时,整数变小数: 解决方法: 1.有个比较简单的就是在数字和日期的单元格内容前加上一个英文的逗号即可.如果数据比较多,也可以批量加英文逗号的前缀(网上都有方法 ...

  6. eclipse打断点调试进入到class文件中,不显示变量值的解决办法汇总

    每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code 问题描述:eclipse打断点调试进入到class文件中,而且监视区不显示变量结果 是由于对应 ...

  7. Microsoft Office Word 2007 文档结构图突然变小的解决办法

    前记: 一个word文档不知道修改了什么,突然发现文档结构图显示的文字变得非常的小了. 用ctrl+鼠标滚轮只能放大或是缩小行间距,对文字没有什么变化. 解决办法: 1.打开文档结构图 点击视图,勾选 ...

  8. chrome隐身模式无法播放flash的解决办法

    困扰很多天的chrome无法播放flash的问题终于解决了 因为之前一直用隐身模式,一直不能播放flash,重装chrome,重装插件,还是不行 结果今天发现正常模式是可以播放的,所以找了一下chro ...

  9. 电脑无法识别U盘(usb类外接设备)的解决办法

    首先分析USB无法识别的硬件原因: 1.BIOS禁用了USB设备.(进入BIOS,将"Enable USB Device"修改为"Enable") 2.USB接 ...

随机推荐

  1. VC.窗口最前(置顶)

    1.Delphi7的代码 procedure TfrmMain.cbWndTopmostClick(Sender: TObject); var liExStyle :LongInt; begin // ...

  2. Jmeter 接口测试知识梳理——环境搭建篇

    Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! 环境搭建篇 很多文章介绍 ...

  3. mysql指定编码集

    DROP TABLE app_info CREATE TABLE `app_info` ( `app_id` ) NOT NULL COMMENT '应用ID', `) NOT NULL COMMEN ...

  4. 理解css相邻兄弟选择器

    今天在菜鸟教程看到了css组合选择符的“相邻兄弟选择器”,刚开始对这个概念有些不太理解,通过查阅资料并且经过一些试验总算有了些头绪. 原文解释是“相邻兄弟选择器(Adjacent sibling se ...

  5. 用basicTrendline画一元线性回归直线的置信区间

    感慨统计学都还给老师了..恶补! R安装包的时候貌似需要用管理员权限启动,否则安装不了,国内镜像卡得渣渣,还是国外镜像真香~选择hongkong就好了. install.packages(" ...

  6. go 圣经阅读笔记之-入门

    go 圣经 这本书英文名为 <The Go Programming Language> 1. 简单hello world示例 helloworld.go package main impo ...

  7. ADO.NET介绍2

    一.Connection对象 Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接.所有Connection对象的基类都是DbConnection类. Co ...

  8. 荧光原位杂交技术 RNA-FiSH (fluorescence in situ hybridization)

    通俗理解:带有荧光标记的DNA探针可以用于检测活体内特定基因的表达情况,活体成像. 荧光原位杂交方法是一种物理图谱绘制方法,使用荧光素标记探针,以检测探针和分裂中期的染色体或分裂间期的染色质的杂交.荧 ...

  9. webService上传图片

    webService /// <summary> /// 上传图片webServer 的摘要说明 /// </summary> [WebService(Namespace = ...

  10. POJ-3693/HDU-2459 Maximum repetition substring 最多重复次数的子串(需要输出具体子串,按字典序)

    http://acm.hdu.edu.cn/showproblem.php?pid=2459 之前hihocoder那题可以算出最多重复次数,但是没有输出子串.一开始以为只要基于那个,每次更新答案的时 ...