搜索

讨教一下如何在android关机之后切断板子的供电

[复制链接]
510|23
 楼主 | 2019-12-20 14:19 | 显示全部楼层 | 奖励家园币|阅读模式
现在手里有一块imx6的板子,要实现低电量关机的功能,在android层已经实现,但关机之后板子就又重启了。目前板子没有开关机键,只能通过插拔电源关机,一上电就启动系统。我猜测是不是因为低电量关机之后,因为没有拔掉电源,所以板子又起来了。

问题:求解有什么方法可以在android低电量关机之后切掉电源,即使有电源也不重启。
下面是关机之后重启的一段log:(设置的85%电量关机)
lu===== wyc =====size:2, val:85
sysrq: SysRq : Emergency Remount R/O
EXT4-fs (mmcblk3p6): re-mounted. Opts: (null)
EXT4-fs (mmcblk3p4): re-mounted. Opts: (null)
EXT4-fs (mmcblk3p5): re-mounted. Opts: (null)
Emergency Remount complete
imx2-wdt 20bc000.wdog: Device shutdown: Expect reboot!
reboot: Power down
Unable to poweroff system
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000

Rebooting in 5 seconds..

使用特权

评论回复

评论

SPR—— 2019-12-20 15:15 回复TA
现在发现在kernel_imx/drivers/power/reset/syscon-poweroff.c中打印了Unable to poweroff system这个log,感觉这个应该是没有成功关机的意思 
| 2019-12-20 21:20 | 显示全部楼层 | 奖励家园币
数字的搞不来,不过从原理分析上我的推论是:当单片机工作即使是低电量状态下工作都相当于是电源的一个负载,触发低电量关机后,系统不再耗电,那么电源(你这个电源是不是电池一类储能的?)会恢复一部分电压,而这个恢复的部分如能触发启机电压,就会导致重启。解决的办法可以提高启机电压 (针对储能类)

使用特权

评论回复
 楼主 | 2019-12-21 09:55 | 显示全部楼层 | 奖励家园币
晓默儿 发表于 2019-12-20 21:20
数字的搞不来,不过从原理分析上我的推论是:当单片机工作即使是低电量状态下工作都相当于是电源的一个负载 ...

嗯,有道理,我这边的电源是一个锂电池,为了实现低电量关机功能我也没有特意等到电池电压很低,直接设置android上层判断的标准,85%就关机了,昨天查资料,那个log报错就是内核里面的关机函数,今天再看看,另外昨天晚上请教硬件工程师,硬件上面因为电路和芯片问题没有办法实现硬件断电关机,不知道这对软件关机有没有影响

使用特权

评论回复
| 2019-12-21 10:52 | 显示全部楼层 | 奖励家园币
出现重启是硬件配合不到位,硬件配合的能实现不管你电池多少电压,必须要有充电信号才能恢复供电,用全软件则需要设置滞回参数,但是不可靠,因为内阻大的电池依然会出现反复启动或工作异常

使用特权

评论回复
 楼主 | 2019-12-21 15:12 | 显示全部楼层 | 奖励家园币
一事无成就是我 发表于 2019-12-21 10:52
出现重启是硬件配合不到位,硬件配合的能实现不管你电池多少电压,必须要有充电信号才能恢复供电,用全软件 ...

感谢回复,硬件上配置了一个引脚作为开关机键,长按关机最后也调用了关机函数,也是同样的重启,函数如下:
void syscon_poweroff(void)
{      
        /* Issue the poweroff */
        regmap_write(map, offset, mask);
        
        mdelay(1000);
        
        pr_emerg("Unable to poweroff system\n");
}

照这么看来,所有关机的流程最后都要调用关机函数,然后都要打印出这个错误信息,是不是这个产品本身就关不了机啊

使用特权

评论回复
| 2019-12-21 20:04 | 显示全部楼层 | 奖励家园币
SPR—— 发表于 2019-12-21 09:55
嗯,有道理,我这边的电源是一个锂电池,为了实现低电量关机功能我也没有特意等到电池电压很低,直接设置 ...

硬件上没办法实现关机?这个我很好奇,你的开机时序和关机时序是怎么设计的,譬如说,当前已经关机了,你要怎么再次让它启机正常工作呢,按你的假设,一旦关机软件也要进入掉电状态,而不是休眠,那么要想它再次启机只能靠硬件触发吧,所以你这个硬件触发电路应该是带锁功能才行。

使用特权

评论回复
| 2019-12-22 01:20 | 显示全部楼层 | 奖励家园币
SPR—— 发表于 2019-12-21 15:12
感谢回复,硬件上配置了一个引脚作为开关机键,长按关机最后也调用了关机函数,也是同样的重启,函数如下 ...

你还缺乏一个自锁能力,所以才会出那个问题

使用特权

评论回复
 楼主 | 2019-12-23 09:07 | 显示全部楼层 | 奖励家园币
