ht32 ul / iec 60730-1 class b 安全測試庫 使用指南 - holtek...gsar 和srecord 包含在ht32...

29
HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南 AN0554TC V1.00 1 / 29 June 8, 2020 HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 文件編碼:AN0554TC 簡介 國際電工委員會(IEC)制定了家電開發的安全標準 IEC 60730IEC 60730-1 標準(家用和類似 用途的自動電氣控制器1 部分:通用要求)規定了測試和診斷方法,以確保家電中受控 設備的安全操作。附錄 H 是該標準的關鍵部分,將軟體分爲 Class A Class B Class C 三類。 Holtek 爲用於防止設備發生不安全操作的 Class B 控制功能(例如洗衣設備的熱熔斷裝置和門 )提供了 HT32 安全測試庫(Safety Test Library,以下簡稱 HT32 STL)Class B 適用於大部分 家電産品,包括洗碗機、洗衣機、電冰箱、冰櫃和炊具等。根據 IEC 60730 標準,家電製造 商必須按照 Class B 規則設計他們的産品。 本文描述了用於 IEC 60730-1 Class B 認證的 Holtek HT32 STL 的功能、環境、系統架構和使 用方法。HT32 STL 適用於幾乎所有的 HT32 Cortex ® -Mx 系列 32-bit MCU,提供 Class B 自檢 功能,包括 CPU 暫存器、程式計數器、中斷、時鐘、非易失性儲存器(Flash 儲存器)、易失 性儲存器(SRAM)、數字 I/O、模擬 I/O 等測試項目,這些在 IEC60730-1 附錄 H 的表 H11.12.7 中有定義。HT32 STL 可以幫助用戶减少自檢功能的開發時間,加速認證過程。 功能說明 UL/IEC 60730-1 Class B 自檢功能 IEC 60730-1 附錄 H 中的表 H11.12.7 定義了下列需要測試的 Class B 元件。HT32 STL 中都有包 括。 元件 測試目的和 HT32 STL 使用方法 1.1 CPU 暫存器 使用固件定期自檢,確認所有 CPU 暫存器正常工作,沒有卡住1.3 程式計數器 使用固件定期自檢,確認程式計數器正常工作,沒有卡住2.0 中斷 使用時隙監控,檢測無中斷或過於頻繁中斷的情况。 3.0 時鐘 使用時隙監控,檢測錯誤頻率4.1 非易失性儲存器 使用校驗和,檢測所有單位(single bit)故障4.2 易失性儲存器 使用定期靜態儲存器測試(March C/X),檢測直流故障7.1 數字 I/O 使用合理性檢查,檢測指定的故障狀態。 7.2 模擬 I/O 使用合理性檢查,檢測指定的故障狀態。

Upload: others

Post on 21-Feb-2021

8 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 1 / 29 June 8, 2020

HT32 UL / IEC 60730-1 Class B 安全測試庫

使用指南

文件編碼:AN0554TC

簡介

國際電工委員會(IEC)制定了家電開發的安全標準 IEC 60730。IEC 60730-1 標準(家用和類似

用途的自動電氣控制器–第 1 部分:通用要求)規定了測試和診斷方法,以確保家電中受控

設備的安全操作。附錄 H 是該標準的關鍵部分,將軟體分爲 Class A、Class B、Class C 三類。

Holtek 爲用於防止設備發生不安全操作的 Class B 控制功能(例如洗衣設備的熱熔斷裝置和門

鎖)提供了 HT32 安全測試庫(Safety Test Library,以下簡稱 HT32 STL)。Class B 適用於大部分

家電産品,包括洗碗機、洗衣機、電冰箱、冰櫃和炊具等。根據 IEC 60730 標準,家電製造

商必須按照 Class B 規則設計他們的産品。

本文描述了用於 IEC 60730-1 Class B 認證的 Holtek HT32 STL 的功能、環境、系統架構和使

用方法。HT32 STL 適用於幾乎所有的 HT32 Cortex®-Mx 系列 32-bit MCU,提供 Class B 自檢

功能,包括 CPU 暫存器、程式計數器、中斷、時鐘、非易失性儲存器(Flash 儲存器)、易失

性儲存器(SRAM)、數字 I/O、模擬 I/O 等測試項目,這些在 IEC60730-1 附錄 H 的表 H11.12.7

中有定義。HT32 STL 可以幫助用戶减少自檢功能的開發時間,加速認證過程。

功能說明

UL/IEC 60730-1 Class B 自檢功能

IEC 60730-1 附錄 H 中的表 H11.12.7 定義了下列需要測試的 Class B 元件。HT32 STL 中都有包

括。

元件 測試目的和 HT32 STL 使用方法

1.1 CPU 暫存器 使用固件定期自檢,確認所有 CPU 暫存器正常工作,沒有“卡住”。

1.3 程式計數器 使用固件定期自檢,確認程式計數器正常工作,沒有“卡住”。

2.0 中斷 使用時隙監控,檢測“無中斷或過於頻繁中斷”的情况。

3.0 時鐘 使用時隙監控,檢測“錯誤頻率”。

4.1 非易失性儲存器 使用校驗和,檢測“所有單位(single bit)故障”。

4.2 易失性儲存器 使用定期靜態儲存器測試(March C/X),檢測“直流故障”。

7.1 數字 I/O 使用合理性檢查,檢測指定的故障狀態。

7.2 模擬 I/O 使用合理性檢查,檢測指定的故障狀態。

Page 2: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 2 / 29 June 8, 2020

HT32 STL 特性

HT32 STL 包括以下特性。

1. 分層結構

2. 模塊化和可配置

3. 易於使用和集成

4. 支持幾乎所有的 HT32 系列單片機 (Cortex®-Mx 內核)

備註:HT32 STL 需要低速定時/計數器進行時鐘測試。因此不支持沒有 RTC 或低速定時器

的單片機(例如 HT32F52220/52230)。如需進一步瞭解,請諮詢當地代理機構。

系統需求

MCU 硬體 HT32 STL 與下列 MCU 硬體有關。

CPU 內核

32 位 Arm® Cortex

®-Mx 處理器內核

內建嵌套向量中斷控制器(NVIC)

片上儲存器

片上 Flash 儲存器用於指令/數據和選項的儲存

片上 SRAM 用於變量的儲存

時鐘控制單元– CKCU

外部高速晶體振蕩器

外部低速晶體振蕩器

內部高速 RC 振蕩器

內部低速 RC 振蕩器

模擬/數字轉換器– ADC

SAR ADC 內核

外部和內部模擬輸入通道

I/O 端口– GPIO

多個 GPIO 引脚

Port X 映射爲 16 個外部中斷(EXTI)

支持輸入使能功能用於輸出引脚的回送檢查

實時時鐘– RTC

帶可編程預分頻器的 32-bit 向上計數器

中斷和喚醒事件

循環冗餘校驗– CRC(可選)

支持 CRC16、CCITT CRC16 和 IEEE-802.3 CRC32 多項式

編譯環境 MDK-ARM V5 及以上版本

ARMCC V5(包含在 MDK-ARM IDE 中)

其它工具 Windows 命令解釋器 (cmd.exe)

