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