1. 背景
ECC(Error Correcting Code)的目的是保證RAM和Flash等存儲(chǔ)器中數(shù)據(jù)和程序代碼的完整性和可靠性,在汽車MCU中被廣泛應(yīng)用,引起位錯(cuò)誤的原因有多種,包括輻射(中子或阿爾法粒子)、電磁干擾、電噪聲或電路短路等原因。在原理上ECC是在對(duì)用戶開(kāi)放的存儲(chǔ)器之外的區(qū)域額外增加存儲(chǔ)單元來(lái)存儲(chǔ)ECC計(jì)算結(jié)果,所以通常不占用額外的RAM空間,當(dāng)數(shù)據(jù)被讀取時(shí)ECC會(huì)實(shí)時(shí)校驗(yàn)待讀取數(shù)據(jù)的正確性,在檢測(cè)到錯(cuò)誤時(shí)及時(shí)進(jìn)行自動(dòng)糾正或者產(chǎn)生錯(cuò)誤通知,進(jìn)而產(chǎn)生實(shí)施相應(yīng)的安全機(jī)制。
KW45也支持RAM的ECC錯(cuò)誤檢測(cè),最近有用戶問(wèn)到其工作機(jī)制和錯(cuò)誤處理機(jī)制,剛好看到S32K1有篇文檔AN12522介紹相關(guān)內(nèi)容,盡管兩者在RAM區(qū)間的劃分,ECC支持的范圍以及錯(cuò)誤注入功能上有很多區(qū)別,但其思想基本一致,可以作為借鑒,此文直接分享(僅修改一個(gè)翻譯錯(cuò)誤之處)。
S32K1xx系列中使用的ECC方法提供單錯(cuò)誤糾正(SEC)和雙錯(cuò)誤檢測(cè)(DED)功能。本應(yīng)用筆記旨在描述如何在S32K1xx系列中實(shí)現(xiàn)ECC保護(hù),并了解S32K14x和S32K11x器件的特定ECC事件響應(yīng)。
2. SRAM ECC錯(cuò)誤處理
2.1 上電復(fù)位后SRAM初始化
S32K1 SRAM分為兩個(gè)區(qū)域:SRAM_L和SRAM_U。RAM的實(shí)現(xiàn)使得SRAM_L和SRAM_U位于內(nèi)存映射中的一個(gè)連續(xù)塊。有關(guān)更多詳細(xì)信息,可以參閱參考手冊(cè)中隨附的S32K1xx_memory_map.xlsx文件。
Note: S32K11x器件的SRAM_L不受ECC保護(hù), 用作系統(tǒng)RAM的FlexRAM 沒(méi)有ECC, LPUART和FlexCAN RAM受 ECC保護(hù)。
SRAM的復(fù)位狀態(tài)未知,因此數(shù)據(jù)可能包含隨機(jī)數(shù)據(jù)。對(duì)任何地址的第一次讀取嘗試都很可能會(huì)產(chǎn)生不可糾正的ECC錯(cuò)誤。在讀取每個(gè)內(nèi)存地址之前,必須將其寫入一個(gè)已知值。如果讀取未初始化的內(nèi)存地址,則讀取操作可能會(huì)導(dǎo)致多位ECC錯(cuò)誤和AHB上的錯(cuò)誤。因此, SRAM必須在上電后初始化,包括外設(shè)RAM存儲(chǔ)器,如LPUART和FlexCAN RAM。
2.2 使用的ECC算法
SRAM的ECC實(shí)現(xiàn)使用修改漢明碼方案,該方案具有40位校驗(yàn)基,由32位數(shù)據(jù)和8奇偶校驗(yàn)位組成。
2.3 單比特錯(cuò)誤的ECC
S32K14x 和S32K11x設(shè)備以相同的方式處理單比特錯(cuò)誤。錯(cuò)誤報(bào)告模塊(ERM)可以生成中斷(如果已啟用)以通知單比特位更正事件,該事件可以通過(guò)將CR0[ESCIEx]位設(shè)置為1來(lái)啟用。在事件發(fā)生后,可以通過(guò)三種方式處理錯(cuò)誤:
MCU正常運(yùn)行:MCU檢測(cè)到故障(故障檢測(cè)時(shí)間)然后糾正(故障反應(yīng)時(shí)間)。此時(shí)MCU繼續(xù)正常運(yùn)行。
具有適當(dāng)?shù)墓δ馨踩珯C(jī)制來(lái)管理故障:MCU檢測(cè)故障(故障檢測(cè)時(shí)間)然后糾正(故障反應(yīng)時(shí)間)。此時(shí)軟件必須切換 到safe_state_system(safe_state_system是一種沒(méi)有不合理的概率發(fā)生對(duì)任何人身體傷害或健康損害的操作模式)。Safe_state_system必須由用戶定義。
有任何合適的功能安全機(jī)制:MCU檢測(cè)到故障(故障檢測(cè)時(shí)間),然后糾正它,但沒(méi)有通知用戶發(fā)生了錯(cuò)誤。容錯(cuò)時(shí)間間隔(FTTI)過(guò)后,可能會(huì)出現(xiàn)危險(xiǎn)。

