中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

信譽(yù)好的o2o網(wǎng)站建設(shè)關(guān)鍵詞網(wǎng)絡(luò)推廣企業(yè)

信譽(yù)好的o2o網(wǎng)站建設(shè),關(guān)鍵詞網(wǎng)絡(luò)推廣企業(yè),建筑業(yè)資質(zhì)證書查詢網(wǎng),系統(tǒng)開發(fā)需求怎么寫車規(guī)微控制器的ECC機(jī)制及EMU外設(shè) 文章目錄 車規(guī)微控制器的ECC機(jī)制及EMU外設(shè)引言ECC的基本原理ECC RAM的訪問方式ECC RAM的初始化SRAM ECC錯(cuò)誤注入及EMU外設(shè)Flash ECC校驗(yàn)參考文獻(xiàn) 引言 ECC是微控制器系統(tǒng)中,用于保障信息安全的常用機(jī)制,主要是避免存儲(chǔ)設(shè)…

車規(guī)微控制器的ECC機(jī)制及EMU外設(shè)

文章目錄

  • 車規(guī)微控制器的ECC機(jī)制及EMU外設(shè)
    • 引言
    • ECC的基本原理
    • ECC RAM的訪問方式
    • ECC RAM的初始化
    • SRAM ECC錯(cuò)誤注入及EMU外設(shè)
    • Flash ECC校驗(yàn)
    • 參考文獻(xiàn)

引言

ECC是微控制器系統(tǒng)中,用于保障信息安全的常用機(jī)制,主要是避免存儲(chǔ)設(shè)備中存放的數(shù)據(jù)因硬件干擾被篡改。國(guó)產(chǎn)車規(guī)微控制器原廠云途半導(dǎo)體設(shè)計(jì)和發(fā)布的YTM32微控制器芯片,全系配備了存儲(chǔ)器的ECC機(jī)制,可以有效的增強(qiáng)芯片運(yùn)行穩(wěn)定性,避免因?yàn)閮?nèi)存位翻轉(zhuǎn)導(dǎo)致芯片產(chǎn)生嚴(yán)重故障。本文將以YTM32微控制器芯片為例,對(duì)內(nèi)存ECC的基本機(jī)制、實(shí)現(xiàn)原理和使用時(shí)的注意事項(xiàng)等進(jìn)行介紹。

ECC的基本原理

ECC全稱 Error Checking and Correcting,屬于一種錯(cuò)誤檢查和糾正算法,典型的ECC算法一般可以做到糾正單比特錯(cuò)誤和檢查2比特錯(cuò)誤。

在介紹ECC算法之前,先看一種簡(jiǎn)單的校驗(yàn)算法:奇偶校驗(yàn)。奇偶校驗(yàn)是在傳輸數(shù)據(jù)流的末尾,增加1個(gè)比特的校驗(yàn)信息,以保證完整的數(shù)據(jù)流中比特位的累加值一定是奇數(shù)或者偶數(shù):若采用偶數(shù)校驗(yàn)的方式,發(fā)送方對(duì)偶數(shù)數(shù)據(jù)補(bǔ)充比特0,對(duì)于奇數(shù)數(shù)據(jù)補(bǔ)充比特1,這樣發(fā)送的數(shù)據(jù)一定是偶數(shù),接收方收到數(shù)據(jù)之后就對(duì)完整的數(shù)據(jù)幀進(jìn)行判斷, 如果不是偶數(shù)則代表數(shù)據(jù)出錯(cuò)。通過增加1個(gè)比特的額外數(shù)據(jù),接收方就可以判斷數(shù)據(jù)流是否正確,以實(shí)現(xiàn)對(duì)數(shù)據(jù)的校驗(yàn)。

