一、概述
1、FusLib 系統流程如下
不可恢復錯誤:Err Inject -> Fusa manager -> Verifier -> Reactor;
可恢復錯誤:Err Inject -> Fusa manager -> Verifier -> recorder;
2、FusaLib 系統結構圖:
圖 (1)
Fusa Manager:Fusa Manager 通過遍歷 CPU Resource List 驗證每個 Component;根據系統啟動的不同階段,支持配置多個 Resource List。
Stage0 Resource List:(典型的,包含 CPU/TCM/Cache/IRAM)用於在客戶 Application 剛啟動階段,以便於驗證最小系統的功能安全。
Stage1 Resource List:(典型的,包含 Clock/Reset/SCR/Fuse/DMA/Interrupt 等 infrastructure)用於進一步驗證系統的功能安全。
Stage2 Resource List:(典型的,包含系統將會使用的 Peripheral 和 Memory)用於驗證完整系統的功能安全。
Fusa 中保證的 Fusa Componment 功能安全:

圖 (2)
Fusa Verifier:每個 Verifier 為一個 API,負責對某一具體的安全機制進行驗證,Fusalib 運行其 Verifier API 並更新 Error code bits,驗證過的資源會標記為已驗證。
Fusa Reactor:默認 Reactor Function 將錯誤 ID 記錄到 Fusa Recorder 中;用戶在初始化階段調用 Fusa_SetReactorFunc 函數設置自定義的 Reactor Function,提供一些列默認 action 供用戶選擇或者使用用戶自定義的 action。
Fusa Recorder:用於對功能安全實踐進行記錄,支持將事件 /Err 記錄至 RTC mermory(24 words in RTC domain,non-volatile if RTC powered)。
3、不可恢復錯誤注入及故障反應流程:注入錯誤成功 -> 注入錯誤對應中斷位置 1,其他位清除 -> 配置 reactor -> 硬體可觀察現象;
4、不可恢復錯誤注入及故障反應框圖:

圖 (3)
故障反應 reactor,E3 硬體行為觀察需要兩個條件:
4.1、INT_STATUS_x 中該模塊(例 sgpio)對應的中斷狀態位置 1 觸發中斷;
4.2、INT_ENABLE_x1 中該模塊(例 sgpio:INT_ENABLE_21)對應的中斷反應使能位置 1 使能中斷;程序中是在 Reactor.c 中 948-1074 行進行初始化 Fusa_InitReactor。
5、手動注錯流程:注入錯誤 -> 產生中斷 -> 對應中斷位置 1 -> E3 可以檢測到故障 -> OK;
6、代碼追蹤流程:Fusa_Gpio.c (FusaLib\FusaLib\Verifier\Fusa_Gpio.c\)-> Gpio_Ip.c (FusaLib\FusaLib\Driver\Gpio\Gpio_Ip.c\)。
二、FusaLib 組入 Mcal
1、Fusalib 組入 MCAL3.0 後,Fusalib 工程如下所示:
圖(4)
2、將 Test 工程加入到 Fusalib 子文件夾下;並在 iar 環境中加入 Test:
圖 (5)
圖 (6)
3、加入頭文件路徑和宏定義:

圖 (7)
4、shell cmd:run one testcase,please input case order
圖 (8)
5、上電自動注錯入口關閉
圖 (9)
先把自動注錯入口關閉,第三章會先進行手動注錯。
6、串口可以看到 Fusalib_Runcase 命令
圖 (10)
三、成功注入錯誤

圖 (11)

圖 (12)

圖 (13)

圖 (14)
四、不可恢復錯誤注入驗證
1、修改 debug 等級

圖 (15)
2、EB 中配置時鐘與 Fusa_Config.c 中資源一致,若是客戶工程,與客戶工程中的 Fusa_Config.c 中資源一致。

圖 (16)

圖 (17)
3、mcu clock 和 reset 要正確配置

圖 (18)

圖 (19)
4、錯誤清除注釋

圖 (20)
單位 us;reactor 後延時 3s。

圖 (21)
對清除錯誤進行講解:
當注釋掉“錯誤清除”時:錯誤沒有被清除,log 列印 fail。
當未注釋掉“錯誤清除”時:錯誤被清除,log 列印 pass。
5、Part_Config.h 資源配置見《Semidrive E3 MCAL3.0&FusaLib PTG1.1 功能安全開發(一)》第三章問題 3。
6、現象:log 列印 pass,錯誤被正確清除。

圖 (22)
log 列印中斷號的位置:

圖 (23)

圖 (24)
i<288:i 中斷號,INT_Status 是 0~8,32*9=288 位。
7、Fusa Verifier 後若初始化 reactor,程序調用及配置步驟如下:

圖 (25)

圖 (26)

圖 (27)

圖 (28)

圖 (29)
配置 Fusa_Config.c 中 pad,SEM 的狀態進一步會被反映到 SEM_FAULT 管腳:
|
參數 |
值 |
意義 |
||
|
err_divider |
0~255 |
SEM_FAULT 管腳的波形頻率、分頻值=2^err_divider |
||
|
err_wave_sel |
0 |
1 |
nominal 輸出 waveA,recoverable 輸出 WaveB |
nominal 輸出 WaveB,recoverable 輸出 WaveA,B 波形是 A 波形頻率的 1/16 |
|
fatal_highlow_sel |
0 |
1 |
Fatal 狀態輸出電平 low level |
Fatal 輸出電平 high level |
|
level_cfg[0] |
0 |
1 |
nominal 輸出 Low level |
nominal 輸出 high level |
|
level_cfg[1] |
0 |
1 |
recoverable 輸出 low level |
recoverable 輸出 high level |
|
level_en[0] |
0 |
1 |
level disable |
level able |
|
level_en[1] |
0 |
1 |
level disable |
level able |
表 (1)
level_en[0]:nominal 是否使能;
level_en[1]:recoverable 是否使能;
如果 level_en[0] 配置為 1,level_cfg[0] 配置為 0,norminal 不輸出電平而由 err_wave_sel 控制輸出方波。
五、參考資料:
《FusaLib 培訓資料 PPT》
歡迎在博文下方留言評論,我們會及時回復您的問題。
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:Rita Liu / 劉倩
更多資訊,請掃碼關注我們!
評論