奇怪!power key与PMIC的home key 在手机死机时同时按下不实现复位
但是当系统真正的死掉了,
长按这两个按键不能复位。
这两个键不都是硬件完成的吗?
为何在系统死掉后,他按进来就没有反映呢?
MT6515+MT6329
我一直至想做这个实验,但是都等不到死机那刻。另,还有一个专门的reset键可用。
好象这里软件也要设置吧 有几种组合形式
还有一个可能的原因,power+home 两个键MT6329有专门的引脚,是不是一定要这样连接才有你需要的功能?如果HOME不是直接重MT6239接出,你可以试着改成单独长按power键实现复位。祝你成功
是用PMIC上的按键的。
两种方式都验证过。
如果系统没有HOLD时,长按这两个键,是可以复位的。
但是如果已经死机了,这两个键就无法复位了。
FAQ的文档是这么说的:
当系统hang住时,Watchdog_RESET_B会输出低给MT6329,进行reset,具体reset方式请参考 design note v0.4.
外部通过Powerkey+Homekey搭配可以强制复位.
很明显,后面指的是系统未hang时,进行的强制复位.
这么说,是不是等于系统真被hold住,你按什么都没有意义了,只能等看门狗实现reset。换就换说,没有reset,是因为没有hold住,按键一定有效,reset必定可以实现?
MTK可能最新的软件已经解决了,我们用的是比较老的软件,所以有我说的这个问题。
就是软件死了,按power key与HOME键是可以实现reset后重启的。
按power key与HOME键软件怎么实现的,我的就不行呀,要改 reg 吗?
硬件掉电的方案有三种:
1. 单独按power key
2. 单独按home key
3. 组合键:power key + home key
硬件掉电重启分为两个步骤:先掉电,然后重启。所以如果您只单独设置为用home key来掉电,系统掉电之后,不会重启。因此,如果您按这些键的时间掌握的好的话,您会发现系统会掉电,不会重启。
建议使用方案1和方案3,下面将列举方案1和方案3的设置:
方案1:
1)preloader的设置:
(1).您可以在preload里面对该寄存器进行设置。 时间默认是8s——>这个时间只是掉电的时间,8s之后系统会掉电。如果要让系统重新启动,您需要多按2s。
请在alps\mediatek\platform\mt657*\preloader\src\drivers\Mt657*_pmic6329.c 文件中加入如下函数:
int hard_interrupt_reset(){
U8 chip_slave_address = 0xC2;
U8 cmd = 0x0C;
int cmd_len = 1;
U8 data = 0xFF;
int data_len = 1;
U32 result_tmp;
U8 val=0x1;
U8 MASK=0x1;
U8 SHIFT=0x4;
result_tmp = pmic6329_i2c_read(chip_slave_address, &cmd, cmd_len, &data, data_len);
data &= ~(MASK << SHIFT);
data |= (val << SHIFT);
result_tmp = pmic6329_i2c_write(chip_slave_address, &cmd, cmd_len, &data, data_len);
return result_tmp ;
}
(2).然后在int hw_check_battery(void)这个函数中变量后面调用该函数。
这样在uboot里面硬件掉电就会起作用的。
2)kernel的设置:
mediatek\platform\mt657*\kernel\drivers\keypad\kpd.c
the definition is as below:
#ifdef KPD_PMIC_LPRST_TD
upmu_testmode_pwrkey_rst_en(0x01); //enable pwrkey
upmu_testmode_homekey_rst_en(0x0); //disable homekey
upmu_testmode_pwrkey_rst_td(KPD_PMIC_LPRST_TD); /tting timer,default 5s
3)请修改 mediatek\platform\mt657*\preloader\src\drivers\mt657*_key.c 中 mt657*_detect_key()如下:
if(get_pmic6329_chip_version() == PMIC6329_E2_CID_CODE)
{
pmic_read_interface(0x15, &just_rst, 0x01, 0x07);
if(0) //=======Modify this line=========
{
printf("Just recover from a reset, bootup anyway\n");
return true;
}
}
方案3:
1)preloader的设置:
设置步骤与方案1一样,只是需要修改如下参数:
U8 val=0x3;
U8 MASK=0x3;
U8 SHIFT=0x3;
2)kernel的设置:
与方案1的区别设置如下:
upmu_testmode_homekey_rst_en(0x01); //enable homekey
其他的设置一样。
3)设置与方案1相同。
奇怪!power key与PMIC的home key 在手机死机时同时按下不实现复位