但是,使用奇偶校驗(yàn)機(jī)制對(duì)數(shù)據(jù)有效性的判定能力有限:

  • 若有2個(gè)比特?cái)?shù)據(jù)發(fā)生反轉(zhuǎn),那么接收方依然會(huì)判定接收到的數(shù)據(jù)是正常數(shù)據(jù);
  • 如果有1個(gè)比特?cái)?shù)據(jù)異常,接收方只能判斷數(shù)據(jù)是異常的,并不能從接收到的數(shù)據(jù)恢復(fù)出正確的數(shù)據(jù)(因?yàn)闊o法判斷具體是哪一位出現(xiàn)了異常)。

從上面兩種情況來看,奇偶校驗(yàn)只能檢驗(yàn)單個(gè)比特的數(shù)據(jù)錯(cuò)誤。

基于奇偶校驗(yàn)算法,ECC校驗(yàn)算法通過增加更多的額外校驗(yàn)數(shù)據(jù),以實(shí)現(xiàn)對(duì)傳輸數(shù)據(jù)的錯(cuò)誤檢查和錯(cuò)誤糾正。

這里簡(jiǎn)單介紹ECC的實(shí)現(xiàn)原理。以4-bit ECC計(jì)算為例,如圖x所示,假定3個(gè)不同顏色的圓相交的4個(gè)小格代表著4個(gè)bit的數(shù)據(jù),與其他圓沒有交集的那個(gè)格就代表著ECC bit,即a4,a5,a6。

在這里插入圖片描述

圖x 4-bit ECC計(jì)算方法

這里,人為設(shè)定一個(gè)規(guī)則:每個(gè)圓內(nèi)的4個(gè)bit異或結(jié)果為0(類似于奇偶校驗(yàn)的機(jī)制)。當(dāng)4個(gè)bit的數(shù)據(jù)位確定后,例如圖中的1001,即可確定唯一ECC bit結(jié)果,即:a4=1,a5=0,a6=1。此時(shí),發(fā)生任何1個(gè)bit的跳變(包括ECC bit),均可被檢查出來并糾正,從而達(dá)到ECC的目的。此處描述的是,每個(gè)數(shù)據(jù)位都會(huì)和一些ECC位建立約束關(guān)系,但這些數(shù)據(jù)位同時(shí)還會(huì)同另一些ECC位存在約束關(guān)系,如此,通過數(shù)據(jù)冗余,形成“鐵索連環(huán)”,相互照應(yīng)。以此為基礎(chǔ),使用更多的ECC位(增加數(shù)據(jù)冗余),可以讓數(shù)據(jù)更加“穩(wěn)固”,但也會(huì)付出更多存儲(chǔ)空間的代價(jià)。

最小ECC bit位數(shù)n要求:2^n>數(shù)據(jù)位數(shù)+ECC位數(shù)n。

數(shù)據(jù)位每增加1倍,ECC只增加1位檢驗(yàn)位。設(shè)計(jì)ECC時(shí),可以設(shè)計(jì)數(shù)據(jù)位是8位對(duì)應(yīng)的ECC需要增加5位來進(jìn)行ECC錯(cuò)誤檢查和糾正,當(dāng)數(shù)據(jù)位為16位時(shí)ECC位為6位,32位時(shí)ECC位為7位,數(shù)據(jù)位為64位時(shí)ECC位為8位,依此類推。

在實(shí)際應(yīng)用芯片的場(chǎng)景中,存儲(chǔ)單元(包含芯片內(nèi)部SRAM和Flash)通常發(fā)生的是位數(shù)據(jù)的翻轉(zhuǎn),也就是單比特錯(cuò)誤居多。針對(duì)這種錯(cuò)誤,ECC一般可以實(shí)現(xiàn)1個(gè)比特的錯(cuò)誤糾正和2個(gè)比特錯(cuò)誤的檢查,芯片的ECC組合一般是32+7和64+8的組合方式。如表x所示。

表x 常用的ECC數(shù)據(jù)長(zhǎng)度
有效數(shù)據(jù)ECC數(shù)據(jù)
32位有效數(shù)據(jù)7位ECC數(shù)據(jù)
64位有效數(shù)據(jù)8位ECC數(shù)據(jù)