2.4 不可糾正錯(cuò)誤的ECC
S32K14x和S32K11x設(shè)備以不同的方式處理不可糾正的錯(cuò)誤。錯(cuò)誤報(bào)告模塊(ERM)可以生成中斷(如果已啟用)以通知雙位錯(cuò)誤事件,可以將CR0[ENCIEx]位設(shè)置為1來(lái)啟用該事件。
S32K14x錯(cuò)誤處理:當(dāng)故障發(fā)生時(shí),CPU跳轉(zhuǎn)到錯(cuò)誤報(bào)告模塊(ERM)中斷處理程序(如果啟用)。
S32K11x錯(cuò)誤處理:
當(dāng)發(fā)生故障時(shí),CPU首先跳轉(zhuǎn)到硬故障(hard fault)錯(cuò)誤中斷處理程序,緊接著,ERM中斷標(biāo)志被置位。
此時(shí),用戶必須檢查ERM狀態(tài)寄存器是否顯示不可糾正的ECC錯(cuò)誤事件。
如果是,建議遵循推薦的反應(yīng)(系統(tǒng)復(fù)位)。
Note: 必須確保在硬故障異常處理期間不對(duì)SRAM_U進(jìn)行讀訪問(wèn),否則會(huì)導(dǎo)致內(nèi)核鎖定。因此,應(yīng)更新鏈接器文件, 以使堆棧、向量表、硬故障處理程序中使用的變量等不應(yīng)位于SRAM_U, 建議放置在SRAM_L和FlexRAM。(此處原文翻譯有錯(cuò))
一旦發(fā)生此事件,有三種方法可以繼續(xù):
MCU正常運(yùn)行:MCU檢測(cè)到故障(故障檢測(cè)時(shí)間)然后上報(bào)(故障反應(yīng)時(shí)間)
具有適當(dāng)?shù)墓δ馨踩珯C(jī)制來(lái)管理故障:MCU檢測(cè)到故障(故障檢測(cè)時(shí)間)然后上報(bào)(故障反應(yīng)時(shí)間)。
有任何合適的功能安全機(jī)制:MCU檢測(cè)故障(故障檢測(cè)時(shí)間)。容錯(cuò)時(shí)間間隔(FTTI)過(guò)后,將出現(xiàn)危險(xiǎn)。

2.5 SRAM錯(cuò)誤注入
錯(cuò)誤注入模塊(EIM)用于診斷目的,以便在訪問(wèn)SRAM時(shí)引發(fā)讀取數(shù)據(jù)的單位和多位反轉(zhuǎn)。當(dāng)EIM用于向內(nèi)存注入故障時(shí),對(duì)SRAM的任何訪問(wèn)都會(huì)產(chǎn)生相應(yīng)的注入錯(cuò)誤(單位或雙位錯(cuò)誤)。EIM支持兩個(gè)錯(cuò)誤注入通道,分別對(duì)應(yīng)于特定的RAM陣列。下表顯示了不同S32K1xx衍生產(chǎn)品的通道分配。

