1. 背景
ECC(Error Correcting Code)的目的是保證RAM和Flash等存儲器中數據和程序代碼的完整性和可靠性,在汽車MCU中被廣泛應用,引起位錯誤的原因有多種,包括輻射(中子或阿爾法粒子)、電磁干擾、電噪聲或電路短路等原因。在原理上ECC是在對用戶開放的存儲器之外的區域額外增加存儲單元來存儲ECC計算結果,所以通常不占用額外的RAM空間,當數據被讀取時ECC會實時校驗待讀取數據的正確性,在檢測到錯誤時及時進行自動糾正或者產生錯誤通知,進而產生實施相應的安全機制。
KW45也支持RAM的ECC錯誤檢測,最近有用戶問到其工作機制和錯誤處理機制,剛好看到S32K1有篇文檔AN12522介紹相關內容,盡管兩者在RAM區間的劃分,ECC支持的范圍以及錯誤注入功能上有很多區別,但其思想基本一致,可以作為借鑒,此文直接分享(僅修改一個翻譯錯誤之處)。
S32K1xx系列中使用的ECC方法提供單錯誤糾正(SEC)和雙錯誤檢測(DED)功能。本應用筆記旨在描述如何在S32K1xx系列中實現ECC保護,并了解S32K14x和S32K11x器件的特定ECC事件響應。
2. SRAM ECC錯誤處理
2.1 上電復位后SRAM初始化
S32K1 SRAM分為兩個區域:SRAM_L和SRAM_U。RAM的實現使得SRAM_L和SRAM_U位于內存映射中的一個連續塊。有關更多詳細信息,可以參閱參考手冊中隨附的S32K1xx_memory_map.xlsx文件。
Note: S32K11x器件的SRAM_L不受ECC保護, 用作系統RAM的FlexRAM 沒有ECC, LPUART和FlexCAN RAM受 ECC保護。
SRAM的復位狀態未知,因此數據可能包含隨機數據。對任何地址的第一次讀取嘗試都很可能會產生不可糾正的ECC錯誤。在讀取每個內存地址之前,必須將其寫入一個已知值。如果讀取未初始化的內存地址,則讀取操作可能會導致多位ECC錯誤和AHB上的錯誤。因此, SRAM必須在上電后初始化,包括外設RAM存儲器,如LPUART和FlexCAN RAM。
2.2 使用的ECC算法
SRAM的ECC實現使用修改漢明碼方案,該方案具有40位校驗基,由32位數據和8奇偶校驗位組成。
2.3 單比特錯誤的ECC
S32K14x 和S32K11x設備以相同的方式處理單比特錯誤。錯誤報告模塊(ERM)可以生成中斷(如果已啟用)以通知單比特位更正事件,該事件可以通過將CR0[ESCIEx]位設置為1來啟用。在事件發生后,可以通過三種方式處理錯誤:
MCU正常運行:MCU檢測到故障(故障檢測時間)然后糾正(故障反應時間)。此時MCU繼續正常運行。
具有適當的功能安全機制來管理故障:MCU檢測故障(故障檢測時間)然后糾正(故障反應時間)。此時軟件必須切換 到safe_state_system(safe_state_system是一種沒有不合理的概率發生對任何人身體傷害或健康損害的操作模式)。Safe_state_system必須由用戶定義。
有任何合適的功能安全機制:MCU檢測到故障(故障檢測時間),然后糾正它,但沒有通知用戶發生了錯誤。容錯時間間隔(FTTI)過后,可能會出現危險。
2.4 不可糾正錯誤的ECC
S32K14x和S32K11x設備以不同的方式處理不可糾正的錯誤。錯誤報告模塊(ERM)可以生成中斷(如果已啟用)以通知雙位錯誤事件,可以將CR0[ENCIEx]位設置為1來啟用該事件。
S32K14x錯誤處理:當故障發生時,CPU跳轉到錯誤報告模塊(ERM)中斷處理程序(如果啟用)。
S32K11x錯誤處理:
當發生故障時,CPU首先跳轉到硬故障(hard fault)錯誤中斷處理程序,緊接著,ERM中斷標志被置位。
此時,用戶必須檢查ERM狀態寄存器是否顯示不可糾正的ECC錯誤事件。
如果是,建議遵循推薦的反應(系統復位)。
Note: 必須確保在硬故障異常處理期間不對SRAM_U進行讀訪問,否則會導致內核鎖定。因此,應更新鏈接器文件, 以使堆棧、向量表、硬故障處理程序中使用的變量等不應位于SRAM_U, 建議放置在SRAM_L和FlexRAM。(此處原文翻譯有錯)
一旦發生此事件,有三種方法可以繼續:
MCU正常運行:MCU檢測到故障(故障檢測時間)然后上報(故障反應時間)
具有適當的功能安全機制來管理故障:MCU檢測到故障(故障檢測時間)然后上報(故障反應時間)。
有任何合適的功能安全機制:MCU檢測故障(故障檢測時間)。容錯時間間隔(FTTI)過后,將出現危險。
2.5 SRAM錯誤注入
錯誤注入模塊(EIM)用于診斷目的,以便在訪問SRAM時引發讀取數據的單位和多位反轉。當EIM用于向內存注入故障時,對SRAM的任何訪問都會產生相應的注入錯誤(單位或雙位錯誤)。EIM支持兩個錯誤注入通道,分別對應于特定的RAM陣列。下表顯示了不同S32K1xx衍生產品的通道分配。
對于安全應用,建議檢查將錯誤注入SRAM的ECC功能,以檢查此類錯誤的報告。
3. FLASH ECC錯誤處理
S32K1xx Flash中實現的ECC邏輯可以自動糾正單比特故障,并可以檢測每個NVM分區(section)的多比特故障。使用 FERCNFG[DFDIE]位啟用多位故障。當檢測到多位錯誤時,FERSTAT[DFDIF]標志置位,產生中斷請求。當FlexNVM區域配置為模擬EEPROM時,在從模擬EEPROM讀取數據復制到EEERAM之前,任何單位ECC錯誤都會自動更正。在有效的模擬EEPROM位置上的任何雙位ECC錯誤,包含需要復制到EEERAM的數據,反映為EEERAM中都為1的相應數據記錄。
3.1 使用的ECC算法
NVM存儲器的ECC實現使用修改漢明碼方案,該方案具有72位校驗基,由64位數據和8個奇偶校驗位組成。
3.2 不可糾正錯誤的ECC
S32K14x和S32K11x設備以相同的方式處理不可糾正的錯誤。閃存模塊(FTFC)可以生成中斷(如果已啟用)以通知多位錯誤事件,該事件可以通過將FERCNGFG[DFDIE]位設置為1來啟用。
? S32K1xx錯誤處理:當故障發生時,FERSTAT[DFDIF]標志置位,通知檢測到雙位故障。閃存控制器將生成導致總線故障 (bus fault)的AHB錯誤響應(如果啟用)。處理總線故障后,跳轉到閃存模塊(FTFC)中斷處理程序(如果已啟用)。軟件可以根據錯誤發生在代碼空間還是數據空間來處理錯誤。
如果在執行機器異常過程中出現不可糾正的錯誤故障,則應進入安全狀態。
默認情況下禁用總線故障。因此,它將升級為硬故障(hard fault)。
3.3 閃存錯誤模擬
閃存模塊(FTFC)允許用戶模擬FERSTAT[DFDIF]標志的設置已檢查相關的中斷程序。設置FERCNFG[FDFD]位會創建錯誤仿真。
考慮到真正的流程是在進入閃存錯誤處理程序之前首先跳轉到BusFault(如果啟用)。
不允許對閃存位置內的位進行累積編程(沒有擦除的情況下連續編程操作)
審核編輯:湯梓紅
-
mcu
+關注
關注
146文章
17126瀏覽量
350996 -
FlaSh
+關注
關注
10文章
1633瀏覽量
147944 -
存儲器
+關注
關注
38文章
7484瀏覽量
163766 -
sram
+關注
關注
6文章
767瀏覽量
114675 -
ECC
+關注
關注
0文章
97瀏覽量
20557
原文標題:S32K1xx的ECC錯誤處理機制
文章出處:【微信號:pzh_mcu,微信公眾號:痞子衡嵌入式】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論