根據(jù)處理器特性和SRAM以及Flash的應(yīng)用特性,通常在MCU中,一般對(duì)SRAM采用32+7的ECC校驗(yàn)方式,對(duì)Flash采用64+8的校驗(yàn)方式。

ECC RAM的訪問方式

微控制器系統(tǒng)中的總線在讀寫支持ECC的SRAM時(shí),會(huì)通過ECC編碼器(Encoder)和ECC解碼器(Decoder)對(duì)寫入和讀出的數(shù)據(jù)進(jìn)行處理,如圖x所示。

  • 寫入SRAM數(shù)據(jù)時(shí),總線將計(jì)算好該數(shù)據(jù)對(duì)應(yīng)的ECC,一并寫入
  • 從SRAM讀數(shù)據(jù)時(shí),總線同時(shí)讀取數(shù)據(jù)和ECC校驗(yàn)信息,之后根據(jù)ECC對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),然后才將數(shù)據(jù)返回系統(tǒng)中使用

在這里插入圖片描述

圖x MCU總線讀寫帶有ECC的SRAM

在圖x中可以看到,總線對(duì)于SRAM的讀寫都是以32位的帶寬進(jìn)行操作的,嵌入在32位總線上的ECC編碼器和解碼器也是基于32位數(shù)操作的,但是,軟件中有很多基于字節(jié)或者半字的操作方式,對(duì)于這種情況,總線并不能直接以字節(jié)或者半字節(jié)的方式向SRAM存儲(chǔ)區(qū)中寫數(shù),SRAM控制器首先會(huì)讀出SRAM中原有的32位數(shù),修改這個(gè)數(shù),重新計(jì)算ECC,然后將新的數(shù)據(jù)和ECC計(jì)算的結(jié)果一并寫入到SRAM中。

ECC RAM的初始化

SRAM存儲(chǔ)器中的內(nèi)容在上電之后內(nèi)容是隨機(jī)的,其中的有效數(shù)據(jù)和ECC數(shù)據(jù)并未建立起關(guān)聯(lián)。此時(shí),如果讀取SRAM的內(nèi)容并進(jìn)行ECC校驗(yàn),大概率上是會(huì)出現(xiàn)ECC錯(cuò)誤的。因此,在使用支持ECC的SRAM之前,需要手動(dòng)對(duì)SRAM進(jìn)行初始化操作。初始化SRAM的操作,就是簡(jiǎn)單的向SRAM中按照32位的寬度寫入一個(gè)任意值,通過ECC編碼器計(jì)算好ECC數(shù)據(jù)并填充SRAM存儲(chǔ)器即可。注意,初始化的時(shí)候必須要按照32位的形式寫入,否則若按照字節(jié)或者半字的方式寫入的時(shí)候,系統(tǒng)會(huì)先讀后寫,最初讀到的數(shù)也是錯(cuò)的,會(huì)出現(xiàn)ECC錯(cuò)誤。

ECC的初始化過程一般會(huì)被放在MCU的啟動(dòng)匯編代碼中,此時(shí)尚未初始化ECC,不能使用建立在ECC內(nèi)存中的堆棧。以YTM32微控制器芯片為例,其啟動(dòng)程序使用如下代碼實(shí)現(xiàn)對(duì)ECC的初始化:

#ifndef START_NO_ECC_INIT/* Init ECC RAM */ldr r1, =__RAM_STARTldr r2, =__RAM_ENDsubs    r2, r1subs    r2, #1ble .LC5movs    r0, 0movs    r3, #4
.LC4:str r0, [r1]add	r1, r1, r3subs r2, 4bge .LC4
.LC5:
#endif

上述代碼中,可以通過定義START_NO_ECC_INIT宏配置初始化時(shí)繞過ECC初始化,ECC的初始化范圍是從__RAM_START__RAM_END,這兩個(gè)地址是在linker文件中定義的,用戶可以根據(jù)應(yīng)用需求修改相應(yīng)的地址范圍。注意,這里設(shè)置初始化ECC的地址區(qū)域越大,系統(tǒng)啟動(dòng)的時(shí)間將會(huì)越長(zhǎng)。

