最开始并没有注意到这个问题, 因为从设备拿到手, 用USB Burning Tool刷入潜龙版的安卓4.4.2, 再到运行EmuELEC, Armbian, 再到给Kernel 5.3的Armbian编译RTL8189FTV的驱动, 都还算顺利. 因为Kernel 5.3也差不多搞定了, 开始打安卓的主意, 想看看能不能跑7.x版本的安卓. 固件包下了几个, 要开始刷的时候出了状况, 发现按着reset键再也无法进入USB Burning Mode了.

几经调查, 试了另外两台一样已经刷过的R3300L, 百度上查类似的案例, 发现其他人也存在这种情况. 而且网友们提供的处理方法(4R19接地)完全无效.

于是开始研究UBOOT

这个设备跑过的系统不外乎潜龙的安卓4.4.2, 以及各种版本的EmuELEC, 各种版本的Armbian, 通过查资料, 发现Linux下面的fw_printenv和fw_setenv命令可以查看及修改UBOOT下的配置. EmuELEC下可以直接运行, 但是在高版本的Armbian下, 仅有可执行文件, 缺/etc/fw_env.config, 于是又查资料找到了对应S905L的config.

通过分析UBOOT的配置, 可以确认EmuELEC和Armbian都会对UBOOT配置进行修改, 但是它们的修改只是在bootcmd里加东西, 加上从sdcard和usb启动的方法, 不应该会影响到组合键.

于是将其中一台焊上了TTL线座, 翻出来以前买的PL2303的USB串口线. 连的过程也是各种摸石头过河. 首先是TX和RX的连线, 尝试几次后确定是PL2303的TX和RX分别接盒子的RX, TX. 然后是VCC线, 每次一连接, 盒子就上电启动了, 根本没法主动观察启动过程, 于是把VCC和GND拔掉, 这下不会自己启动了, 但是启动后看到的全是方块状乱码, 最终是VCC不连, 只连GND, 才算又不自己启动, 又能显示正常.

观察UBOOT的启动日志发现, 按不按reset键, 连不连HDMI, 启动日志基本完全一样.

其中一行"Hit any key to stop autoboot:  0"给我造成了很大困惑, 因为不管怎么敲Enter键, 都不会进入UBOOT命令行, 我怀疑是因为这个0, 导致无法停下来. 查阅资料, 发现有个配置项bootdelay, 于是从0改成了5, 发现根本不起作用, UBOOT还是一路狂飙不停下来, 又查资料, 发现还有用Ctrl+C的, 再试依然无效. 再查资料, 发现还有用空格键的, 这个起作用了, 只要拍空格键, 就能进入UBOOT

继续查资料, 发现还有个配置项叫 upgrade_key , 这个值是 "if gpio input GPIOH_6; then echo detect upgrade key; sleep 3; run update;fi;" 在日志中有这么一行"gpio: pin GPIOH_6 (gpio 55) value is 1", 凭借着曾经做过一些电路的经验感觉这个不对. 如果reset键输入是GPIOH_6, 那么在按下的时候肯定处于接地状态, 不可能是高电平, 所以这行日志对应的就是upgrade_key当中 gpio input GPIOH_6 这行执行的结果, 并没有检测到reset键按下的状态, 所以可以说是GPIOH_6这个写错了.

要找正确的gpio pin该怎么办呢? 又查资料, 发现 gpio status -a 这个命令可以显示所有的gpio状态, 这就好办了, 在reset键未按下和按下两个状态下, 分别执行一下这个命令, 把输出的结果对比一下就出来了, 得到的正确pin是GPIOAO_2, 在按下前是GPIOAO_2: input: 1 [ ], 在按下之后变成了 GPIOAO_2: input: 0 [ ]

再通过fw_setenv将正确的值设上

fw_setenv upgrade_key "if gpio input GPIOAO_2; then echo detect upgrade key; sleep 3; run update;fi;"

.按住reset重启, 就可以观察到usb burn的状态了.

解决这个问题断断续续花了我大概三天时间, 从周五到周日, 可能对于对于专业选手很简单, 但对于我很多是新事物, 要慢慢摸索.