Gsar V1.21 (http://gnuwin32.sourceforge.net/packages/gsar.htm)

SRecord V1.64 (http://srecord.sourceforge.net/)

註:Gsar 和 SRecord 包含在 HT32 固件庫中,HT32 UL/IEC 60730-1 Class B STL

是以原始 Windows 二進制版本(.exe 文件)發佈的。Holtek 沒有修改任何源代

碼。詳情請參考相應的版權信息。

Page 3: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 3 / 29 June 8, 2020

環境設置

本節介紹如何設置 HT32 STL 的測試環境,包括硬體、軟體和基本測試。

硬體

準備一個 Starter Kit 和一根 USB 數據線來下載和測試 HT32 STL 庫。以 HT32F50241 Starter Kit

爲例,板上有兩個 USB 接口。使用 USB 數據線將計算機連接到板上 e-Link32 Pro 接口,如

下圖紅色方框所示。Starter Kit 由 USB 接口供電。

圖 1. ESK32-30507 - HT32F50241 Starter Kit

軟體

在使用 HT32 STL 之前,需要從 Holtek 網站下載最新的 Holtek HT32 固件庫。下載位置如圖

2 所示。下載後解壓文件。

圖 2. HT32 固件庫下載鏈接

注意,HT32 STL 要求 HT32 固件庫的最低版本如下:

Cortex®-M0+:HT32_STD_5xxxx_FWLib_v012_4285

Cortex®-M3:HT32_STD_1xxxx_FWLib_v004_1946

Page 4: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 4 / 29 June 8, 2020

通過下面的鏈接下載 HT32 STL 應用代碼。 HT32 STL 應用代碼被打包成名爲

“HT32_SafetyTest_Library_IEC60730_ClassB_vn_m.zip”的 zip 文件。

下載路徑:http://mcu.holtek.com.tw/ht32/app.fw/SafetyTest_IEC60730_ClassB/

由於應用代碼不包含固件庫文件,用戶需要在開始編譯之前將解壓縮的應用代碼和固件庫

文件放到正確的路徑中。應用代碼文件包含兩個文件夾,分別是“application”和“library”,其

位置如圖 3 所示。將這兩個文件夾放到固件庫根目錄下,以完成文件路徑配置,如圖 4 所

示。用戶還可以將應用代碼和固件庫壓縮文件解壓到相同的路徑中,也能達到相同的效果。

在本例中,解壓縮後在“application”文件夾下可以看到“SafetyTest_IEC60730_ClassB”目錄。

圖 3. “HT32_SafetyTest_Library_IEC60730_ClassB_vn_m.zip”內容

圖 4. 解壓後的文件內容

Page 5: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 5 / 29 June 8, 2020

基本測試

以下步驟說明如何使用 Starter Kit 和 HT32 STL 進行基本測試,以確保硬體和軟體環境都能

正常工作。建議在産品中使用 HT32 STL 之前執行基本測試。

1. 使用 USB 數據線將 Starter Kit 連接到計算機上(詳細描述請參考“硬體”章節)。

2. 解壓固件庫和 HT32 STL zip 文件,並正確配置文件路徑(詳細描述請參考“軟體”章節)。

3. 通過執行“_CreateProject.bat”批處理文件啓動創建項目流程。

“\\application\SafetyTest_IEC60730_ClassB\SafetyTest_Example\_CreateProject.bat”

4. 根據 Starter Kit 的設備型號打開相應的項目文件。例如,打開以下項目文件:

“\\application\SafetyTest_IEC60730_ClassB\SafetyTest_Example\MDK_ARMv5\Project_50241.u

vprojx”。

5. 按下 Keil uVision 中的“Rebuild”圖標(或按下 F7 熱鍵),確認所有的構建操作都已成功,

並且輸出信息與下圖相似。

圖 5. 生成代碼後輸出信息

6. 按下“LOAD”圖標(或菜單中的“Flash→Download”選項)將圖像下載到 Starter Kit 中。

7. 下載完成後,按下“reset”按鈕,LED 將會閃爍(在左側),表示硬體和軟體環境運行正常。

Page 6: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 6 / 29 June 8, 2020

系統架構

下面幾節說明 HT32 STL 的系統架構,包括分層架構、文件/文件夾組織、安全停止函數、使

用流程、儲存器佈局和全局變量冗餘。

分層架構

下圖顯示了 HT32 STL 的分層架構,包括用戶層、STL API 層和安全測試庫(STL)層。分層結

構可以幫助用戶快速地將 HT32 STL 集成到他們的固件/産品中。STL API 層包括 STL 啓動模

塊和主模塊。

復位Reset_Handler()

HT32_STL_StartUp()

main() HT32_STL_MainInit()

HT32_STL_MainRoutine()主超級循環HT32 STL XXX運行時測試

HT32_STL_SafeStopCritical()

HT32 STL XXX啟動測試

ht32fxxxxx_startup_xx.s ht32_stl_startup.c

main.c

ht32_stl_main.c ht32_stl_xxx.c

HT32 STL XXX初始化

用戶層 STL API層 安全測試庫層

HT32_STL_MainTimerHandler_HS()

高速時基 ISR(默認 1 ms)

ht32fxxxxx_it.c

HT32 STL CLK & VARMEM運行時測試 (by interrupt)

Step1Fail

Fail

Step2

Step1

Step2

STL_05_0001

STL_05_0102

低速時基 ISR(默認 1 ms)

HT32_STL_MainTimerHandler_LS()

中斷 ISR(被監控的中斷)

HT32 STL INTHT32_STL_IntTick()

STL_05_0204

HT32 STL INT & CLK運行時測試 (by interrupt)

Fail

Fail

Fail

STL_05_0205

STL_05_0206

STL_05_0207

STL_05_2007

STL_05_0205

STL_05_0206

STL_05_3005, STL_05_4205

STL_05_2006/2008, STL_05_3006

HT32_STL_MainIntTick()

STL_05_0207

STL_05_0201

STL_05_0203

圖 6. HT32 STL 軟體架構

STL 啓動模塊用於對運行時無法測試的測試項執行啓動測試。STL 主模塊是幫助用戶執行

各項自檢功能的主要部分。用戶需要定期調用 STL 主模塊的主程式函數。由於一些自檢不

能中斷或需要不同時間之間的交互,主模塊提供了高速和低速定時器處理程式來收集相關

自檢模塊函數。用戶需要在用戶層配置高速和低速定時器,並調用 STL 主模塊相應的定時

器處理程式。

Page 7: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 7 / 29 June 8, 2020

HT32 STL 組織

HT32 STL 應用代碼包含兩個文件夾,分別是“application”和“library”。下表列出了所有文件夾

/文件及其描述。

文件夾/文件名稱 描述

“\\library\HT32_SafetyTest_Library_IEC60730_ClassB\”

inc\ht32_stl.h HT32 STL 的主要頭文件。

inc\ht32_stl_adc.h

src\ht32_stl_adc.c 模擬 I/O(ADC)測試項的頭文件和源代碼。

inc\ht32_stl_clock.h

src\ht32_stl_clock.c 時鐘測試項的頭文件和源代碼。

inc\ht32_stl_cpu.h

src\ht32_stl_cpu.c CPU 測試項的頭文件和源代碼。

inc\ht32_stl_digitalio.h

src\ht32_stl_digitalio.c 數字 I/O 測試項的頭文件和源代碼。

inc\ht32_stl_interrupt.h

src\ht32_stl_interrupt.c 中斷測試項的頭文件和源代碼。

inc\ht32_stl_invar_memory.h

src\ht32_stl_invar_memory.c 非易失性儲存器(Flash)測試項的頭文件和源代碼。

inc\ht32_stl_pc.h

src\ht32_stl_pc.c 程式計數器測試項的頭文件和源代碼。

inc\ht32_stl_startup.h

src\ht32_stl_startup.c STL 啓動模塊的頭文件和源代碼。

inc\ht32_stl_var_memory.h

src\ht32_stl_var_memory.c

src\ht32_stl_var_memory_run.c

易失性儲存器(SRAM)測試項的頭文件和源代碼。

inc\ht32_stl_debug.h 與調試相關的定義。

inc\ht32_stl_main.h STL 主模塊的頭文件。

“\\application\SafetyTest_IEC60730_ClassB\SafetyTest_Example\”

_Tools\

srec_cat.exe

srec_cmp.exe

srec_info.exe

srec_make.bat

srec_make_IAP.bat

srec_make_manual.bat

SRecord 的相關工具和脚本,可以幫助用戶計算/修改非易失性儲存器

(Flash)測試的圖像校驗和。

linker\linker.lin 不同儲存器佈局配置的 Keil 鏈接器脚本範例。

_CreateProject.bat 創建項目文件的批處理脚本。

_ht32_project_source.h 項目源文件,使用“#include”方式將源代碼文件添加到項目編譯列表中。

此文件包含在“man.c”中。

_ProjectConfig.bat 創建項目文件的配置。

ht32_board_config.h 用於引脚分配和其它設置的板相關配置文件。

ht32_stl_60730b_config.h HT32 STL 配置文件。

ht32_stl_main.c HT32 STL 主模塊的源代碼文件。

ht32f1xxxx_01_it.c

ht32f5xxxx_01_it.c 包含中斷服務程式的文件。

main.c 主函數的源代碼文件。

Page 8: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 8 / 29 June 8, 2020

安全停止函數

因爲用戶需要根據應用的需求來修改程式,所以 HT32 STL 安全停止函數位於 STL 主模塊中,

而不是位於安全測試庫層中。處理、通知和停止這三個主要步驟可以幫助用戶將系統停止在

安全狀態。用戶必須正確執行安全停止函數,才能確保其按預期運行。如果檢測到任何故障,

將調用 HT32 STL 安全停止函數。

開始

除能所有中斷

處理(默認無功能,用戶自定義)

無限循環

通知(默認無功能,用戶自定義)

系統復位

HT32_STL_SafeStopCritical()

復位

停止

STL_05_0201

HT32_STL_SafeStopCritical()

WDT 重新加載

#define HTCFG_STL_SAFESTOP_ENABLE_WDTRELOAD (1)

#define HTCFG_STL_SAFESTOP_RESET (1)#define HTCFG_STL_SAFESTOP_RESET (0)

各種 STL 測試來源

註:以下定義位於“ht32_stl_60730b_config.h”中 #define HTCFG_STL_SAFESTOP_RESET (0) #define HTCFG_STL_SAFESTOP_ENABLE_WDTRELOAD (1)

圖 7. 安全停止函數流程圖

Page 9: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 9 / 29 June 8, 2020

使用流程–啓動程式

在 MCU 復位後,STL 啓動函數由“ht32fxxxxx_startup_nn.s”調用。它會調用 CPU、非易失性儲

存器和易失性儲存器的啓動測試函數。此外,還會檢查 WDT 復位,以確保在程式計數器測

試失敗(由 WDT 復位引起)後調用 HT32 安全停止函數。

開始

CPU 啓動測試

CPU R1 ~ R12 測試

HT32_STL_StartUp()

HT32_STL_CPURegStartupTest()HT32_STL_CPURegRunTest()

[ht32_stl_cpu.c]

STL C 函數_HT32_STL_StartUpCFunction()

[ht32_stl_startup.c]

HT32_STL_InVarMemStartupTest()[ht32_stl_invar_memory.c]

非易失性儲存器

啓動測試

易失性儲存器啓動測試

HT32_STL_VarMemStartupTest()[ht32_stl_var_memory.c]

C 啓動Example: __main()

HT32_STL_SafeStopCritical()

系統初始化SystemInit()

[system_ht32fxxxxx.c]

Fail

Fail

Fail

main()

註:測試項 1、2、3 和 4 位於安全測試庫層的“ht32_stl_xxx.c”中。

1

3

4

WDT 復位檢查HT32_STL_ProgramCounterWDTCheck()

[ht32_stl_pc.c]

2PC 測試或硬故障後發生 WDT 復位

STL_05_0102

復位Reset_Handler()

STL_05_1302

STL_05_4102

STL_05_4202

STL_05_1102STL_05_1104

HT32_STL_StartUp()

初始化全局變量(RW 和 ZI)

圖 8. 啓動程式流程圖

Page 10: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 10 / 29 June 8, 2020

使用流程–主初始化程式

主初始化函數將在進入“main()”函數後調用一次。它會對 STL 主全局變量冗餘進行初始化,

實現 MCU 和各自檢模塊的必要配置。

開始

初始化 STL 主全局變量冗餘

使能必要的 IP 時鐘

HT32_STL_CPUStackTestInit()[ht32_stl_cpu.c]

中斷測試初始化

HT32_STL_SafeStopCritical()

CPU 堆棧測試初始化

HT32_STL_ProgramCounterTestInit()[ht32_stl_pc.c]

易失性儲存器測試初始化

HT32_STL_MainInit()

返回

HT32_STL_VarMemRunInit()[ht32_stl_var_memory.c]

時鐘測試初始化HT32_STL_CLKRunTestInit()

[ht32_stl_clokc.c]

PC 測試初始化

HT32_STL_IntMonitorInit()[ht32_stl_interrupt]

main()

STL_05_0203

STL_05_1103

STL_05_1303

STL_05_2003

STL_05_3003

STL_05_4203

Fail

HT32_STL_MainInit()

圖 9. 主初始化程式流程圖

Page 11: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 11 / 29 June 8, 2020

使用流程–主程式

主程式函數在進入“main()”函數後由用戶的主超循環定期調用,可以幫助用戶執行各項自檢

功能,包括 CPU、程式計數器、中斷、非易失性儲存器、GPIO(可選)和模擬 I/O(ADC)。

開始

CPU R1 ~ R12 測試HT32_STL_CPURegRunTest()

[ht32_stl_cpu.c]

CPU 堆棧測試HT32_STL_CPUStackCheck()

[ht32_stl_cpu.c]

HT32_STL_FLASH_CRCCheck()[ht32_stl_invar_memory.c] 非易失性儲存器測試

HT32_STL_SafeStopCritical()

PC 測試HT32_STL_ProgramCounterRunTest()

[ht32_stl_pc.c]

Fail

Fail

Fail模擬 I/O (ADC) 測試

HT32_STL_MainRoutine()

Fail

Fail

測試 OK返回

HT32_STL_ADCUnusedChannelCheck()HT32_STL_ADCUsedChannelCheck()

[ht32_stl_adc.c]

GPIO 輸出測試

(可選)HT32_STL_GPIO_OutputCheck()

[ht32_stl_digitalio.c]Fail

中斷測試HT32_STL_IntMonitorMainRoutine()

[ht32_stl_interrupt]

主超級循環

STL_05_0204

STL_05_1104

STL_05_1304

STL_05_2004

STL_05_4104

STL_05_7104

STL_05_7204

Fail

STL_05_1108

HT32_STL_MainRoutine()

圖 10. 主程式流程圖

Page 12: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 12 / 29 June 8, 2020

使用流程–中斷服務程式 (ISR)

高速定時器處理程式會調用時鐘和易失性儲存器的自檢功能。用戶需要在用戶層配置高速

定時器,在高速 ISR 中調用 STL 主模塊的高速定時器處理程式。

開始

時鐘測試HT32_STL_CLKHighSpeedHandler()

[ht32_stl_clock.c]

易失性儲存器測試HT32_STL_VarMemRunTest()

[ht32_stl_var_memory.c]

HT32_STL_SafeStopCritical()

Fail

HT32_STL_MainTimerHandler_HS()

Fail

測試 OK返回

STL_05_0205

高速時基 ISR(默認 1 ms)

STL_05_3005

STL_05_4205

HT32_STL_MainTimerHandler_HS()

圖 11. 高速中斷服務程式流程圖

低速定時器處理程式會調用中斷和時鐘自檢功能。用戶需要在用戶層配置低速定時器,在低

速 ISR 中調用 STL 主模塊的低速定時器處理程式。

開始

時鐘測試HT32_STL_CLKLowSpeedHandler()

[ht32_stl_clock.c]

中斷測試HT32_STL_IntMonitorHandler()

[ht32_stl_interrupt.c]

HT32_STL_SafeStopCritical()

Fail

HT32_STL_MainTimerHandler_LS()

Fail

測試 OK返回

STL_05_0206

低速時基 ISR(默認 1 s)

STL_05_3006

STL_05_2006

HT32_STL_MainTimerHandler_LS()

圖 12. 低速中斷服務程式流程圖

Page 13: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 13 / 29 June 8, 2020

主中斷節拍函數是爲 HT32 STL 中斷監控機制而設計的。被監控中斷的中斷服務程式(ISR)必

須調用主中斷節拍函數以執行中斷監控機制的相關進程。

開始

中斷測試HT32_STL_IntTick() [ht32_stl_interrupt.c]

HT32_STL_SafeStopCritical()

Fail

測試 OK返回

STL_05_0207

XXXX_IRQHandler()

STL_05_2007

HT32_STL_MainIntTick()中斷 ISR

(被監控的中斷)

HT32_STL_MainIntTick()

圖 13. 主中斷節拍函數流程圖

儲存器佈局

下圖顯示了系統易失性儲存器 (SRAM)的默認儲存器佈局。“#define XXXX”是可以在

“ht32_stl_60730b_config.h”配置文件中找到的配置設置。這種儲存器佈局要求用戶更改 RW 基

址,是實現儲存器分區的一種方便的方法。用戶還可以使用鏈接器脚本來實現更複雜的佈

局,例如將其它 Class A 變量(與 Class B 功能無關)定位到另一個空間,减少冗餘儲存器的大

小,從而節省儲存器的使用。Keil 鏈接器脚本範例可以在以下路徑中找到。詳細描述請參考

“不同的儲存器佈局”章節。

“\\application\SafetyTest_IEC60730_ClassB\SafetyTest_Example\Linker\linker.lin”

Page 14: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 14 / 29 June 8, 2020

預留給系統

0x20000000

冗餘儲存器

SRAM 佈局

VarMemTest 指針

0x20000010

VarMemTest 指針 Inv.

0x20000014

0x20000018

VarMemTest 緩衝器

(4 位元組 × 6 )

0x2000001C

WDT 復位計數 Inv.

0x20000020

WDT 復位計數

0x20000080

0x20000380 RW 基址

#define HTCFG_STL_VARMEM_LENGTH

#define HTCFG_STL_VARMEM_RUN_PTR

#define HTCFG_STL_VARMEM_RUN_PTRINV

#define HTCFG_STL_VARMEM_RUN_BUFFER

#define HTCFG_STL_PC_WDT_RESETCNT_ADDR

#define HTCFG_STL_PC_WDT_RESETCNT_ADDRINV

全域儲存器

(RW, ZI, 堆棧)

.

.

.

.

.

.保留 (72 位元組)

STL_05_4208

#define HTCFG_STL_VARMEM_RUN_CLASSB_START

#define HTCFG_STL_VARMEM_RUN_CLASSB_END0x20000680

#define HTCFG_STL_VARMEM_STARTUP_RAM_END

#define HTCFG_STL_VARMEM_STARTUP_RAM_START

圖 14. HT32 STL 默認儲存器佈局

Page 15: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 15 / 29 June 8, 2020

下圖是一個簡化的儲存器佈局,有助於理解易失性儲存器(SRAM)測試項的測試範圍。易失

性儲存器的啓動測試從“HTCFG_STL_VARMEM_STARTUP_RAM_START”地址開始,到

“HTCFG_STL_ VARMEM_STARTUP_RAM_END”地址結束。易失性儲存器(包括 Class B 全域

儲存器和冗餘儲存器)運行時自檢從“HTCFG_STL_VARMEM_RUN_CLASSB_START”地址開

始,到“HTCFG_STL_VARMEM_RUN_CLASSB_END”地址結束。

冗餘儲存器

SRAM 佈局

0x20000080

0x20000380

全域儲存器

(RW, ZI, 堆棧)

.

.

.

STL_05_4210-1

0x20000000

0x20000680

#define HTCFG_STL_VARMEM_RUN_CLASSB_START

#define HTCFG_STL_VARMEM_RUN_CLASSB_END

.

.

.

#define HTCFG_STL_VARMEM_STARTUP_RAM_END

啟動測

試範圍

#define HTCFG_STL_VARMEM_STARTUP_RAM_START

運行時

測試範

圖 15. 易失性儲存器的測試範圍

Class B 全局變量冗餘

爲了提高儲存在 SRAM 中信息的可靠性,全局變量應該以不同的格式保存在被物理分區的

雙儲存器中。如前一節的儲存器映射所示,系統爲 Class B 全局變量保留了一個冗餘儲存器

區域。與安全功能相關的 Class B 全局變量應該使用該區域來保存冗餘值。該機制只是通過

用全局變量地址减去偏移量(由 HTCFG_STL_VARMEM_LENGTH 定義),將儲存器地址從全

域儲存器重映射到冗餘儲存器。例如,如果全局變量的地址是 0x20000390,那麽冗餘地址應

該是 0x20000390 - 0x300 = 0x20000090。該機制使用取反運算作爲保存格式。

Page 16: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 16 / 29 June 8, 2020

要求 方法 範例

獨立區域 保留一個冗餘儲存器區域並將全局

變量重映射於其中。

地址

全局變量:0x20000390

冗餘:0x20000090

不同格式 取反運算 全局變量:0x000055AA

冗餘:0xFFFFAA55

冗餘 = ~(全局變量)

根據上述要求,該機制提供了以下巨集來實現冗餘流程。

巨集 說明 範例

SYNC 讀取全局變量,取反並保存到冗餘。 A’ = ~A

SET 將全局變量和冗餘設置爲相同的值。 A = A’ = value

SAVE 讀取冗餘,取反並保存到冗餘。 A’ = ~A’

CHECK 通過 XOR 運算檢查全局變量和冗餘是否正確。 Is (A ^ A’) == 0xFFFFFFFF ?

VERIFY 與 CHECK 巨集的操作相同,但如果檢查失敗,需進入安全

停止函數。

If (A ^ A’) == 0xFFFFFFFF

return A

Else

call Safe Stop function

註:A’表示變量 A 的冗餘。

下面的範例說明如何使用這些巨集來實現與 Class B 安全相關的全局變量冗餘。注意,全局

變量包括 RW(有初始值)、ZI(初始值爲零,無初始值時會被設置爲“0”)和 Stack,由 HT32 STL

啓動函數調用的 C 啓動函數初始化。詳細描述請參考 STL_05_0102 啓動函數。此外,自檢

模塊內部的(全局變量的)冗餘通常由 HT32 STL XXX 初始化函數發起,該函數應該在進入

“main()”函數(調用一次)之初由 HT32 STL 主初始化函數調用。反之,位於 STL 主模塊層或用

戶層的冗餘應該由用戶使用此處提到的巨集來處理。

u32 gINT_TestFlag = 0x00000055;

….

SYNC(gINT_TestFlag); // Sync once when init, (gINT_TestFlag’)= 0xFFFFFFAA;

….

SET(gINT_TestFlag) = 0x00000001; // gINT_TestFlag = gINT_TestFlag’ = 0x1

SAVE(gINT_TestFlag); //(gINT_TestFlag’) = ~(gINT_TestFlag’)

….

if (CHECK(gINT_TestFlag)) // Execute following code only if the redundant is OK.

{

if (gINT_TestFlag == 0x00000001)

{

// Do process here

}

}

….

if (VERIFY(gINT_TestFlag) == 0x00000001) // Enter the Safe Stop function when CHECK failed.

{

// Do process here

}

Page 17: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 17 / 29 June 8, 2020

使用說明

集成範例與檢查點

第一步是將 HT32 STL 集成到項目文件中。將下列文件夾和文件從 HT32 STL 範例路徑複製

到項目根目錄下(與“main.c”的路徑相同)。

“\\application\SafetyTest_IEC60730_ClassB\SafetyTest_Example\”

“_Tools\”

“Linker”

“_ht32_project_source.h”

“ht32_stl_60730b_config.h”

“ht32_stl_main.c”

還需將 HT32 STL 庫文件定位到以下路徑(請參考“HT32 STL 組織”章節)。

“\\library\HT32_SafetyTest_Library_IEC60730_ClassB\inc”

“\\library\HT32_SafetyTest_Library_IEC60730_ClassB\src”

爲了滿足 HT32 STL 的需求,下表列出了修改項目和源代碼的步驟。

步驟 相關文件 說明

1 Include Path

將下面的 Include Path 添加到項目的“Options for Target”中。

“..\..\..\..\library\HT32_SafetyTest_Library_IEC60730_ClassB\inc”

Page 18: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 18 / 29 June 8, 2020

步驟 相關文件 說明

2 After Build

添加 After Build 命令“srec_make.bat $D”。

需要將“srec_make.bat”文件從“_Tools”文件夾手動複製到項目文件文件夾(例如“MDK_ARMv5\”)

中。

3 RW Base 將 RW 基址由 0x20000000 修改爲 0x20000380(默認值)。請參考“儲存器佈局”和“HT32 STL 設置”章節來修改 RW 基址。

4 Flash Programming

Init File

將下面的“CRC_LOAD.ini”文件添加到 Keil uVision 的 Flash 燒錄初始化文件中。該文件是在生成

代碼之後由“srec_make.bat”創建的(意味著還需在此手動輸入文件名,因爲完成設置並生成代碼是

不完整的)。“CRC_LOAD.ini”文件用於將 CRC 校驗和燒錄到 Flash 中,以進行非易失性儲存器測

試。

5 WDT 在“system_ht32fxxxxx_nn.c”文件中,將“WDT_ENABLE”由 0 修改到 1,並更改 WDT 相關設置。需

要將重新加載 WDT 函數添加到代碼中。

Page 19: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 19 / 29 June 8, 2020

步驟 相關文件 說明

6 Timer

在使用 HT32 STL 之前,需要正確配置高速和低速定時器。建議參考“基本測試”章節中 HT32 STL

測試範例代碼的“main.c”和“ht32fxxxxx_nn_it.c”文件。

高速定時器(默認 1 ms)

低速定時器(默認 1 s)

7 IRQ Handler

需要注意以下 IRQ 處理程式。請參考 HT32 STL 範例代碼中的“ht32fxxxxx_nn_it.c”文件,仔細比

較/修改到相應的文件。

“HardFault_Handler()”

“SysTick_Handler()”

“RTC_IRQHandler()”

8 “ht32fxxxxx_nn_it.c”

需要添加兩個 include 文件。

#include “ht32_stl_60730b_config.h”

#include “ht32_stl.h”

9 “main.c”

需要添加三個 include 文件。

#include “ht32_stl_60730b_config.h”

#include “ht32_stl.h”

#include “_ht32_project_source.h”

以上操作完成後,需要修改項目的額外系列文件。下圖和表格說明了如何將 HT32 集成到用

戶固件中的步驟。同時也是一個檢查列表,有助於確認集成是否正確。

復位Reset_Handler()

HT32_STL_StartUp()

main() HT32_STL_MainInit()HT32_STL_MainStart()

HT32_STL_MainRoutine()主超級循環HT32 STL XXX運行時測試

HT32_STL_SafeStopCritical()

HT32 STL XXX啟動測試

ht32fxxxxx_startup_xx.s ht32_stl_startup.c

main.c

ht32_stl_main.c ht32_stl_xxx.c

HT32 STL XXX初始化

用戶層 STL API 層 安全測試庫層

HT32_STL_MainTimerHandler_HS()

高速時基 ISR(默認 1 ms)

ht32fxxxxx_it.c

HT32 STL CLK & VARMEM運行時測試 (by interrupt)

Fail

Fail

STL_05_0002

低速時基 ISR(默認 1 s)

HT32_STL_MainTimerHandler_LS()

中斷 ISR(被監控的中斷)

HT32 STL INTHT32_STL_IntTick()

HT32 STL INT & CLK運行時測試 (by interrupt)

Fail

Fail

Fail

HT32_STL_MainIntTick()

Step 1

Step 2Step 3

Step 4

Step 5

Step 6

Step 7

Step 8

圖 16. 集合範例和檢查點

Page 20: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 20 / 29 June 8, 2020

步驟 相關文件 函數和說明

1 “ht32fxxxxx_startup_xx.s”

HT32_STL_StartUp() (Note 1)

此函數必須由“Reset_Handler()”調用。

2 “main.c”

HT32_STL_MainInit()

此函數必須在進入“main()”函數後調用(一次)。

3 “main.c”

HT32_STL_MainStart()

此函數必須在進入“main()”函數後(高/低速定時器初始化之後)調用(一次)。

4 “main.c”

HT32_STL_MainRoutione()

此函數必須由“main()”函數中的用戶超級循環定期調用。

5 “ht32fxxxxx_nn_it.c” (Note 2)

HT32_STL_MainTimerHandler_HS()

此函數必須由高速定時器 ISR 調用。默認時間爲 1 ms。

Page 21: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 21 / 29 June 8, 2020

步驟 相關文件 函數和說明

6 “ht32fxxxxx_nn_it.c” (Note 2)

HT32_STL_MainTimerHandler_LS()

This function must be called by the Low-Speed Timer ISR. Default time is 1 second.

此函數必須由低速定時器 ISR 調用。默認時間爲 1 s。

7 “ht32fxxxxx_nn_it.c” (Note 2)

HT32_STL_MainIntTick()

此函數必須由被監控中斷的 ISR 調用。“&gIntMonitorList[n] ”參數是帶有中斷 ID 的結構指

針。此外,還需編輯在安全停止 ID 中的中斷 ID(“n”和 STL_DID_INT_TICK 進行按位或運

算,用於調試目的)。

HT32_STL_SAFESTOP_FUN(STL_DID_INT_TICK | n);

詳細描述請參考“gIntMonitorList[]”(在“ht32_stl_main.c”中)以及步驟 8。

8 ht32_stl_main.c

gIntMonitorList[]

中斷信息列表保存了中斷測試的參數。根據應用中需要監控的中斷來編輯結構體並添加新

值。

9 ht32_stl_main.c HT32_STL_SafeStopCritical()

確認安全停止函數操作正確,運行正常。

註:1. 對於 HT32 STL 的默認範例,“ht32fxxxxx_startup_xx.s”由“_CreateProject.bat”自動修改。

使用“gsar.exe”工具,相關配置位於“_ProjectConfig.bat”文件中。如果使用現有的項目

/代碼,可能需要手動將“HT32_STL_StartUp()”函數修改到啓動文件中。

2. 用戶可以將中斷服務程式(ISR)從“ht32fxxxxx_nn_it.c”中移到另一個 C 源代碼文件中。

需要確認“HT32_STL_MainTimerHandler_HS()”、“HT32_STL_MainTimerHandler_LS()”

和“HT32_STL_MainIntTick()”函數在相應的定時器 ISR 中已被正確調用。

Page 22: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 22 / 29 June 8, 2020

HT32 STL 設置

下表顯示了位於 “ht32_stl_60730b_config.h” 文件中的一些 HT32 STL 設置 ( 可以在

“\\application\SafetyTest_IEC60730_ClassB\SafetyTest_Example”範例的根目錄中找到)。這些設置

以“HTCFG_STL_”前綴開始,修改前請檢查每個設置的描述。

設置的名稱 描述

安全停止

HT32_STL_SAFESTOP_FUN(id)

安 全 停 止 函 數 的 別 名 。 默 認 值 是

“HT32_STL_SafeStopCritical(id)”。有助於用戶

快速更改安全停止的實現。

HTCFG_STL_SAFESTOP_LED_INDICATOR 1:進入安全停止函數時打開 LED。

0:無操作。

HTCFG_STL_SAFESTOP_RESET 在安全停止函數中復位系統。

HTCFG_STL_SAFESTOP_ENABLE_WDTRELOAD

在安全停止函數中重新加載 WDT。當

“HTCFG_STL_SAFESTOP_RESET = 1”時,此

設置無意義。

HTCFG_STL_SAFESTOP_WHEN_HARDFAULT 如果發生硬故障異常,將進入安全停止函數。

STL 測試控制

HTCFG_STL_STARTUPTEST_EN_CPU

HTCFG_STL_STARTUPTEST_EN_INVARMEM

HTCFG_STL_STARTUPTEST_EN_VARMEM

HTCFG_STL_RUNTEST_EN_CPU

HTCFG_STL_RUNTEST_EN_PC

HTCFG_STL_RUNTEST_EN_INT

HTCFG_STL_RUNTEST_EN_CLK

HTCFG_STL_RUNTEST_EN_INVARMEM

HTCFG_STL_RUNTEST_EN_VARMEM

HTCFG_STL_RUNTEST_EN_DIO

HTCFG_STL_RUNTEST_EN_AIO

這些設置用於使能和除能每個測試函數。當

設置爲 0 時,將忽略測試函數。

程式計數器

HTCFG_STL_PC_FUN1ADDR 用於初始化測試函數 1 的 Flash 儲存器地址

並執行該測試函數。

HTCFG_STL_PC_FUN2ADDR 用於初始化測試函數 2 的 Flash 地址並執行

該測試函數。

HTCFG_STL_PC_WDT_NORMALRESETCNT_SAFESTOP

正常模式下最大 WDT 復位計數值。當 WDT

復位發生且復位計數值達到正常模式下最大

WDT 復位計數值時,STL 將進入安全停止函

數。正常模式意味著 WDT 復位原因不是程式

計數器測試失敗或硬故障。

中斷

HTCFG_STL_INT_MAINROUTINE_MAXCHKTIME

最大中斷主程式檢查時間,應根據主超級循環

的總執行時間進行調整。如果全域計數值

“gINT_MainRoutineCount”大於最大檢查時間

(意味著在一段時間內不調用中斷監控處理程

式),則會執行安全停止函數。

時鐘

HTCFG_STL_CLK_HIGHSPEED_HZ 高速中斷的頻率。

HTCFG_STL_CLK_LOWSPEED_HZ 低速中斷的頻率。

HTCFG_STL_CLK_TOLERANCE 時鐘容差,例如“0.25”。

非易失性儲存器(Flash)

HTCFG_STL_INVARMEM_HWCRC 1:硬體 CRC,0:軟體 CRC。

HTCFG_STL_INVARMEM_BLOCK_SIZE 每次調用“HT32_STL_FLASH_CRCCheck()”時的塊大小。

Page 23: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 23 / 29 June 8, 2020

設置的名稱 描述

HTCFG_STL_INVARMEM_AP_FLASH_START 應用圖像的起始地址。

易失性儲存器(SRAM)

HTCFG_STL_VARMEM_STARTUP_RAM_START 啓動測試的起始地址。

HTCFG_STL_VARMEM_STARTUP_RAM_END 啓動測試的結束地址。必須是 16 位元組對齊。

HTCFG_STL_VARMEM_RUN_CLASSB_START 運行時測試的起始地址。

HTCFG_STL_VARMEM_RUN_CLASSB_END 運行時測試的結束地址。

HFCFG_STL_VARMEM_RUN_BLOCK_SIZE 運行時測試的塊大小。必須爲 2~x (x 是

VarMemTest 緩衝器大小的 1/4)。

HFCFG_STL_VARMEM_RUN_BLOCK_OVERLAP 運行時測試的重叠。

HTCFG_STL_VARMEM_RUN_TEST_COUNT_MS 易失性儲存器測試的測試時間間隔(以微秒

爲單位)。

HTCFG_STL_VARMEM_MARCHX 1: March X,0: March C。March X 比 March C

快。

HTCFG_STL_VARMEM_RUN_PTR 運行時測試的儲存器指針。

HTCFG_STL_VARMEM_RUN_PTRINV 儲存器指針的冗餘。

HTCFG_STL_VARMEM_RUN_BUFFER 運行時測試的備份緩衝器。

HTCFG_STL_VARMEM_LENGTH Class B/冗余區域的長度。

模擬 I/O

HTCFG_STL_ADC_INTERCH ADC 內部通道編號。

HTCFG_STL_ADC_INTERCH_MAX ADC 最大期望值。

HTCFG_STL_ADC_INTERCH_MIN ADC 最小期望值。

HTCFG_STL_ADC_TIMEOUT_LOOP

“HT32_STL_ADCInternalChannelCheck()” 函數

的超時循環計數。應根據 ADC 設置的轉換時

間進行調整。

不同的儲存器佈局

爲了將其它 Class A 變量(與 Class B 函數無關)定位到另一個空間,以减少冗餘儲存器的大小

和易失性儲存器運行時測試的測試時間,下面的路徑中提供了一個 Keil 鏈接器脚本範例。

“\\application\SafetyTest_IEC60730_ClassB\SafetyTest_Example\Linker\linker.lin”

鏈接器脚本有助於實現複雜的儲存器佈局。下圖顯示了使用鏈接器脚本時的儲存器佈局範例。

Page 24: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 24 / 29 June 8, 2020

預留給系統和 STL 測試

0x20000000

冗餘儲存器

儲存器佈局

0x20000080

0x20000380Class B

全域儲存器

(RW, ZI, 堆棧)

Class A全局儲存器

(RW, ZI)

STL_05_4211

0x20000680

RAM_CLASSB 0x20000380 0x300 { ht32_stl_*.o (+RW +ZI) startup_*.o (+RW +ZI) ; Add your Class B Global variable here ; =============================================== ; xxxx.o (+RW +ZI) }

RAM_CLASSA 0x20000680 { .ANY (+RW +ZI) }

圖 17. 使用鏈接器脚本的儲存器佈局

請參考下面的步驟在項目中使用鏈接器脚本。

1. 打開 Keil uVision 中項目的“Options for Target”,切換到“Linker”選項卡,將“Scatter File”設

置爲“linker.lin”(在前面的小節中有提到文件路徑)。

圖 18. 使用鏈接器脚本(linker.lin)的鏈接器設置

Page 25: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 25 / 29 June 8, 2020

2. 打開“_ht32_project_source.h”並將“HTCFG_ENABLE_PROJECT_SOURCE”設置由 1 修改爲

0。將以下文件添加到項目編譯列表中,如下所示。

圖 19. 使用鏈接器脚本時的設置和編譯列表

HT32 STL 花費時間

在項目中添加 HT32 STL 之後,需要考慮的一個重要事項是每個 HT32 STL 測試項的花費時

間,包括啓動測試和定期自檢。測試花費時間影響應用的實現和性能。例如,易失性儲存器

測試項在測試期間訪問 RAM(將備份 RAM 內容並恢復),需要最高的中斷優先級,並且不能

被其它函數中斷。瞭解易失性儲存器測試項的花費時間有助於配置適當的 HT32 STL 參數以

及如何定位代碼和 HT32 STL 以實現應用和 IEC 60730-1 Class B 的需求。HT32 STL 主程式(主

超級循環以低優先級執行的其它測試項)所需的總花費時間也受到應用的影響,例如用戶接

口設計,因爲它通常由主超級循環調用。此外,還應注意完成 HT32 STL 測試的每個測試項

所需的總時間,因爲它會影響 HT32 STL 檢測到錯誤的響應時間。IEC 60730-1 Class B 定義

了各類産品/應用中每個安全相關功能的合理響應時間。

HT32 STL 集成了使用 GPIO 翻轉的基本時間測量功能。可以使用邏輯分析器之類的工具來

確認每個 HT32 STL 測試項的花費時間。下面的內容顯示了 HT32 STL 配置文件

(“ht32_stl_config.h”)中集成的基本時間測量的相關配置。IO3僅用於HT32 STL主程式的測量。

IO1 和 IO2 用於多種功能(可設置)的測量。前兩個設置需設爲“1”,其它設置根據需求進行修

改。

#define HTCFG_STL_DEBUG_EN

….

#define HTCFG_STL_DEBUG_EN_IO

….

#define HTCFG_STL_DEBUG_EN_MAIN

#define HTCFG_STL_DEBUG_EN_MAIN_HS

#define HTCFG_STL_DEBUG_EN_INT

#define HTCFG_STL_DEBUG_EN_INVARMEM

#define HTCFG_STL_DEBUG_EN_VARMEM

(1) // Global Debug Control

(1) // Debug IO Control

(1) // Message & IO3 (StartupTest, Routine)

(1) // IO2 (TimerHandler_HS)

(0) // Message & IO3 (IntMonitorHandler)

(0) // IO1 (Cycle Finished), IO2 (Block Finished)

(0) // IO1 (Cycle Finished), IO2 (Block Finished)

Page 26: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 26 / 29 June 8, 2020

#define HTCFG_STL_DEBUG_IO1_GPIOX

#define HTCFG_STL_DEBUG_IO1_GPION

#define HTCFG_STL_DEBUG_IO2_GPIOX

#define HTCFG_STL_DEBUG_IO2_GPION

#define HTCFG_STL_DEBUG_IO3_GPIOX

#define HTCFG_STL_DEBUG_IO3_GPION

B

6

B

7

B

8

由於大部分測試是由 MCU 代碼執行,所以花費時間隨 MCU 內核速度的不同而不同。下表

顯示了 HT32F50241(20 MHz 不帶 Flash 加速器)和 HT32F65240(60 MHz 帶 Flash 緩存)花費時間

的範例。因爲測試環境對花費時間結果有很大的影響,如編譯器版本、編譯器優化設置和 C

代碼/函數實現等,所以本範例測試結果可以作爲參考,但不能保證。

測試項

HT32F50241

(20 MHz 不帶

Flash 加速器)

HT32F65240

(60 MHz 帶

Flash 緩存)

啓動測試–非易失性儲存器 2.9 ms

(7,176 位元組)

1.1 ms

(7,320 位元組)

啓動測試–易失性儲存器

March X,8,192 位元組 2.7 ms 0.9 ms

啓動測試–儲存器總花費時間: 5.6 ms 2.0 ms

自檢–CPU 暫存器 14.4 µs 5.7 µs

自檢–程式計數器 4.5 µs 2.4 µs

自檢–中斷 4.8 µs 2.3 µs

自檢–非易失性儲存器

1 塊,16 位元組 15.7 µs 7.4 µs

自檢–數字 I/O (2)

N/A N/A

自檢–模擬 I/O 15.6 µs (3)

7.3 µs (4)

“HT32_STL_MainRoutine()”總花費時間:(5)

56 µs 26 µs

自檢–非易失性儲存器全部完成(5)

27.2 ms

(7,176 位元組)

13 ms

(7,320 位元組)

自檢–易失性儲存器

March X,正常情况:

塊大小 = 6,重叠 = 2

1 塊

(24 位元組/10 ms) 18.7 µs 8.7 µs

全部完成(6)

0.97 s 0.97 s

自檢–易失性儲存器

March X,最快情况:

塊大小 = 2,重叠 = 1

1 塊

(8 位元組/10 ms) 6.2 µs 2.8 µs

全部完成(6)

3.85 s 3.85 s

註:

1. CPU 暫存器啓動測試的花費時間測量沒有集成到 HT32 STL 中。

2. 取决於所使用的 I/O 數量和 STL 函數,不包括在這個測量中。

3. 取决於以下 ADC 設置並轉換一個內部 ADC 通道。

ADC 時鐘 20 MHz / 4 = 5 MHz,

採樣時間 = (1.5 + 2 + 12.5)= 16 T

4. 取决於以下 ADC 設置並轉換一個內部 ADC 通道。

ADC 時鐘 60 MHz / 4 = 15 MHz,

採樣時間 = (1.5 + 2 + 12.5)= 16 T

5. 包括函數調用和 I/O 控制的花費時間。結果將根據中斷的影響而改變。

6. 結果是基於 1,536 位元組的 SRAM 測試。“全部完成”時間可以通過以下公式計算:

全部完成時間 = (儲存器大小 / ((塊大小 - 重叠) × 4 位元組)) × 塊測試時間間隔,

其中,

儲存器大小 = (HTCFG_STL_VARMEM_RUN_CLASSB_END -

Page 27: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 27 / 29 June 8, 2020

HTCFG_STL_VARMEM_RUN_CLASSB_START)

塊大小 = HFCFG_STL_VARMEM_RUN_BLOCK_SIZE

重叠 = HFCFG_STL_VARMEM_RUN_BLOCK_OVERLAP

塊測試時間間隔 = HTCFG_STL_VARMEM_RUN_TEST_COUNT_MS

範例:(1536 / ((6 - 2) × 4)) × 10 ms = 960 ms

HT32 STL 調試

HT32 STL 有一些集成的調試功能,如下所示:

調試消息:使用 printf 重定向到 UxART。

調試 I/O:用於前面討論的時間測量。

LED 指示燈:指示自檢失敗,已安全停止。

安全停止 ID:指示安全停止的失敗源。

下表顯示了 HT32 STL 的調試相關設置。這些設置可以在 HT32 STL 配置文件

“ht32_stl_60730b_config.h”中找到。有關每個設置交互的詳細描述,請參考“ht32_stl_debug.h”文件。

設置名稱 說明

全域調試設置

HTCFG_STL_DEBUG_EN

全域調試控制

0:除能所有調試功能

1:使能調試功能(根據每個測試項的調試設置)

HTCFG_STL_DEBUG_EN_MSG

調試消息控制

0:除能所有調試消息

1:使能調試消息(根據每個測試項的調試設置)

HTCFG_STL_DEBUG_EN_ERR

錯誤消息控制

0:除能所有錯誤消息

1:使能錯誤消息

註:錯誤消息是調試消息的一種,意味著它是由

“HTCFG_STL_DEBUG_EN_MSG”設置控制的。

HTCFG_STL_DEBUG_EN_IO

調試 I/O 控制

0:除能所有調試 I/O

1:使能調試 I/O(根據每個測試項的調試設置)

使能/除能每個測試項的調試功能

HTCFG_STL_DEBUG_EN_MAIN 消息 & IO3 (啓動測試,程式)

HTCFG_STL_DEBUG_EN_MAIN_HS IO2 (TimerHandler_HS)

HTCFG_STL_DEBUG_EN_PC 消息

HTCFG_STL_DEBUG_EN_INT 消息 & IO3 (IntMonitorHandler)

HTCFG_STL_DEBUG_EN_CLK 消息

HTCFG_STL_DEBUG_EN_INVARMEM IO1 (循環完成),IO2 (塊完成)

HTCFG_STL_DEBUG_EN_VARMEM IO1 (循環完成),IO2 (塊完成)

當 HT32 STL 不能按預期工作時,例如由於未知原因進入安全停止函數,首先檢查安全停止

ID,以定位安全停止的失敗源。安全停止 ID 是一個 16 位編碼的參數,由每個 HT32 STL 測

試函數傳遞給安全停止函數。每個 STL 測試函數都有一個唯一的安全停止 ID,安全停止 ID

的格式如下:

0xMMNN

Page 28: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 28 / 29 June 8, 2020

其中“MM”爲 HT32 STL 測試項的 ID,“NN”爲失敗原因的子 ID。實際的 ID 值可以在

“ht32_stl_debug.h”文件中找到。例如,0x4102 表示失敗源在非易失性儲存器測試中,以及失

敗原因是啓動測試。

此外,全局變量冗餘的驗證函數也會調用安全停止函數,但是它傳遞給安全停止函數的是儲

存器失敗地址(SRAM 地址),而不是安全停止 ID。對於 Cortex®-Mx 預定義的儲存器映射,儲存

器地址必須是 0x2xxxxxxx。ID 值的第 29 位可用於區分安全停止 ID 和儲存器失敗地址。

當前的安全停止 ID 可以通過調試錯誤消息或 Keil uVision 調試模式獲得。安全停止 ID 的錯

誤消息如下圖所示:

STL Main Startup Test ....

HT32_STL_SafeStopCritical(), DID = 0x00004102

下圖顯示了通過 Keil uVision 調試模式獲取安全停止 ID 的方法。進入 Keil uVision 調試模式,

並在安全停止函數“HT32_STL_SafeStopCritical()”(在“ht32_stl_main.c”中)的開始處設置一個斷

點,之後可以在暫存器窗口的 R0 中找到安全停止 ID。

圖 20. 使用 Keil uVision 獲取安全停止 ID

獲 取 安 全 停 止 的 失 敗 源 之 後 , 可 以 通 過 設 置 “HTCFG_STL_DEBUG_EN” 、

“HTCFG_STL_DEBUG_EN_MSG”和“HTCFG_STL_DEBUG_EN_XXX”(XXX 表示 HT32 STL 的測

試項名稱)爲 1 來使能更多調試消息。在此之後,可以觀察每個 HT32 STL 測試項的調試消息來

確定故障的根本原因。

結論

本應用筆記描述了 Holtek HT32 STL 的功能、環境、系統架構和使用說明,並演示了如何將

HT32 STL 集成到用戶的固件中。使用 HT32 STL,用戶可免去 UL/IEC 60730-1 Class B 規範內

要求的元件自檢程式開發時間,大幅縮短軟體認證周期,節省可觀的開發與認證成本。

Page 29: HT32 UL / IEC 60730-1 Class B 安全測試庫 使用指南 - Holtek...Gsar 和SRecord 包含在HT32 固件庫中,HT32 UL/IEC 60730- 1 Class B STL 是以原始Windows 二進制版本(.exe

HT32 UL / IEC 60730-1 Class B 安全測試庫使用指南

AN0554TC V1.00 29 / 29 June 8, 2020

參考資料

“IEC 60730-1:家用和類似用途的自動電氣控制器”,國際電工委員會,3.2 版,2007-03。

HT32 系列 Datasheet 和用戶手册。

版本及修改信息

日期 作者 發行、修訂說明

2020.02.27 劉威廷(Weiting Liu) V1.00

免責聲明

本網頁所載的所有數據、商標、圖片、鏈接及其他數據等(以下簡稱「數據」),只供參考

之用,盛群半導體股份有限公司及其關聯企業(以下簡稱「本公司」)將會隨時更改數據,

並由本公司决定而不作另行通知。雖然本公司已盡力確保本網頁的數據準確性,但本公司

並不保證該等數據均爲準確無誤。本公司不會對任何錯誤或遺漏承擔責任。

本公司不會對任何人士使用本網頁而引致任何損害(包括但不限於計算機病毒、系統故障、

數據損失)承擔任何賠償。本網頁可能會連結至其他機構所提供的網頁,但這些網頁並不是

由本公司所控制。本公司不對這些網頁所顯示的內容作出任何保證或承擔任何責任。

責任限制

在任何情况下,本公司並不須就任何人由於直接或間接進入或使用本網站,並就此內容上

或任何産品、信息或服務,而招致的任何損失或損害負任何責任。

管轄法律

本免責聲明受中華民國法律約束,並接受中華民國法院的管轄。

免責聲明更新

本公司保留隨時更新本免責聲明的權利,任何更改於本網站發佈時,立即生效。