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

S32K1XX系列MCU復(fù)位問題的解決方法

Rust語言中錯誤處理的機(jī)制
S32K1xx系列MCU的EEE(Emulated EEPROM)使用詳解 精選資料分享
S32K1xx系列MCU啟動過程是怎樣的
安裝S32SDK S32K1XX RTM 4.0.2,IDE無法識別安裝是怎么回事?
S32K3xx EMIOS模塊與S32K1xx FTM模塊相比有什么優(yōu)勢?
S32K1xx開發(fā)包和S32K1實時驅(qū)動的區(qū)別是什么?
NXP半導(dǎo)體產(chǎn)品S32K1XX數(shù)據(jù)手冊下載
vb關(guān)閉當(dāng)前應(yīng)用重新加載_S32K1xx系列MCU應(yīng)用指南之芯片鎖死(lockup)復(fù)位原因分析與恢復(fù)方法詳解...

S32K1xx系列MCU的EEE(Emulated EEPROM)使用詳解

評論