针对TC387在FBL(Flash BootLoader)中触发软件复位导致HSM(Hardware Security Module)挂起的问题,以下是详细的排查方向和解决建议:
SCU_SYSRSTCON.B.SW),确认是否 错误复位了整个系统(包括HSM域)。HSM_PWRCTRL 相关寄存器)。SCU_RSTCON 复位特定CPU核)。// 示例:仅复位主核,避免复位HSM域
SCU_SYSRSTCON.B.SW = 1; // 触发软件复位
SCU_SYSRSTCON.B.SRST = 0; // 禁用系统全局复位(具体位域需参考手册)hsm_firmware.bin)是否在复位后重新加载。void SystemReset_Handler(void) {
// ... 其他初始化
HSM_Init(); // 重新初始化HSM时钟、寄存器、固件
while (!HSM_IsReady()); // 等待HSM就绪
}void HSM_WaitReady(void) {
while (HSM_STATUS_REG.B.RDY == 0); // 轮询HSM状态寄存器
}HSM_WaitReady()。HSM_CMD_STATUS 寄存器)。if (HSM_BUSY) {
HSM_SendAbortCommand(); // 发送终止命令
while (HSM_BUSY); // 等待HSM空闲
}HSM_CR.B.SWRESET = 1; // 复位HSM本地控制器HSM_CLC、HSM_CON)。fHSM)是否在复位后保持使能。CLC_DISR.B.DISR = 0; // 确保HSM时钟使能
HSM_CON.B.CLK_SEL = 0x1; // 选择正确的时钟源void HSM_ErrorHandler(void) {
uint32 err_code = HSM_ERR_REG;
Log_Error("HSM Error: 0x%08X", err_code); // 记录到Flash/UART
}HSM_CR.B.PWDN = 1; // 关闭HSM
delay_ms(10);
Trigger_Software_Reset();graph TD
A[触发软件复位] --> B{复位范围是否包含HSM?}
B -->|是| C[修改复位配置:局部复位主核]
B -->|否| D[检查HSM初始化]
D --> E[复位后是否重初始化HSM?]
E -->|否| F[在复位处理中显式初始化HSM]
E -->|是| G[检查HSM状态/延迟]
G --> H[复位前终止HSM操作]
H --> I[验证寄存器/时钟配置]
I --> J[记录HSM错误日志]
J --> K[问题解决?]
K -->|否| L[联系Infineon支持]通过以上步骤,重点聚焦在 复位范围隔离、HSM重初始化 和 操作中断保护,可解决90%以上的同类问题。若仍无法解决,提供HSM错误代码与寄存器快照给Infineon技术支持进一步分析。
举报
更多回帖