一、休眠唤醒硬件设置 1.1 开发环境 使用的硬件平台是 Semidrive 官方的 G9X 开发板,软件版本是 G9 PTG4.9。 本次我们介绍的是用 CAN 唤醒板端,我们先来看一下开发板关于唤醒这块的原理图是怎样的: 从原理图可以看出,CAN1_INH 脚连到了 G9X WAKE0 脚,连到 WAKE0 脚的同时还有 3 个 ETH 管脚和 1 个 LIN 管脚。唤醒的原理是这样的:如果设置 WAKE0 为高电平触发,当系统休眠前,连到 WAKE0 的管脚都应该进入低电平状态使 2.1 休眠 APP 在 Freertos 这边有一个叫做 sleep 的app 位于 yocto\source\lk_safety\application\test\sleep ,它的原理是这样子: ⑤ 根据 WAKE0 是低电平触发还是高电平触发对 WAKE0 电平进行设置。 ⑥ 下电休眠 其中的 4 个输入参数,en_wk0 代表是否使能 WAKE0,wk0_level 代表 WAKE0 是高电平触发还是低电平触发,en_wk1 和 wk1_level 即是 WAKE1 的设置。 2.2 使用 sleep 进行验证 得知 sleep APP 的原理后,我们直接在 Freertos 进行验证,在串口输入 low_power 1 1 0 0 命令即可,这时奇怪的事发生了,运行 app 后使用万用表测量电压发现根本没有下电,即系统没有进入休眠状态。 3.1 排除问题 根据前面的原理图可以发现,WAKE0 上除了 CAN1_INH 还连接了 ETH 和 LIN 的几个脚,因为我们的 APP 只对 CAN1 进行了休眠操作,这就让人不得不怀疑是不是其他几个脚搞的鬼。于是我就将除了 CAN1_INH 以外的其他脚跟 WAKE0断开。 下面是进入休眠前的功耗: 再次运行 low_power 1 1 0 0 后发现 LED 灯全熄灭了,发现功耗由原来的 464mA 变成了 2mA,说明已经完全进入休眠状态了: 这时候只需要对 CAN1 发送任意一条数据即可唤醒 TLE9252,从而 CAN1_INH 置高,并拉高 WAKE0 使系统唤醒。 参考资料: 【1】《sd004_g9x_ref_a03_sch.pdf》 |