short press bootup

有部分机器出现短按开机的情况;

为什么会误判

经过SBL log分析,发现SBL中检测按键的ticks计数读取有问题,问题机器,初始读取数已经超过了设定超时时间。从而导致误判为长按键,则开机

 

如上图,正确流程应该是进入while循环,每隔50us去读取一次,直到超时为止;错误的流程则是初始初始读取数超过设定值,直接进入判定;然而判定函数中并没有走判定流程而是直接返回,因此误判。

748: Elapsed tick: 0x1BB1754, Wait tick: 0x36EE800, sdam tick: 0x1D4C00 3000ms

Elapsed tick: 0x1B73424, Wait tick: 0x2DC6C00, sdam tick: 0x1D4C00 2500ms

0x1B73424     28783652     正常的tick数

0x25B3E63     39534179     插上电池等待5分钟的tick数

0x249F000     38400000     2000ms

0x2DC6C00    48000000     2500ms

0x36EE800     57600000     3000ms

这里硬件建议读取真实的PBL中的时间,即从PS_HOLD拉高到这个首次读取的地方,因马达震动与首次读取值几乎同时发生,因此,并不需要在此拉高GPIO来作为判断信号,而直接量取马达的电压即可;如下图2000ms+,与实际读取值一直,刚刚好超过2000ms一点。

 

为什么会超时?

该ticks数值是PBL中读取值;PBL中设定了启动的时序,如下图

 

 

先走FUSE,再走GPIO;FUSE是必选的,首选启动顺序,GPIO是备选顺序;当fuse启动失败,则再次走GPIO启动,当gpio启动失败,则进入9008;如fuse启动成功,则不走gpio;但是fuse如配置为000,则依然要走一次gpio;对于emmc来说,配置为000是最优时间;

gpio的值是硬件复用决定,可能收到外界环境的影响而不确定,通常是固定的。

从log中看,PBL中读取值花费了更多的时间,大概565ms,因此超时。

为何会多花500ms?

对比好的机器与坏的机器,发现好的机器,短按后,GPIO87无抬升,而坏的机器则有抬升

 

 

 

 

 

 

给gpio87加入12k下拉电阻,依然不能解决问题,说明问题不在于此;

后检查mem的物料,发现问题均出现在同一种物料上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YouthTravel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值