1. 配置HSM模块并验证启动

配置HSM模块并验证启动 学习卡片

任务目标

在TC3xx平台上完成HSM(硬件安全模块)的基础初始化:配置HSM时钟源与电源模式,启动HSM并轮询其启动状态,最终通过寄存器标志位确认HSM已进入运行态,为后续安全启动与加密通信建立可信基础环境。

前置条件

  • 硬件:AURIX TC3xx开发板(如TC375 Lite Kit)
  • 软件:AURIX Development Studio 或 Tasking编译器,iLLD库(Infineon Low Level Driver)
  • 调试器:MiniWiggler 或 Lauterbach Trace32

核心实现

HSM模块的初始化涉及三个关键步骤:使能HSM模块时钟、配置电源状态、启动并等待HSM固件完成自举。以下代码基于iLLD库实现完整初始化流程,通过IfxHsm_enable()触发启动,并轮询IFX_HSM_STRTSTA寄存器中的BOOT_DONE位判断启动是否完成。

#include "IfxHsm.h"
#include "IfxScuWdt.h"
#include "Ifx_HSM.h"

/* HSM启动状态标志位定义 */
#define HSM_BOOT_DONE_POS    (0)      /* STRTSTA.BOOT_DONE 位 */

/* 模块间通信等待超时(毫秒) */
#define HSM_TIMEOUT_MS       (1000u)

/**
 * \brief 初始化HSM模块:使能时钟、配置电源、启动并验证
 * \return 1: 启动成功; 0: 启动超时或失败
 */
uint8_t HSM_InitAndVerify(void)
{
    /* 1. 关闭看门狗(HSM初始化期间需禁止复位) */
    IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
    IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());

    /* 2. 使能HSM模块时钟(位于CCU中,默认关闭以降低功耗) */
    Ifx_Hsm_enableModuleClock();

    /* 3. 配置HSM电源:进入正常运行模式(非待机/掉电) */
    Ifx_Hsm_setPowerMode(Ifx_Hsm_PowerMode_run);

    /* 4. 触发HSM启动(内部固件开始自举) */
    Ifx_Hsm_enable();

    /* 5. 轮询启动状态寄存器,等待BOOT_DONE置位 */
    uint32_t timeout = 0;
    while (0 == (Ifx_Hsm_getStartStatus() & (1u << HSM_BOOT_DONE_POS)))
    {
        /* 简单延时(约1ms) */
        Ifx_WaitTime(IfxStm_getTicksFromMilliseconds(1));
        timeout++;
        if (timeout > HSM_TIMEOUT_MS)
        {
            /* 超时,启动失败 */
            return 0;
        }
    }

    /* 6. 确认HSM主状态机处于运行态 */
    if (Ifx_Hsm_getModuleState() != Ifx_Hsm_ModuleState_run)
    {
        return 0;
    }

    return 1;
}

运行与验证

  1. 将上述代码放入主程序core0_main()中,在initPhase()之后调用HSM_InitAndVerify()。
  2. 编译并烧录至TC3xx开发板。
  3. 在调试器中设置断点于函数返回处,或使用变量result捕获返回值。

通过条件:函数返回值为1,且调试器寄存器视图中HSM_STRTSTA.BOOT_DONE位为1,HSM_MODSTA寄存器值为0x1(运行态)。若返回0,检查HSM时钟使能位(CCU寄存器)和电源配置是否正确。

关键说明

  • Ifx_Hsm_enableModuleClock()对应iLLD库中IfxHsm_enableModuleClock(),其内部操作CCU的CLK_SRC寄存器为HSM分配时钟。
  • HSM固件启动需要约数十毫秒,超时阈值设为1000ms已留足余量;若实际固件较大可适当增加。
  • 看门狗必须在HSM启动前关闭,否则启动过程中的长延时可能触发CPU复位。