YTM32芯片在SRAM產(chǎn)生ECC錯(cuò)誤時(shí),會(huì)產(chǎn)生Bus Error或者Hard Fault。

用戶在使用過程中,如果發(fā)現(xiàn)芯片在單步調(diào)試過程中使用正常(在斷點(diǎn)時(shí),調(diào)試器會(huì)掃描存儲(chǔ)空間),但是在芯片重新上電之后就會(huì)出現(xiàn)異常,就可以檢查一下是否SRAM ECC沒有正常初始化,例如上述過程中的START_FROM_FLASH宏定義是否在匯編調(diào)試階段有定義(針對(duì)舊版本SDK)。

還有一種判定ECC未正常初始化的方式,可通過調(diào)試器查看系統(tǒng)的SRAM,如果發(fā)現(xiàn)有的SRAM可以讀,有的SRAM地址無法正確讀,那么就是ECC沒有正常初始化。

SRAM ECC錯(cuò)誤注入及EMU外設(shè)

在程序開發(fā)過程中,考慮到功能安全的需求,還需要考慮出現(xiàn)ECC錯(cuò)誤情況的處理機(jī)制。實(shí)際上,SRAM上比特位翻轉(zhuǎn)是一個(gè)小概率事件,在常規(guī)測(cè)試過程很難復(fù)現(xiàn)。工程師圈子里有一句廣為流傳的口號(hào),“有困難要上,沒有困難制造困難也要上”。為了人為創(chuàng)造ECC錯(cuò)誤的情況(以便開發(fā)ECC錯(cuò)誤處理過程),YTM32的為控制上設(shè)計(jì)了一個(gè)EMU(ECC Management Unit)的外設(shè)模塊,專門用于主動(dòng)產(chǎn)生和捕獲ECC錯(cuò)誤。

EMU模塊在ECC過程中的位置,如圖x所示。

在這里插入圖片描述

圖x EMC在ECC過程中的位置

EMU實(shí)際上是在SRAM的讀過程中增加的一個(gè)模塊,將從SRAM的讀取的數(shù)據(jù)同EMU設(shè)置的一個(gè)mask進(jìn)行異或運(yùn)算,從而對(duì)讀取數(shù)據(jù)的某個(gè)位進(jìn)行翻轉(zhuǎn)(以產(chǎn)生錯(cuò)誤數(shù)據(jù)),然后送入ECC解碼器,從而模擬SRAM出現(xiàn)ECC錯(cuò)誤。

另外,EMU還會(huì)監(jiān)測(cè)ECC解碼器的結(jié)果,當(dāng)產(chǎn)生ECC錯(cuò)誤的時(shí)候,EMU會(huì)捕獲這個(gè)異常,并記錄出現(xiàn)ECC錯(cuò)誤的地址和異常類型(單比特錯(cuò)誤還是多比特錯(cuò)誤)。應(yīng)用中,可通過讀取EMU的錯(cuò)誤信息,進(jìn)而決定如何處理ECC錯(cuò)誤。

對(duì)于ECC錯(cuò)誤的處理方式,可以分為如下幾種情況:

  1. 如果系統(tǒng)允許復(fù)位的話,可以直接記錄診斷信息后復(fù)位運(yùn)行,這樣SRAM整體都會(huì)重新初始化成正常內(nèi)容
  2. 針對(duì)單比特錯(cuò)誤,因?yàn)镋CC可以直接糾正結(jié)果,可以直接讀取產(chǎn)生ECC錯(cuò)誤地址上的內(nèi)容,然后將內(nèi)容重新寫回到該地址,即可恢復(fù)正常。注意,如果ECC錯(cuò)誤是通過EMU模擬實(shí)現(xiàn)的,此時(shí)就需要關(guān)閉EMU注入通道,否則再次讀取的時(shí)候依然會(huì)有ECC錯(cuò)誤,另外因?yàn)镋CC是糾1檢2的算法,如果出現(xiàn)多于2比特的錯(cuò)誤,這種情況SRAM的讀取結(jié)果可能會(huì)有正常、單比特錯(cuò)誤和多比特錯(cuò)誤幾種結(jié)果。
  3. 針對(duì)多比特錯(cuò)誤,因?yàn)闊o法恢復(fù)正確信息,應(yīng)用只能向錯(cuò)誤地址寫入一個(gè)默認(rèn)值,或者通過復(fù)位操作恢復(fù)正常值。

