基於 S32K344 之 FS26 看門狗操作

關鍵字 :automotiveMCUS32K344FS26 看門狗watch dog

一、FS26 簡介

        FS26 是 NXP 生產的系列汽車安全系統基礎晶片 (SBC),提供多種電源選擇,具有多個開關模式穩壓器和低壓差穩壓器 (LDO) 來支持微控制器,傳感器,外設 IC 和通信接口。它能為系統和跟蹤調節器提供高精度的參考電壓,還能提供多種系統控制和診斷功能,包括模擬多路復用器、通用 I/O 引腳。本文主要介紹 FS26 的 SPI 通信方式下的寄存器讀寫操作。FS26 內部框圖如下:

FS26 內部框圖

二、FS26看門狗介紹

1、窗口看門狗

        FS26 的看門狗屬於窗口看門狗,窗口看門狗分為簡單式和挑戰式窗口看門狗,而本實例所用 FS26 使用的是挑戰式窗口看門狗。

簡單式看門狗的狗食是固定的,而挑戰式看門狗狗食是不固定的
窗口看門狗2、窗口看門狗的窗口周期

       窗口周期分為關窗期和開窗期,而餵狗的有效時間是在開窗期,時間周期可通過 FS26 相關寄存器進行配置,如下圖所示

窗口看門狗的窗口周期

三、FS26挑戰看門狗餵狗原理

       FS26 窗口看門狗是基於與 MCU 的問答過程,通過 LFSR 線性反饋移位寄存器生產一個 16 位隨機數,每當看門狗更新,這個隨機數也會被 FS26 自動更新,這個隨機數可用稱為 Seed,其初始值為默認為 0x5AB2 。

FS26挑戰看門狗餵狗原理

① MCU 讀取新的 Seed (寄存器 FS_WD_TOKEN)。

② MCU 根據公式計算看門狗答覆。

③ MCU 將看門狗答覆寫入 FS26 WD_ANSWER 寄存器。

        ④ FS26 比較兩種結果,如果不相等,表示失敗,看門狗錯誤計數器將加 2,如果該計數器達到其最大值將導致故障安全輸出或復位輸出;如果相等,看門狗窗口再次啟動。

四、FS26看門狗相關配置

        Sbc_fs26_lp組件中進行參數配置,更新到源代碼後將生產相應的結構體數據,用於程序中對FS26初始化

FS26看門狗相關配置

五、程序代碼介紹

1、看門狗配置參數結構體代碼

typedef struct

{

    /*

    * Following registers can be configured:

    *  - FS_I_WD_CFG

    *  - FS_WDW_DURATION

    */

 

#if (FALSE == SBC_FS26_EXTERNAL_WDG_USED)

    /** @brief FS_I_WD_CFG register. */

    Sbc_fs26_WdCfgRegType xWdCfgReg;

    /** @brief FS_WDW_DURATION register. */

    Sbc_fs26_WdwDurationRegType xWdwDurationReg;

#endif /* (FALSE == SBC_FS26_EXTERNAL_WDG_USED) */

  

} Sbc_fs26_InitConfigType;

 

static const Sbc_fs26_InitConfigType sbcInitConfig_VS_0 =

{

   /* FS_I_WD_CFG register */

    {

        SBC_FS26_FS_WD_ERR_LIMIT_6,

        SBC_FS26_FS_WD_RFR_LIMIT_1,

        SBC_FS26_FS_WD_FS_REACTION_RSTB_FS0B

    },

    /* FS_WDW_DURATION register */

    {

        SBC_FS26_FS_WDW_PERIOD_512MS,

        SBC_FS26_FS_WDW_DC_62C_37O,

        SBC_FS26_FS_WDW_RECOVERY_64MS

    },

};

const Sbc_fs26_ConfigType Sbc_fs26_xConfig_VS_0 =


{

    &sbcInitConfig_VS_0,

    SBC_FS26_WD_CHALLENGER,

    0x5AB2U,

    (boolean)TRUE,

    (boolean)FALSE,

    &spiConfig_VS_0,

#if (STD_OFF == SBC_FS26_DISABLE_DEM_ERROR_REPORT)

    &demConfig_VS_0,

#endif /* STD_OFF == SBC_FS26_DISABLE_DEM_ERROR_REPORT */

    NULL_PTR,

#if (FALSE == SBC_FS26_EXTERNAL_WDG_USED)

    NULL_PTR,

#endif /* FALSE == SBC_FS26_EXTERNAL_WDG_USED */

    NULL_PTR

};

 

2、看門狗初始化

將配置結構體的配置參數寫入相應的寄存器

u16WriteData = (uint16) (pSbcFs26ConfigPtr->pInitConfig->xWdCfgReg.u16WdErrLimit |

            pSbcFs26ConfigPtr->pInitConfig->xWdCfgReg.u16WdRfrLimit |

            pSbcFs26ConfigPtr->pInitConfig->xWdCfgReg.u16WdFs);

    eReturnValue |= Sbc_fs26_WriteRegisterInit(SBC_FS26_FS_I_WD_CFG_ADDR, u16WriteData);

 

    u16WriteData = (uint16) (pSbcFs26ConfigPtr->pInitConfig->xWdwDurationReg.u16WdwPeriod |

            pSbcFs26ConfigPtr->pInitConfig->xWdwDurationReg.u16WdwDc |

            pSbcFs26ConfigPtr->pInitConfig->xWdwDurationReg.u16WdwRecovery);

      eReturnValue |= Sbc_fs26_WriteRegisterInit(SBC_FS26_FS_WDW_DURATION_ADDR, u16WriteData);

 

       /* Change to new watchdog token configuration */

eReturnValue |= Sbc_fs26_WdChangeToken(u16WdwToken);

 

3、第一次餵狗並啟動定時器餵狗

  

 eReturnValue |= Sbc_fs26_ReadRegister(TRUE, SBC_FS26_FS_WDW_DURATION_ADDR, &xRxData);

    if ((SBC_FS26_FS_WDW_PERIOD_512MS == (xRxData.u16ReadData & SBC_FS26_FS_WDW_PERIOD_MASK)) && ((Std_ReturnType)E_OK == eReturnValue))

    {

        /* Close initialization phase by sending first watchdog refresh. */

        eReturnValue = Sbc_fs26_WdRefresh();

        if ((Std_ReturnType)E_OK == eReturnValue)

        {

            Stm_Ip_EnableChannel(0, 0);

 

        }

}

 


4、定時器定時餵狗時間到達進行餵狗

   void Stm0_Ch0_Callback(void)

{

Sbc_fs26_WdRefresh();

}

 

 五、參考文獻

PB_FS26.pdf 

S32K3XXRM.pdf



歡迎在博文下方留言評論,我們會及時回復您的問題。

如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com   
作者:小編 z


更多資訊,請掃碼關注我們!


★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論