R3300L按reset键无法进入USB Burning模式的问题分析的更多相关文章

  1. 关于键盘冲突那点事(3键冲突/7键冲突/PS2/USB的各种原理)

    转自关于键盘冲突那点事(3键冲突/7键冲突/PS2/USB的各种原理) 最近闲得无聊,正好看到有人发帖提问,于是就来详细说说所谓键位冲突和无冲突的各种原理--基本上这也是个老生常谈的话题了,但相关的技 ...

  2. 850 USB 烧录模式

    /************************************************************************* * 850 USB 烧录模式 * 说明: * 本文 ...

  3. OPPO realme 2在哪里打开Usb调试模式的简单步骤

    每当我们使用PC通过数据线链接到安卓手机的时候,如果手机没有开启USB调试模式,PC则没能成功识别我们的手机,这时我们需要找解决方法将手机的USB调试模式开启,下文我们记录一下OPPO realme ...

  4. OPPO K3在哪里打开USB调试模式的完美方法

    当我们使用pc链接安卓手机的时候,如果手机没有开启USB调试模式,pc则无法成功识别我们的手机,这个时候我们需要找解决方法将手机的USB调试模式打开,今天我们介绍OPPO K3如何开启USB调试模式的 ...

  5. (详细)华为Mate7 MT7-TL00的usb调试模式在哪里开启的步骤

    就在我们使用pc连接安卓手机的时候,如果手机没有开启usb调试模式,pc则不能够成功识别我们的手机,在一些情况下,我们使用的一些功能较好的工具好比之前我们使用的一个工具引号精灵,老版本就需要打开usb ...

  6. OPPO A7x在哪里开启usb调试模式的详细经验

    当我们使用Pc连接安卓手机的时候,如果手机没有开启Usb调试模式,Pc则没法成功读到我们的手机,这时我们需要想办法将手机的Usb调试模式开启,这里我们讲解OPPO A7x如何开启Usb调试模式的方法. ...

  7. (最完美)MIUI12系统的Usb调试模式在哪里开启的步骤

    当我们使用安卓手机通过数据线链接到Pc的时候,或者使用的有些app比如我们公司营销小组当使用的app引号精灵,之前的老版本就需要开启usb调试模式下使用,现当新版本不需要了,如果手机没有开启usb调试 ...

  8. (简单)华为Nova青春 WAS-AL00的USB调试模式在哪里开启的流程

    就在我们使用Pc接通安卓手机的时候,如果手机没有开启usb开发者调试模式,Pc则无办法成功检测到我们的手机,在一些情况下,我们使用的一些功能较强的app好比之前我们使用的一个app引号精灵,老版本就需 ...

  9. OPPO A3在哪里打开usb调试模式的详细教程

    当我们使用电脑通过数据线连接上安卓手机的时候,如果手机没有开启Usb开发者调试模式,电脑则无办法成功读到我们的手机,这时我们需要找方法将手机的Usb开发者调试模式打开,这里我们叙述OPPO A3如何开 ...

随机推荐

  1. Android-----解析xml文件的三种方式

    SAX解析方法介绍: SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备.SAX解析XML文件采用的是事件驱动,也就是说, ...

  2. GoLang 中用 MongoDB Watch 监听指定字段的变化

    需要 MongoDB 3.6 及以上, 需要 ReplicaSet 模式. 监听一个字段的变化: func watch(coll *mongo.Collection) { match := bson. ...

  3. 使用composer命令加载vendor中的第三方类库

    1.首先下载需要的第三方类库,放在TP框架下的vendor文件夹下 2.给第三方类库SDK写上命名空间,命名空间为该类库的文件夹对应的名字 3.在composer.json文件中添加需要加载的第三方类 ...

  4. Django之 RESTful规范

    RESTful 规范 一.什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为"表征 ...

  5. zabbix--基础概念及原理

    zabbix 基础概念及工作原理整理 什么是 zabbix? Zabbix 能监控各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位.解决存在的各种问题.是一个基于 W ...

  6. 基于SCRUM方法实践的西油计科党建设计与实现

    基于SCRUM方法实践的西油计科党建设计与实现 序言 所属课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesig ...

  7. python应用-输入分数 输出最高分数对应的名字

    def main(): names = ['刘备', '张飞', '曹操', '袁绍', '关羽', '赵云', '周瑜'] scores=[] num=0 m=0 for name in names ...

  8. 运行 npm run lint -- --fix,提示:error Use the global form of 'use strict'

    运行 npm run lint -- --fix,提示:error Use the global form of 'use strict',使用说明网址:https://eslint.org/docs ...

  9. iOS 图像渲染原理

    http://chuquan.me/2018/09/25/ios-graphics-render-principle/ 通过 图形渲染原理 一文,大致能够了解图形渲染过程中硬件相关的原理.本文将进一步 ...

  10. python--递归函数讲解

    递归算法是一种直接或间接调用自身算法的过程. 递归算法解决问题的特点: (1)递归就是在过程或函数里调用自身 (2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口. (3)递归算法解题通 ...