Flash ECC校驗(yàn)

Flash內(nèi)部也是通過電荷狀態(tài)來存儲(chǔ)信息的,雖然Flash中電荷的狀態(tài)大部分時(shí)間都是穩(wěn)定的,但是當(dāng)受到某些干擾之后,Flash中電荷狀態(tài)也有可能發(fā)生反轉(zhuǎn)。所以,車規(guī)芯片對(duì)Flash的ECC校驗(yàn)也提出了要求。因?yàn)镕lash不支持隨機(jī)的寫入,所以ECC的操作方面相對(duì)SRAM比較簡(jiǎn)單。

首先,Flash初始時(shí)擦除狀態(tài),有效數(shù)據(jù)全是1,而對(duì)應(yīng)的ECC算法可以保證全1的ECC校驗(yàn)值也是全1(巧妙啊),也就是說,Flash擦除狀態(tài)下,對(duì)Flash的讀操作并不會(huì)產(chǎn)生ECC錯(cuò)誤。而對(duì)Flash的寫入都是通過一系列的命令實(shí)現(xiàn)的,在寫入的時(shí)候,硬件會(huì)自動(dòng)計(jì)算好ECC,再將有效數(shù)據(jù)和ECC校驗(yàn)值一并寫入到Flash的存儲(chǔ)區(qū)中。寫入完成之后,用戶正常讀取數(shù)據(jù)內(nèi)容即可。這種情況,即使Flash出現(xiàn)單比特的錯(cuò)誤,ECC解碼器也可以正常糾正,以保證有效數(shù)據(jù)的完整性。

對(duì)于功能安全要求比較高的程序,應(yīng)用程序還需要針對(duì)Flash的ECC進(jìn)行處理,和SRAM ECC錯(cuò)誤處理的方式類似,Flash ECC錯(cuò)誤處理可以分為如下幾種形式:

  1. 當(dāng)出現(xiàn)單比特?cái)?shù)據(jù)錯(cuò)誤,由于總線可以自動(dòng)恢復(fù)正確的原始數(shù)據(jù),應(yīng)用程序可以先記錄相應(yīng)的診斷數(shù)據(jù),然后備份Flash出錯(cuò)數(shù)據(jù)所在的扇區(qū),再將扇區(qū)擦除后,從備份地址將原有數(shù)據(jù)重新寫入到擦除后到扇區(qū)。
  2. 當(dāng)出現(xiàn)多比特?cái)?shù)據(jù)錯(cuò)誤,如果錯(cuò)誤出現(xiàn)在程序區(qū)域,那么只能記錄診斷數(shù)據(jù),然后嘗試運(yùn)行備份APP程序,嘗試系統(tǒng)復(fù)位,或者重新下載程序。
  3. 當(dāng)出現(xiàn)多比特錯(cuò)誤錯(cuò)誤,如果錯(cuò)誤出現(xiàn)在數(shù)據(jù)區(qū)域,那么應(yīng)用程序需要嘗試使用默認(rèn)值填充錯(cuò)誤區(qū)域,相當(dāng)于重新下載程序。

總之,當(dāng)檢測(cè)到Flash出現(xiàn)ECC錯(cuò)誤時(shí),Flash存儲(chǔ)器的內(nèi)容已經(jīng)有風(fēng)險(xiǎn),必須將出現(xiàn)錯(cuò)誤的扇區(qū)進(jìn)行擦除和重新編程才能從根本上清除掉ECC錯(cuò)誤。當(dāng)然,同一個(gè)地址產(chǎn)生多位的翻轉(zhuǎn)概率還是非常低的,考慮到設(shè)計(jì)實(shí)現(xiàn)這種自恢復(fù)的機(jī)制也需要消耗相當(dāng)?shù)某杀?#xff08;更長(zhǎng)的開發(fā)周期,更復(fù)雜的應(yīng)用程序,更大的物理存儲(chǔ)空間),開發(fā)者可以酌情采取應(yīng)對(duì)策略。

