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

二、FS26看門狗介紹
1、窗口看門狗
FS26 的看門狗屬於窗口看門狗,窗口看門狗分為簡單式和挑戰式窗口看門狗,而本實例所用 FS26 使用的是挑戰式窗口看門狗。
簡單式看門狗的狗食是固定的,而挑戰式看門狗狗食是不固定的
2、窗口看門狗的窗口周期
窗口周期分為關窗期和開窗期,而餵狗的有效時間是在開窗期,時間周期可通過 FS26 相關寄存器進行配置,如下圖所示

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

① MCU 讀取新的 Seed (寄存器 FS_WD_TOKEN)。
② MCU 根據公式計算看門狗答覆。
③ MCU 將看門狗答覆寫入 FS26 WD_ANSWER 寄存器。
④ FS26 比較兩種結果,如果不相等,表示失敗,看門狗錯誤計數器將加 2,如果該計數器達到其最大值將導致故障安全輸出或復位輸出;如果相等,看門狗窗口再次啟動。
四、FS26看門狗相關配置
Sbc_fs26_lp組件中進行參數配置,更新到源代碼後將生產相應的結構體數據,用於程序中對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
更多資訊,請掃碼關注我們!
評論