一、休眠唤醒硬件设置
1.1 开发环境
使用的硬件平台是 Semidrive 官方的 G9X 开发板,软件版本是 G9 PTG4.9。
1.2 休眠唤醒原理
本次我们介绍的是用 CAN 唤醒板端,我们先来看一下开发板关于唤醒这块的原理图是怎样的:
从原理图可以看出,CAN1_INH 脚连到了 G9X WAKE0 脚,连到 WAKE0 脚的同时还有 3 个 ETH 管脚和 1 个 LIN 管脚。唤醒的原理是这样的:如果设置 WAKE0 为高电平触发,当系统休眠前,连到 WAKE0 的管脚都应该进入低电平状态使
WAKE0 置低,休眠后当其中某个管脚输出高电平后,WAKE0 会被其拉高,从而唤醒 CPU。
二、休眠唤醒验证
2.1 休眠 APP
在 Freertos 这边有一个叫做 sleep 的app 位于 yocto\source\lk_safety\application\test\sleep ,它的原理是这样子:
① CAN1 的收发芯片用的是 TLE9252,前面提到在系统秀面前 CAN1_INH 应该置低,所以需要使 TLE9252 先进入休眠状态。TLE9252 的状态是由 EN 和 NTSB 两个脚控制,这两个脚是由拓展 IO TCA9539 控制,所以第一步是先通过配置
TCA9539 使 CAN1 休眠,从而拉低 CAN1_INH。
② Rtc 时钟资源分配到 Safety ,以便后面唤醒直接控制时钟进行初始化。
③ 关闭晶振,关闭上电复位功能。
④ 使能 WAKE0 管脚。
⑤ 根据 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断开。
3.2 再次验证
下面是进入休眠前的功耗:
再次运行 low_power 1 1 0 0 后发现 LED 灯全熄灭了,发现功耗由原来的 464mA 变成了 2mA,说明已经完全进入休眠状态了:
这时候只需要对 CAN1 发送任意一条数据即可唤醒 TLE9252,从而 CAN1_INH 置高,并拉高 WAKE0 使系统唤醒。
参考资料:
【1】《sd004_g9x_ref_a03_sch.pdf》
评论