IEC(國(guó)際電工委員會(huì))是由所有國(guó)家電工委員會(huì)組成的世界性標(biāo)準(zhǔn)化組織,IEC針對(duì)家用電器的正常安全運(yùn)行制定了安全標(biāo)準(zhǔn)。
IEC60335安全標(biāo)準(zhǔn)里面定義了多種測(cè)試和診斷方法,確保面向家用電器的嵌入式控制硬件和軟件的安全運(yùn)行。IEC60730安全標(biāo)準(zhǔn)主要針對(duì)安全和性能、環(huán)境、電能效率及其可再生能力,其標(biāo)準(zhǔn)為硬件及軟件解決方案提供建議。
為此,華芯微特開(kāi)發(fā)出多款安全特性和軟件開(kāi)發(fā)包(包括IEC60335安全庫(kù)),可幫助大型電器市場(chǎng)的自動(dòng)化控制制造商滿足IEC60335 CLASSB規(guī)范。
在這里我們以SWM341為例給大家簡(jiǎn)單介紹一下在IEC_60335_CLASSB軟件庫(kù)。
整體流程
ClassB軟件包程序檢測(cè)內(nèi)容分為兩個(gè)主要部分:?jiǎn)?dòng)時(shí)的自檢和運(yùn)行時(shí)的周期自檢,MCU在上電的時(shí)候會(huì)進(jìn)行復(fù)位啟動(dòng),在啟動(dòng)完成以后會(huì)進(jìn)行運(yùn)行自檢。
啟動(dòng)時(shí)檢測(cè)
CPU寄存器進(jìn)行自檢操作,如果檢測(cè)沒(méi)有故障則進(jìn)行看門狗的自檢,如果有故障則進(jìn)行故障的處理??撮T狗自檢流程與CPU寄存器自檢的流程一致,后面依次會(huì)進(jìn)行FLASH,RAM以及時(shí)鐘自檢,啟動(dòng)自檢完成以后會(huì)進(jìn)入程序的主循環(huán)函數(shù)中。
啟動(dòng)自檢流程如下圖:
CPU啟動(dòng)時(shí)檢測(cè)
進(jìn)行CPU寄存器的相關(guān)檢測(cè),主要檢查內(nèi)核標(biāo)志、寄存器和堆棧指針等是否正確。如果發(fā)生錯(cuò)誤,就會(huì)調(diào)用故障安全處理函數(shù)Selftest_fail_handle()。
看門狗啟動(dòng)時(shí)檢測(cè)
驗(yàn)證看門狗復(fù)位功能是否正常,保證后續(xù)運(yùn)行中如果因?yàn)槌绦蛴?jì)數(shù)器出現(xiàn)非預(yù)期異常情況導(dǎo)致程序跑飛時(shí)可以通過(guò)看門狗復(fù)位恢復(fù)。測(cè)試通過(guò)判斷復(fù)位狀態(tài)寄存器的復(fù)位標(biāo)識(shí)來(lái)判斷是否測(cè)試成功。
時(shí)鐘啟動(dòng)時(shí)檢測(cè)
啟動(dòng)階段的時(shí)鐘檢測(cè)通過(guò)內(nèi)部低速時(shí)鐘源(LICK)和系統(tǒng)時(shí)鐘的交叉測(cè)量結(jié)果來(lái)判斷。系統(tǒng)時(shí)鐘頻率作為基準(zhǔn)頻率,采用外部高速時(shí)鐘源(HEXT)或者內(nèi)部高速時(shí)鐘源(HICK)。將定時(shí)器的時(shí)鐘源設(shè)置為L(zhǎng)ICK,systick設(shè)置為系統(tǒng)時(shí)鐘,運(yùn)行systick相同時(shí)間,兩次timer當(dāng)前值之間的差值作為測(cè)量值與LICK預(yù)期的范圍值進(jìn)行比較。如果測(cè)量值超出了LICK預(yù)期范圍值,則測(cè)試失敗。
FLASH啟動(dòng)時(shí)檢測(cè)
FLASH自檢是存儲(chǔ)器檢測(cè)的一部分, 程序中將FLASH數(shù)據(jù)用CRC算法計(jì)算, 將結(jié)果值跟編譯時(shí)已存儲(chǔ)在FLASH指定位置的預(yù)先計(jì)算好的CRC值進(jìn)行比較。
RAM啟動(dòng)時(shí)檢測(cè)
RAM自檢是存儲(chǔ)器檢測(cè)的一部分,對(duì)于支持硬件SRAM奇偶校驗(yàn)功能的型號(hào),可以開(kāi)啟RAM校驗(yàn)功能并且可以跳過(guò)該步驟,而對(duì)于不支持硬件SRAM奇偶校驗(yàn)功能的型號(hào),則采用March C算法,用值0x00和0xFF逐字交替填充整個(gè)RAM并檢查,填充時(shí)可以選擇加擾模式(scramble)或者標(biāo)準(zhǔn)模式(standard),加擾模式基本物理單元是4字,下圖單元格內(nèi)的編號(hào)代表測(cè)試填充的順序。
RAM采用March C算法測(cè)試時(shí)分6個(gè)步驟,前3個(gè)循環(huán)按照地址遞增執(zhí)行,后3個(gè)循環(huán)按照地址遞減執(zhí)行。測(cè)試步驟如下,如果采用March X算法則省略步驟3和4:
·全部范圍寫(xiě)0x00,按照地址遞增順序執(zhí)行
·檢測(cè)是否全部范圍為0x00,然后全部范圍寫(xiě)0xFF,按照地址遞增順序執(zhí)行
·檢測(cè)是否全部范圍為0xFF,然后全部范圍寫(xiě)0x00,按照地址遞增順序執(zhí)行
·檢測(cè)是否全部范圍為0x00,然后全部范圍寫(xiě)0xFF,按照地址遞減順序執(zhí)行
·檢測(cè)是否全部范圍為0xFF,然后全部范圍寫(xiě)0x00,按照地址遞減順序執(zhí)行
·檢測(cè)是否全部范圍為0x00,按照地址遞減順序執(zhí)行
控制流啟動(dòng)時(shí)檢測(cè)
控制流檢測(cè)也屬于程序計(jì)數(shù)器檢測(cè)的一部分,啟動(dòng)階段控制流檢測(cè)主要分為了兩個(gè)節(jié)點(diǎn),其中一個(gè)檢測(cè)節(jié)點(diǎn)是在RAM檢測(cè)之前,通過(guò)控制流變量值判斷是否前面所有測(cè)試項(xiàng)都正確完成,另外一個(gè)節(jié)點(diǎn)是在RAM檢測(cè)后,主要是運(yùn)行階段檢測(cè)必須操作的流程的配置,比如CRC參考變量初始化、棧溢出pattern設(shè)置。
運(yùn)行時(shí)周期檢測(cè)
在主循環(huán)中會(huì)定期的進(jìn)行自檢操作,在進(jìn)行自檢操作的時(shí)候會(huì)依次進(jìn)行如下操作:CPU寄存器的自檢、棧自檢、時(shí)鐘自檢、FLASH自檢、并設(shè)置定時(shí)器定時(shí)進(jìn)行RAM自檢,如果在自檢的過(guò)程中出現(xiàn)故障則會(huì)進(jìn)行故障的處理。
CPU運(yùn)行時(shí)檢測(cè)
CPU運(yùn)行時(shí)周期自檢跟啟動(dòng)時(shí)的自檢類似,只是不檢測(cè)內(nèi)核標(biāo)志和堆棧指針。
看門狗運(yùn)行時(shí)檢測(cè)
運(yùn)行時(shí)需要定期喂狗保證系統(tǒng)正常運(yùn)行, 看門狗的刷新部分放置在每次檢測(cè)最后部分。
時(shí)鐘運(yùn)行時(shí)檢測(cè)
啟動(dòng)階段的時(shí)鐘檢測(cè)通過(guò)內(nèi)部低速時(shí)鐘源(LICK)和系統(tǒng)時(shí)鐘的交叉測(cè)量結(jié)果來(lái)判斷。系統(tǒng)時(shí)鐘頻率作為基準(zhǔn)頻率,采用外部高速時(shí)鐘源(HEXT)或者內(nèi)部高速時(shí)鐘源(HICK)。將定時(shí)器的時(shí)鐘源設(shè)置為L(zhǎng)ICK,systick設(shè)置為系統(tǒng)時(shí)鐘,運(yùn)行systick相同時(shí)間,兩次timer當(dāng)前值之間的差值作為測(cè)量值與LICK預(yù)期的范圍值進(jìn)行比較。如果測(cè)量值超出了LICK預(yù)期范圍值,則測(cè)試失敗。
FLASH CRC運(yùn)行時(shí)檢測(cè)
運(yùn)行時(shí)進(jìn)行Flash CRC的自檢,因?yàn)闄z測(cè)范圍不同耗時(shí)不同,如果一次計(jì)算檢測(cè)全部范圍CRC可能耗時(shí)過(guò)長(zhǎng),影響正常應(yīng)用部分的執(zhí)行,所以可以根據(jù)用戶應(yīng)用程序大小配置分段CRC計(jì)算,當(dāng)計(jì)算到最后一段范圍時(shí),再進(jìn)行CRC值比較,如果不一致則測(cè)試失敗。
棧邊界運(yùn)行時(shí)檢測(cè)
可驗(yàn)證尋址和數(shù)據(jù)路徑測(cè)試相關(guān),定義特殊固定值的Magic Pattern數(shù)組,放置在棧區(qū)域最底部地址,通過(guò)運(yùn)行中檢測(cè)Magic Pattern數(shù)組完整性來(lái)判斷棧是否溢出。如果原始Pattern被破壞,則表明棧溢出測(cè)試失敗,調(diào)用故障安全程序。
這一區(qū)域根據(jù)設(shè)備及應(yīng)用有不同的配置。用戶必須為堆棧定義足夠的區(qū)域,并保證pattern正確放置。下圖是程序中RAM的簡(jiǎn)要分配圖,其中灰色部分是相比較于常規(guī)應(yīng)用,支持自檢需要額外添加的部分。
局部RAM運(yùn)行時(shí)檢測(cè)
運(yùn)行時(shí)的RAM自檢是在systick中斷函數(shù)中進(jìn)行的。因?yàn)檫\(yùn)行中不允許破壞應(yīng)用部分RAM,所以測(cè)試只覆蓋分配給CLASS B變量的那部分內(nèi)存。測(cè)試流程方法概要描述如下:
·測(cè)試根據(jù)systick時(shí)基分批次進(jìn)行,每次測(cè)試按照CLASS B部分4個(gè)字的區(qū)域偏移,為保障耦合故障覆蓋率,每次測(cè)試的實(shí)際內(nèi)存塊還包括測(cè)試區(qū)域前后各1個(gè)相鄰字,總共6個(gè)字。
·首先將待測(cè)試內(nèi)存塊(RAM block)的數(shù)據(jù)存儲(chǔ)到專門用于測(cè)試過(guò)程中臨時(shí)保存數(shù)據(jù)的緩沖塊(buffer block)
·然后跟啟動(dòng)時(shí)檢測(cè)RAM類似, 對(duì)測(cè)試內(nèi)存塊(RAM block)采用March C算法測(cè)試,同樣可以選擇加擾模式(scramble)或者標(biāo)準(zhǔn)模式(standard)
·測(cè)試完成后將緩沖塊(buffer block)中保存的數(shù)據(jù)恢復(fù)至測(cè)試內(nèi)存塊(RAM block)。
工程配置
Keil中添加bat文件
添加ini文件
分散加載文件配置
編譯結(jié)果
運(yùn)行結(jié)果
以上是本次介紹的IEC_60335_CLASSB軟件庫(kù),如需更多了解SWM芯片信息請(qǐng)聯(lián)系華芯微特技術(shù)人員。
來(lái)源:華芯微特32位MCU
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系小編進(jìn)行處理
審核編輯 黃宇
-
mcu
+關(guān)注
關(guān)注
146文章
17358瀏覽量
352814 -
寄存器
+關(guān)注
關(guān)注
31文章
5372瀏覽量
121293 -
RAM
+關(guān)注
關(guān)注
8文章
1369瀏覽量
115068 -
檢測(cè)
+關(guān)注
關(guān)注
5文章
4517瀏覽量
91790 -
軟件庫(kù)
+關(guān)注
關(guān)注
0文章
15瀏覽量
7791
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
極海APM32F030系列MCU通過(guò)IEC60730軟件安全認(rèn)證
![極海APM32F030系列<b class='flag-5'>MCU</b>通過(guò)<b class='flag-5'>IEC</b>60730<b class='flag-5'>軟件</b>安全認(rèn)證](https://file.elecfans.com/web2/M00/45/D8/pYYBAGKPGDiAGaEhAAdy2wZj6Hc112.png)
IEC60335-1
AN4435_基于STM32系列MCU實(shí)現(xiàn)UL_CSA_IEC60730_60335_Class_B安全規(guī)范的設(shè)計(jì)指南
家電IEC60335-1總標(biāo)準(zhǔn)測(cè)試報(bào)告
IEC60335 ClassB ST MCU軟件庫(kù)介紹
AT32_IEC 60730_CLASSB軟件庫(kù)使用指南
極海APM32F030系列MCU通過(guò)IEC 60730軟件安全認(rèn)證
AN4435_基于STM32系列MCU實(shí)現(xiàn)UL_CSA_IEC60730_1_60335-1_Class_B安全規(guī)范的設(shè)計(jì)指南
![AN4435_基于STM32系列<b class='flag-5'>MCU</b>實(shí)現(xiàn)UL_CSA_<b class='flag-5'>IEC60730_1_60335</b>-1_Class_B安全規(guī)范的設(shè)計(jì)指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
AN4435_基于STM32系列MCU實(shí)現(xiàn)UL_CSA_IEC60730-1_60335-1_Class_B安全規(guī)范的設(shè)計(jì)指南
![AN4435_基于STM32系列<b class='flag-5'>MCU</b>實(shí)現(xiàn)UL_CSA_<b class='flag-5'>IEC60730-1_60335</b>-1_Class_B安全規(guī)范的設(shè)計(jì)指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
AN4435_基于STM32系列MCU實(shí)現(xiàn)UL_CSA_IEC60730_60335_Class_B安全規(guī)范的設(shè)計(jì)指南
![AN4435_基于STM32系列<b class='flag-5'>MCU</b>實(shí)現(xiàn)UL_CSA_<b class='flag-5'>IEC60730_60335</b>_Class_B安全規(guī)范的設(shè)計(jì)指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
國(guó)際電工委員會(huì)(IEC)發(fā)布了第7版IEC 60335-2-40
![國(guó)際電工委員會(huì)(<b class='flag-5'>IEC</b>)發(fā)布了第7版<b class='flag-5'>IEC</b> <b class='flag-5'>60335</b>-2-40](https://file.elecfans.com/web2/M00/54/82/poYBAGLXx6aAW7-wAACjHbGjkh0887.png)
AN136 基于GD32F30x系列的IEC60730 ClassB庫(kù)移植指南
![AN136 基于GD32F30x系列的<b class='flag-5'>IEC</b>60730 <b class='flag-5'>ClassB</b><b class='flag-5'>庫(kù)</b>移植指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于GD32F3x0系列的IEC60730 ClassB庫(kù)移植指南
![基于GD32F3x0系列的<b class='flag-5'>IEC</b>60730 <b class='flag-5'>ClassB</b><b class='flag-5'>庫(kù)</b>移植指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論