參考文獻(xiàn)

  • 《YTM32芯片內(nèi)部ECC處理機(jī)制》,https://www.zhihu.com/tardis/sogou/art/599259860,Major-Lin,2023-01-15
  • 《白話flash ECC原理》,https://zhuanlan.zhihu.com/p/61907594,moonliang, 2019-04-10
http://www.risenshineclean.com/news/32742.html

相關(guān)文章:

  • 家庭室內(nèi)裝修設(shè)計(jì)公司杭州seo網(wǎng)
  • 建站之星設(shè)計(jì)師站優(yōu)云seo優(yōu)化
  • 汽車保險(xiǎn)網(wǎng)站crm系統(tǒng)
  • 免費(fèi)的自助設(shè)計(jì)網(wǎng)站百度風(fēng)云榜官網(wǎng)
  • 電子商務(wù)網(wǎng)站開發(fā)相關(guān)技術(shù)全網(wǎng)線報(bào) 實(shí)時(shí)更新
  • 嘉興做網(wǎng)站費(fèi)用重慶百度推廣電話
  • 免費(fèi)視頻網(wǎng)站制作自己如何制作一個(gè)網(wǎng)頁(yè)
  • 濟(jì)南網(wǎng)站建設(shè)山東酷風(fēng)seo關(guān)鍵詞怎么優(yōu)化
  • 怎么做瀏覽器網(wǎng)站嗎推廣計(jì)劃
  • 網(wǎng)站建設(shè)是什么樣的百度關(guān)鍵詞排行榜
  • 怎么弄個(gè)人網(wǎng)站優(yōu)幫云排名自動(dòng)扣費(fèi)
  • 網(wǎng)站設(shè)計(jì)規(guī)劃書例子微信客戶管理
  • 上饒建設(shè)培訓(xùn)中心網(wǎng)站網(wǎng)絡(luò)營(yíng)銷公司熱線電話
  • 中國(guó)十大電商做的好的網(wǎng)站seo推廣是什么意懌
  • 專業(yè)微信網(wǎng)站建設(shè)公司首選公司哪家好互聯(lián)網(wǎng)推廣公司排名
  • 建網(wǎng)站前期設(shè)計(jì)用那軟件花都網(wǎng)絡(luò)推廣seo公司
  • wordpress注冊(cè)去掉電子郵件上海網(wǎng)站seo診斷
  • 做網(wǎng)站后臺(tái)域名備案官網(wǎng)
  • 鄭州專業(yè)網(wǎng)站制作服務(wù)報(bào)價(jià)濟(jì)南網(wǎng)絡(luò)推廣公司電話
  • 寧波網(wǎng)站建設(shè)在線智慧軟文網(wǎng)站
  • 南昌有限公司 網(wǎng)站灰色詞排名代做
  • wordpress地址和站點(diǎn)url金華百度seo
  • python做網(wǎng)站快么鄭州外貿(mào)網(wǎng)站推廣
  • 百度做網(wǎng)站的電話百度置頂廣告多少錢
  • 德陽(yáng)哪里有做網(wǎng)站的windows優(yōu)化大師是官方的嗎
  • 網(wǎng)站微信建設(shè)運(yùn)營(yíng)經(jīng)驗(yàn)分享沈陽(yáng)疫情最新消息
  • 鄭州做裝飾的網(wǎng)站友情鏈接交易網(wǎng)
  • 公司做網(wǎng)站讓我們銷售百度點(diǎn)擊排名收費(fèi)軟件
  • 重慶建設(shè)安全員信息網(wǎng)站seo實(shí)訓(xùn)報(bào)告
  • 自己做投票網(wǎng)站怎么弄公司域名查詢官網(wǎng)