晓默儿 发表于 2019-12-21 20:04
硬件上没办法实现关机?这个我很好奇,你的开机时序和关机时序是怎么设计的,譬如说,当前已经关机了,你 ...

我这个调试一般插上电就起来了,平时没用过关机键,软件关机也没试过,现在搞了一个低电量关机就出问题了。硬件上面工程师说电路无论如何都能供电,硬件上没法关机

使用特权

评论回复
 楼主 | 2019-12-23 10:11 | 显示全部楼层 | 奖励家园币
一事无成就是我 发表于 2019-12-22 01:20
你还缺乏一个自锁能力,所以才会出那个问题

是硬件电路吗?硬件的话我不是太懂,当前的状态来看,设置硬件io为关机键,用硬件关机和android里面调用低电量关机,出来的现象是一样的,同样的log信息,同样的重启。

使用特权

评论回复
| 2019-12-23 11:33 | 显示全部楼层 | 奖励家园币
SPR—— 发表于 2019-12-23 10:11
是硬件电路吗?硬件的话我不是太懂,当前的状态来看,设置硬件io为关机键,用硬件关机和android里面调用 ...

你是要全部掉电还是保留核心部分工作,工况不同设计理念方式方法不同

使用特权

评论回复
 楼主 | 2019-12-23 11:57 | 显示全部楼层 | 奖励家园币
一事无成就是我 发表于 2019-12-23 11:33
你是要全部掉电还是保留核心部分工作,工况不同设计理念方式方法不同

我只是想实现低电量关机,跟手机的功能一样,能实现这个就好。之前是因为关机失败重启,所以才考虑怎样才能关机断电。

使用特权

评论回复
| 2019-12-23 15:27 | 显示全部楼层 | 奖励家园币
boot启动过程中检测电池电压,电压不够,就不启动

使用特权

评论回复
| 2019-12-23 15:28 | 显示全部楼层 | 奖励家园币
直接uboot哪里花100ms多检测几次检测电压,不够就不启动

使用特权

评论回复
| 2019-12-23 15:30 | 显示全部楼层 | 奖励家园币
比如,运行低于85%关机,那么uboot那里低于90%就比不启动,具体参数,实际调试

使用特权

评论回复
| 2019-12-23 15:44 | 显示全部楼层 | 奖励家园币
另外,硬件那里是可以做低压关断的,你们硬件要不是不会,要么是懒得做

使用特权

评论回复
| 2019-12-23 17:50 | 显示全部楼层 | 奖励家园币
SPR—— 发表于 2019-12-23 11:57
我只是想实现低电量关机,跟手机的功能一样,能实现这个就好。之前是因为关机失败重启,所以才考虑怎样才 ...

那个好做,甚至你现在什么都不需要加硬件,软件处理,处理如下:
欠压关机后设置一个标志位变量,必须有电源输入才能清除这个标志变量,这个变量存在不管你电池电压多少都不能启动。
方法二:设置一个滞后回电压,并用标志变量计数,反复多少次后不再启动,必须要有充电电压输入才能清除重新开始。这样做的目是紧急关头有速效救心丸的功效,有外界通信则附带欠压信号输出,告知后台

使用特权

评论回复
 楼主 | 2019-12-23 17:51 | 显示全部楼层 | 奖励家园币
七颗咖啡豆 发表于 2019-12-23 15:44
另外,硬件那里是可以做低压关断的,你们硬件要不是不会,要么是懒得做 ...

这算是偷懒的方法吧,本来走到关机函数,出错没有关机,重启了,这时候在uboot里面检测电压,不够就不让它起来。老哥知道这部分相关代码在哪里吗,我网上没搜到资料,我用的是飞思卡尔的imx6

使用特权

评论回复
 楼主 | 2019-12-23 17:58 | 显示全部楼层 | 奖励家园币
一事无成就是我 发表于 2019-12-23 17:50
那个好做,甚至你现在什么都不需要加硬件,软件处理,处理如下:
欠压关机后设置一个标志位变量,必须有 ...

哦~,老哥你这思路我明白了,这判断标志位在内核的关机函数里面设置,然后在uboot启动初期检测一下,有标志就直接return掉,不开机就行了,我想办法看看能不能实现

使用特权

评论回复
| 2019-12-23 18:02 | 显示全部楼层 | 奖励家园币
SPR—— 发表于 2019-12-23 17:58
哦~,老哥你这思路我明白了,这判断标志位在内核的关机函数里面设置,然后在uboot启动初期检测一下,有标 ...

一定能实现,我就是那么干的,为了克服误触发,只保留有效的几个要求即可,其它的多重判断即可

使用特权

评论回复
| 2019-12-24 09:13 | 显示全部楼层 | 奖励家园币
SPR—— 发表于 2019-12-23 17:51
这算是偷懒的方法吧,本来走到关机函数,出错没有关机,重启了,这时候在uboot里面检测电压, ...

自己修改uboot,这种代码哪能搜得到

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /4 下一条

在线客服 快速回复 返回顶部 返回列表