對(duì)于安全應(yīng)用,建議檢查將錯(cuò)誤注入SRAM的ECC功能,以檢查此類錯(cuò)誤的報(bào)告。
3. FLASH ECC錯(cuò)誤處理
S32K1xx Flash中實(shí)現(xiàn)的ECC邏輯可以自動(dòng)糾正單比特故障,并可以檢測(cè)每個(gè)NVM分區(qū)(section)的多比特故障。使用 FERCNFG[DFDIE]位啟用多位故障。當(dāng)檢測(cè)到多位錯(cuò)誤時(shí),F(xiàn)ERSTAT[DFDIF]標(biāo)志置位,產(chǎn)生中斷請(qǐng)求。當(dāng)FlexNVM區(qū)域配置為模擬EEPROM時(shí),在從模擬EEPROM讀取數(shù)據(jù)復(fù)制到EEERAM之前,任何單位ECC錯(cuò)誤都會(huì)自動(dòng)更正。在有效的模擬EEPROM位置上的任何雙位ECC錯(cuò)誤,包含需要復(fù)制到EEERAM的數(shù)據(jù),反映為EEERAM中都為1的相應(yīng)數(shù)據(jù)記錄。
3.1 使用的ECC算法
NVM存儲(chǔ)器的ECC實(shí)現(xiàn)使用修改漢明碼方案,該方案具有72位校驗(yàn)基,由64位數(shù)據(jù)和8個(gè)奇偶校驗(yàn)位組成。
3.2 不可糾正錯(cuò)誤的ECC
S32K14x和S32K11x設(shè)備以相同的方式處理不可糾正的錯(cuò)誤。閃存模塊(FTFC)可以生成中斷(如果已啟用)以通知多位錯(cuò)誤事件,該事件可以通過(guò)將FERCNGFG[DFDIE]位設(shè)置為1來(lái)啟用。
? S32K1xx錯(cuò)誤處理:當(dāng)故障發(fā)生時(shí),F(xiàn)ERSTAT[DFDIF]標(biāo)志置位,通知檢測(cè)到雙位故障。閃存控制器將生成導(dǎo)致總線故障 (bus fault)的AHB錯(cuò)誤響應(yīng)(如果啟用)。處理總線故障后,跳轉(zhuǎn)到閃存模塊(FTFC)中斷處理程序(如果已啟用)。軟件可以根據(jù)錯(cuò)誤發(fā)生在代碼空間還是數(shù)據(jù)空間來(lái)處理錯(cuò)誤。
如果在執(zhí)行機(jī)器異常過(guò)程中出現(xiàn)不可糾正的錯(cuò)誤故障,則應(yīng)進(jìn)入安全狀態(tài)。
默認(rèn)情況下禁用總線故障。因此,它將升級(jí)為硬故障(hard fault)。
3.3 閃存錯(cuò)誤模擬
閃存模塊(FTFC)允許用戶模擬FERSTAT[DFDIF]標(biāo)志的設(shè)置已檢查相關(guān)的中斷程序。設(shè)置FERCNFG[FDFD]位會(huì)創(chuàng)建錯(cuò)誤仿真。
考慮到真正的流程是在進(jìn)入閃存錯(cuò)誤處理程序之前首先跳轉(zhuǎn)到BusFault(如果啟用)。
不允許對(duì)閃存位置內(nèi)的位進(jìn)行累積編程(沒(méi)有擦除的情況下連續(xù)編程操作)
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
147文章
18420瀏覽量
380741 -
FlaSh
+關(guān)注
關(guān)注
10文章
1702瀏覽量
154247 -
存儲(chǔ)器
+關(guān)注
關(guān)注
39文章
7698瀏覽量
170395 -
sram
+關(guān)注
關(guān)注
6文章
799瀏覽量
117007 -
ECC
+關(guān)注
關(guān)注
0文章
99瀏覽量
21479
原文標(biāo)題:S32K1xx的ECC錯(cuò)誤處理機(jī)制
文章出處:【微信號(hào):pzh_mcu,微信公眾號(hào):痞子衡嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
嵌入式編程錯(cuò)誤處理機(jī)制設(shè)計(jì)
S32K1XX系列MCU復(fù)位問(wèn)題的解決方法
Rust語(yǔ)言中錯(cuò)誤處理的機(jī)制
S32K1xx系列MCU的EEE(Emulated EEPROM)使用詳解 精選資料分享
S32K1xx系列MCU啟動(dòng)過(guò)程是怎樣的
安裝S32SDK S32K1XX RTM 4.0.2,IDE無(wú)法識(shí)別安裝是怎么回事?
S32K3xx EMIOS模塊與S32K1xx FTM模塊相比有什么優(yōu)勢(shì)?
S32K1xx開(kāi)發(fā)包和S32K1實(shí)時(shí)驅(qū)動(dòng)的區(qū)別是什么?
AN5426,S32K1XX微控制器的硬件設(shè)計(jì)指南
NXP半導(dǎo)體產(chǎn)品S32K1XX數(shù)據(jù)手冊(cè)下載
vb關(guān)閉當(dāng)前應(yīng)用重新加載_S32K1xx系列MCU應(yīng)用指南之芯片鎖死(lockup)復(fù)位原因分析與恢復(fù)方法詳解...
S32K1xx系列MCU的EEE(Emulated EEPROM)使用詳解

S32K1xx的ECC錯(cuò)誤處理機(jī)制
評(píng)論