文章目錄
- 前言
- 休眠流程
- 定時喚醒功能
- 總結
前言
開發SBC時非常重要的一環就是開發休眠流程,其目的是為了保證接KL30的ECU在休眠模式下盡可能小的消耗低壓蓄電池的電量,防止車輛放置長時間后出現虧電。而定時喚醒功能在部分ECU中會有需求休眠后定期對車輛狀態進行檢查。本文介紹TLE9471的休眠流程及定時喚醒的配置
休眠流程
9471進入低功耗模式流程如下:
首先清除喚醒源,然后進入Sleep模式
模式切換寄存器為M_S_CTRL
如果需要SWK(PN喚醒),還需要配置相關的寄存器
示例代碼如下:
清除喚醒標志
Tle94xx_Send_Frame(Tle94xx_SendPackage(TLE94x1_WK_STAT_0_REG_ADDR,0x00u)); /* clear wake up state for WK_STAT_0 */
Tle94xx_Send_Frame(Tle94xx_SendPackage(TLE94x1_WK_STAT_1_REG_ADDR,0x00u)); /* clear wake up state for WK_STAT_1 */
設置睡眠模式
TLE94x1_InitReg_Config.M_S_CTRL.B.VCC1_RT = SBC_VCC1_RT_VRT1;
TLE94x1_InitReg_Config.M_S_CTRL.B.VCC1_OV_RST = SBC_VCC1_OV_RST_RESTART_FAILSAFE;
TLE94x1_InitReg_Config.M_S_CTRL.B.VCC2_ON = SBC_VCC2_OFF;
TLE94x1_InitReg_Config.M_S_CTRL.B.MODE = SBC_MODE_SLEEP;Tle94xx_Send_Frame(Tle94xx_SendPackage(TLE94x1_M_S_CTRL_REG_ADDR,TLE94x1_InitReg_Config.M_S_CTRL.R)); /* enter sleep mode */
定時喚醒功能
9471定時喚醒(周期喚醒)配置流程如下:
通過WK_CTRL_0寄存器使能周期喚醒功能,通過TIMER_CTRL寄存器配置喚醒的周期
示例配置如下:
static void Tle94x1_CycWakeup_set(void)
{TLE94x1_InitReg_Config.WK_CTRL_0.B.TIMER_WK_EN = WK_CTRL_0_TIMER_WK_EN_WAKESOURCE;TLE94x1_InitReg_Config.TIMER_CTRL.B.TIMER_ON = SBC_TIMER_ON_20MS;TLE94x1_InitReg_Config.TIMER_CTRL.B.TIMER_PER = SBC_TIMER_PER_1000S;Tle94xx_Send_Frame(Tle94xx_SendPackage(TLE94x1_TIMER_CTRL_REG_ADDR,TLE94x1_InitReg_Config.TIMER_CTRL.R));
Tle94xx_Send_Frame(Tle94xx_SendPackage(TLE94x1_WK_CTRL_0_REG_ADDR,TLE94x1_InitReg_Config.WK_CTRL_0.R));
}
此處配置的喚醒周期為1000s,在進入休眠模式前調用該函數即可。
總結
對于不同的喚醒方式,需要知道對應的喚醒原因,以便APP做對應的邏輯,在9471中,可以在初始化時通過WK_STAT_0寄存器獲取喚醒原因,一般就是硬線喚醒/網絡喚醒/周期喚醒。