1.概述
PMIC作為系統的電源管理模塊,其輸入電壓一般會比較高,為保證芯片自身的安全,PMIC芯片會有獨立的安全域,和功能域完全隔離,擁有獨立的電壓和電流輸入,獨立的晶振模塊,內部運行監控狀態機,實時監控芯片的運行狀況,保障芯片的安全和穩定運行,故障安全域需要滿足QM、ASIL B或ASIL D級別的功能安全等級。
2.解決的問題
PMIC的安全域,主要作用是監控系統運行、系統故障恢復,系統運行中,隨時可能出現過壓、欠壓、程序跑飛等各種問題,PMIC的安全域正是為了解決這些問題而發明的,當系統出現這些故障,要根據故障級別,執行對應的故障恢復策略。
下面以VR5510進行詳細分析。
3.VR5510安全域
3.1 系統框圖
3.2 功能模塊
1.初始化
VR5510在電源上電復位或從待機模式或深度睡眠模式喚醒后,RSTB引腳被釋放,故障安全狀態機將進入INIT_FS階段,為各個寄存器寫入值,進行初始化操作。為了確保在INIT_FS期間的寫入過程的安全性,MCU必須對所有INIT_FS寄存器執行以下序列操作:
在FS_I_Register_A(DATA)中寫入所需的數據,在FS_I_NOT_Register_A(DATA_NOT)中寫入FS_I_Register_A數據的一位補碼。
例如,如果FS_I_Register_A = 0xABCD,則必須將0x5432(0xABCD的一位補碼)寫入FS_I_NOT_Register_A。
也就是說,INIT_FS階段,所有INIT_FS相關的寄存器,都存在寄存器和它的互補寄存器。
VR5510實時計算DATA XOR? DATA_NOT的異或結果。如果計算結果為真,則FS_STATES寄存器中的REG_CORRUPT位被設置為0。如果計算結果為假,則REG_CORRUPT位被設置為1。在INIT_FS階段第一次有效的看門狗刷新而關閉后,REG_CORRUPT的監控立即激活。
INIT_FS必須在看門狗窗口超時之前通過第一次有效的看門狗刷新來關閉。窗口持續時間可以通過WD_INIT_TIMEOUT_OTP[1:0]位(CFG_2_OTP寄存器)進行編程。
在INIT_FS關閉后,可以通過設置FS_SAFE_IOS寄存器中的GOTO_INITFS位,從任何其他FS_state狀態重新進入INIT_FS階段。
2.看門狗
看門狗有Simple和Challenger兩種類型,都是帶有窗口的監控。窗口的第一部分被稱為“CLOSED”窗口,而第二部分被稱為“OPEN”窗口。
在“OPEN”窗口期間進行的正確看門狗響應被視為好的看門狗刷新。而壞的看門狗刷新則包括以下幾種情況:在“OPEN”窗口期間進行的錯誤看門狗響應、在“OPEN”窗口期間沒有進行任何看門狗刷新,或者在“CLOSED”窗口期間進行了正確的看門狗響應。
無論是好的還是壞的看門狗刷新之后,都會立即開始一個新的窗口周期,以確保微控制器(MCU)與帶窗口的看門狗保持同步。
首次成功的看門狗刷新會關閉INIT_FS。看門狗窗口繼續運行,MCU必須在看門狗窗口周期的“OPEN”窗口內刷新看門狗。看門狗窗口的持續時間可以通過FS_WD_WINDOW寄存器中的WD_WINDOW[3:0]位進行配置,范圍從1毫秒到1024毫秒。新的看門狗窗口設置將在下一次看門狗刷新后生效。
看門狗窗口只能在INIT_FS階段被禁用。一旦INIT_FS階段關閉,看門狗禁用的操作才會生效。在INIT_FS階段結束后,如果看門狗窗口被禁用,它將不再監控MCU的運行狀態,將無法恢復MCU故障。
Simple看門狗使用了一個獨特的種子值。微控制器(MCU)可以將自己的種子值發送到WD_SEED位字段(FS_WD_SEED寄存器)中,或者它可以使用默認值0x5AB2。這個種子值必須在OPEN看門狗窗口期間寫入到WD_ANSWER位字段(FS_WD_ANSWER寄存器)中。當結果正確時,看門狗窗口會重新啟動。如果結果不正確,WD錯誤計數器會增加,并且看門狗窗口也會重新啟動。
在Simple看門狗配置中,不能將0xFFFF和0x0000的值寫入WD_SEED。如果嘗試寫入0x0000或0xFFFF,則會報告通信錯誤。這是因為這些值可能被看門狗機制用作特殊標記或保留值,以防止意外的配置錯誤。因此,在配置Simple看門狗時,應確保使用有效的種子值,并遵循看門狗機制的規定來刷新看門狗,以確保系統的穩定運行。
Challenger看門狗是基于VR5510和微控制器(MCU)之間的問答交互機制。在INIT_FS階段,VR5510使用線性反饋移位寄存器(LFSR)來生成一個16位的偽隨機數。
MCU可以發送一個不同的LFSR種子,或者使用VR5510默認的LFSR值(0x5AB2)來執行一個預定義的計算。計算結果在OPEN看門狗窗口期間通過I2C接口發送,并由VR5510進行驗證。當結果正確時,看門狗窗口會重新啟動,并生成一個新的LFSR值。如果結果錯誤,WD錯誤計數器會增加,看門狗窗口會重新啟動,但LFSR值不會改變。
在初始化階段(INIT_FS),MCU發送LFSR的種子,或者使用VR5510生成的默認LFSR值(0x5AB2),該值存儲在WD_SEED寄存器中。使用此LFSR,MCU根據以下公式執行一個簡單的計算,并將結果發送到WD_ANSWER寄存器中。
通過這種方式,Challenger看門狗提供了一種比Simple看門狗更高級別的保護,可以防止未經授權的訪問或篡改。如果MCU在OPEN窗口期間無法提供正確的答案,那么看門狗會認為系統可能出現了故障,并采取相應的恢復措施,如重啟MCU。
看門狗錯誤策略適用于Challenger看門狗和Simple看門狗。設備中實現了看門狗錯誤計數器,用于過濾不正確的看門狗刷新。每次發生看門狗失敗時,設備會將計數器增加2。每當看門狗被正確刷新時,錯誤計數器就會減少1。這一原則確保了循環的“OK/NOK”行為最終會收斂到故障檢測上。
為了在應用中提供靈活性,在INIT_FS階段,可以通過FS_I_WD_CFG寄存器中的WD_ERR_LIMIT[1:0]位字段來配置看門狗錯誤計數器的最大值。這樣,開發者可以根據具體的應用場景和需求,設置合適的錯誤計數閾值,以便在檢測到一定數量的錯誤后采取相應的恢復措施。
MCU故障恢復
當MCU通過其FCCU(故障捕獲和糾正單元)引腳觸發故障時,設備會激活FS0B引腳,并將看門狗窗口的持續時間自動轉換為一個開放窗口狀態,即在此期間不再受原有的占空比限制。這個開放窗口的持續時間在INIT_FS(故障安全初始化)階段可以通過FS_WD_WINDOW寄存器中的WDW_RECOVERY[3:0]位字段進行配置。
3.FCCU監控
FCCU(故障捕獲和糾正單元)的負責監測來自MCU的硬件故障。這些輸入引腳可以按對配置,也可以作為單獨獨立的輸入。一旦INIT_FS通過第一個有效的看門狗刷新信號關閉,FCCU的監測功能就會立即激活。
4.電壓監視器
負責監測VCOREMON、HVLDO、VDDIO以及VMON1/2/3/4輸入引腳上的過壓和欠壓情況。當這些引腳中任何發生過壓時,相關的穩壓器將被關閉,直到故障被清除。電壓監測功能在FS_ENABLE=1時立即激活。故障發生時,會報告欠壓(UV)和過壓(OV)標志。
電壓監視器能夠實時地檢測和處理電源供應中的異常情況,從而保護微控制器和其他敏感電路免受損壞。當檢測到過壓或欠壓時,電壓監視器可以通過關閉受影響的穩壓器來防止進一步的損害,并等待故障被修復后再重新啟用穩壓器。同時,通過報告UV/OV標志,VR5510還可以向MCU提供關于電源狀態的信息,以便MCU處理故障。
5.故障管理
R5510集成了一個可配置的故障錯誤計數器,用于統計與設備本身相關的故障數以及與外部事件相關的故障數,包括過壓、欠壓、FCCU、看門狗刷新錯誤。故障錯誤計數器具有兩個輸出值:中間值和最終值。中間值可以根據FS_I_FSSM寄存器中FLT_ERR_IMPACT[1:0]位字段的配置,用于強制激活FS0B(故障安全信號0)或生成RSTB(復位信號)脈沖。
當故障錯誤計數器記錄到中間值時,系統可以根據FLT_ERR_IMPACT[1:0]的設置來決定是觸發FS0B以啟動故障安全機制,還是發送RSTB脈沖來復位系統。
在正常工作狀態下,當FS0B和RSTB被釋放時,如果VR5510的故障安全狀態機檢測到故障,則故障錯誤計數器會增加。如果未將故障配置為斷言RSTB和FS0B,則不會增加故障錯誤計數器的值。在這種情況下,僅提供標志供微控制器(MCU)進行診斷。
6.引腳說明
三個安全輸出引腳(PGOOD、RSTB、FS0B)在層次上被賦予了優先級,以確保系統能夠安全地達到穩定狀態。
PGOOD(電源良好)具有最高優先級(一級)。如果PGOOD被斷言(即電源良好信號被激活),則RSTB和FS0B也會被斷言。
RSTB(復位)具有次高優先級(二級)。如果RSTB被斷言,FS0B也會被斷言,但PGOOD可能不被斷言。
FS0B(故障安全)具有最低優先級(三級)。如果FS0B被斷言,RSTB和PGOOD可能不被斷言。
STBY 引腳,可以在應用中連接到 MCU。STBY(待機)輸入引腳的極性可以通過 STBY_POLARITY_OTP 位(CFG_DEVID_OTP 寄存器)進行配置,以選擇是在待機模式下高電平有效/正常模式下低電平有效,還是在待機模式下低電平有效/正常模式下高電平有效。
STBY 功能通過 STBY_EN_OTP 位(CFG_2_OTP 寄存器)啟用。
進入待機模式有兩種可能的路徑,這取決于 STBY_SAFE_DIS_OTP 位(CFG_2_OTP 寄存器)的設置:
標準路徑:僅使用 STBY 引腳的電平變化。
安全路徑:使用 I2C 請求(FS_SAFE_IOS 寄存器中的 STBY_REQ 位)以及 STBY 引腳的電平變化。
7.自測試
故障安全狀態機包含一個邏輯內置自測試(LBIST),用于驗證安全邏輯監控的正確功能。LBIST 在每次上電復位(POR)之后,或者在每次從待機模式喚醒后進行。如果 LBIST 失敗,RSTB 和 PGOOD 會被釋放,但 FS0B 會保持在低電平狀態并且無法被釋放。
故障安全狀態機包括兩個模擬內置自測試(ABIST),用于驗證安全模擬監控的正確功能。
ABIST1 在每次上電復位(POR)之后,或者在每次從待機模式喚醒后自動執行。在 ABIST1 期間,要檢查的穩壓器的分配是通過 OTP(一次性可編程存儲器)完成的。
ABIST2 是在 INIT_FS 階段之后通過 I2C 使用 Vxxx_ABIST2 位(FS_I_ABIST2_CTRL 寄存器)來執行的。
如果 ABIST 失敗(無論是 ABIST1 還是 ABIST2),RSTB 和 PGOOD 會被釋放,但 FS0B 會保持在低電平狀態并且無法被釋放。這表示系統已進入故障安全狀態,以防止在不安全條件下繼續運行。
5.總結
本文對PMIC的安全策略進行了講解,拿VR5510進行具體分析,其他PMIC芯片也是類似的原理。
本文的實操,已在github公開,需要深入研究的自取。
https://github.com/sydyg/Vehicle_Soft_Class.git