MWCT2016 HSE 2.40.0 安全启动配置失败 - ImportPlainSymKeyReqMuChannel 环境 MCU:基于MWCT2016S的无线充电控制器 工作设置(旧版) : HSE固件版本:2.6.0 (应用程序 + 安全启动)合并十六进制。 新设置(失败) : HSE固件版本:2.40.0 (应用程序 + 安全启动)合并十六进制。 我们正在从 HSE FW v2.6.0 迁移到 HSE FW v2.40.0,同时保持相同的 Qi 密钥配置和安全启动流程。 问题陈述 使用 HSE FW v2.6.0,完整的配置序列可以成功执行: HSE 安装 擦除按键 S2TP密钥槽配置 Qi 键编程 安全启动配置 应用程序启动成功 使用HSE FW v2.40.0时,所有配置步骤均成功完成,直到启动安全启动配置。 在安全启动配置期间,以下API 失败: 在安全启动代码中导入PlainSymKeyReqMuChannel()。 返回HSE 响应: 0x55A5A399 ,对应于: #define HSE_SRV_RSP_INVALID_PARAM ((hseSrvResponse_t)0x55A5A399UL) 出现此故障后,安全启动配置无法完成,ECU 将卡在安全启动代码中。 配置顺序 工作配置(HSE 2.6.0) 00_Blank_MWCT2016_CodeFlash_DataFlash.hex 电源 RESET 01_HSE_flash.srec版本 2.6.0 电源 RESET 02_EraseKeysSW.hex 电源 RESET 03_S2TP_KeySlotsAligned.srec S2TP 软件版本:1.1.1 电源 RESET 通过 UART 写入 Qi 密钥。 电源 RESET 应用程序+安全启动.hex 电源 RESET 从 UART 日志中获取合并十六进制烧录后的 HSE 响应: HseStatus:2848 位 0:0 RFU 位 1:0 HSE_SHE_STATUS_SECURE_BOOT 位 2:0 HSE_SHE_STATUS_SECURE_BOOT_INIT 位 3:0 HSE_SHE_STATUS_SECURE_BOOT_FINISHED 位 4:0 HSE_SHE_STATUS_SECURE_BOOT_OK 位 5:1 HSE_STATUS_RNG_INIT_OK 位 6:0 HSE_STATUS_HOST_DEBUGGER_ACTIVE 位 7:0 HSE_STATUS_HSE_DEBUGGER_ACTIVE 位 8:1 HSE_STATUS_INIT_OK 位 9:1 HSE_STATUS_INSTALL_OK 位 10:0 HSE_STATUS_BOOT_OK 位 11:1 HSE_STATUS_CUST_SUPER_USER 位 12:0 HSE_STATUS_OEM_SUPER_USER 位 13:0 HSE_STATUS_FW_UPDATE_IN_PROGRESS 位 14:0 RFU 位 15:0 RFU smrCoreStatus_Get: smrCoreStatus[1]:0,smrCoreStatus[0]:0 smrStatus[1]:0,smrStatus[0]:0 代码调试日志 HSE 响应: ImportPlainSymKeyReqMuChannel-hseResp:0x55a5aa33 LoadBootMacKey-hseResp: 0x55a5aa33 Generic_ImportKeys-hseResp:0x55a5aa33 KeyProvisioningForJTAG-status: 1 SecureBootConfiguration-hseResp: 0x55a5aa33 KeyProvisioningToHseNVM-status: 1 NON_SECURE_IVT-BLOCK1-hseResp:0x55a5aa33 SECURE_IVT-BLOCK0-hseResp:0x55a5aa33 writeDefaultData 运行安全启动配置程序 Hse-FW 版本:0.13.0.2.6.0,完整内存 使用的接口版本:0.13.0.2.6.0 HseStatus:2862 位 0:0 RFU 位 1:1 HSE_SHE_STATUS_SECURE_BOOT 位 2:1 HSE_SHE_STATUS_SECURE_BOOT_INIT 位 3:1 HSE_SHE_STATUS_SECURE_BOOT_FINISHED 位 4:0 HSE_SHE_STATUS_SECURE_BOOT_OK 位 5:1 HSE_STATUS_RNG_INIT_OK 位 6:0 HSE_STATUS_HOST_DEBUGGER_ACTIVE 位 7:0 HSE_STATUS_HSE_DEBUGGER_ACTIVE 位 8:1 HSE_STATUS_INIT_OK 位 9:1 HSE_STATUS_INSTALL_OK 位 10:0 HSE_STATUS_BOOT_OK 位 11:1 HSE_STATUS_CUST_SUPER_USER 位 12:0 HSE_STATUS_OEM_SUPER_USER 位 13:0 HSE_STATUS_FW_UPDATE_IN_PROGRESS 位 14:0 RFU 位 15:0 RFU smrCoreStatus_Get: smrCoreStatus[1]:0,smrCoreStatus[0]:0 smrStatus[1]:1,smrStatus[0]:1 配置失败 - HSE 固件 2.40.0 报告: 00_Blank_MWCT2016_CodeFlash_DataFlash.hex 电源 RESET 01_S32K344_HSE_FW_UPDATE_v2_40_0.srec 电源 RESET 02_M210WLCUMBCD00A_WSB00.31_EraseKeySW_UART_ENABLE.hex 电源 RESET 03_S2TP_2_1_0_KeySlotsAligned.srec 电源 RESET 通过 UART 写入 Qi 密钥。 电源 RESET 应用程序+安全启动.hex 电源 RESET 房屋状态:2912 位 0:0 RFU 位 1:0 HSE_SHE_STATUS_SECURE_BOOT 位 2:0 HSE_SHE_STATUS_SECURE_BOOT_INIT 位 3:0 HSE_SHE_STATUS_SECURE_BOOT_FINISHED 位 4:0 HSE_SHE_STATUS_SECURE_BOOT_OK 位 5:1 HSE_STATUS_RNG_INIT_OK 位 6:1 HSE_STATUS_HOST_DEBUGGER_ACTIVE 位 7:0 HSE_STATUS_HSE_DEBUGGER_ACTIVE 位 8:1 HSE_STATUS_INIT_OK 位 9:1 HSE_STATUS_INSTALL_OK 位 10:0 HSE_STATUS_BOOT_OK 位 11:1 HSE_STATUS_CUST_SUPER_USER 位 12:0 HSE_STATUS_OEM_SUPER_USER 位 13:0 HSE_STATUS_FW_UPDATE_IN_PROGRESS 位 14:0 RFU 位 15:0 RFU smrCoreStatus_Get: smrCoreStatus[1]:0,smrCoreStatus[0]:0 smrStatus[1]:0,smrStatus[0]:0 ImportPlainSymKeyReqMuChannel-hseResp:0x55A5A399 断电重启后: UML 软件版本:WSB00.3B_UART_ENABLE 运行安全启动配置程序 Hse-FW 版本:0.13.0.2.40.0,完整内存 使用的接口版本:0.13.0.2.40.0 HseStatus:2848 位 0:0 RFU 位 1:0 HSE_SHE_STATUS_SECURE_BOOT 位 2:0 HSE_SHE_STATUS_SECURE_BOOT_INIT 位 3:0 HSE_SHE_STATUS_SECURE_BOOT_FINISHED 位 4:0 HSE_SHE_STATUS_SECURE_BOOT_OK 位 5:1 HSE_STATUS_RNG_INIT_OK 位 6:0 HSE_STATUS_HOST_DEBUGGER_ACTIVE 位 7:0 HSE_STATUS_HSE_DEBUGGER_ACTIVE 位 8:1 HSE_STATUS_INIT_OK 位 9:1 HSE_STATUS_INSTALL_OK 位 10:0 HSE_STATUS_BOOT_OK 位 11:1 HSE_STATUS_CUST_SUPER_USER 位 12:0 HSE_STATUS_OEM_SUPER_USER 位 13:0 HSE_STATUS_FW_UPDATE_IN_PROGRESS 位 14:0 RFU 位 15:0 RFU smrCoreStatus_Get: smrCoreStatus[1]:0,smrCoreStatus[0]:0 smrStatus[1]:0,smrStatus[0]:0 导入PlainSymKeyReqMuChannel-hseResp:0x55a5a399 ECU 仅卡在安全启动模式 Re: MWCT2016 HSE 2.40.0 Secure Boot Configuration Failure- ImportPlainSymKeyReqMuChannel 嗨@ShrikantM
能否请您分享一下您的密钥目录以及在ImportPlainSymKeyReqMuChannel()函数调用中使用的参数?报告的错误表明一个或多个 HSE 请求参数无效。
BR,VaneB Re: MWCT2016 HSE 2.40.0 Secure Boot Configuration Failure- ImportPlainSymKeyReqMuChannel 嗨@VaneB , 我们使用以下主要目录: /* 包含 NVM 密钥目录条目的表 */ const hseKeyGroupCfgEntry_t aHseNvmKeyCatalog[] = { /* NvmKeyGroup_0 */ {(HSE_MU0_MASK), HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_SHE, 1U, 128U, {0U, 0U}}, /* NvmKeyGroup_1 */ {(HSE_MU0_MASK), HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_ECC_PAIR, 1U, 256U, {0U, 0U}}, /* NvmKeyGroup_2 */ {(HSE_MU0_MASK), HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_AES, 1U, 256U, {0U, 0U}}, /* 关键目录结束标记 */ {0U, 0U, 0U, 0U, 0U, {0U, 0U}} }; /* 包含 RAM 键目录条目的表 */ const hseKeyGroupCfgEntry_t aHseRamKeyCatalog[] = { /* RamKeyGroup_0 */ {(HSE_MU0_MASK), HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_SHE, 1U, 128U, {0U, 0U}}, /* 关键目录结束标记 */ {0U, 0U, 0U, 0U, 0U, {0U, 0U}} }; 对于以下函数,我们收到 HSE_SRV_RSP_INVALID_PARAM 错误 hseSrvResponse_t Generic_ImportKeys(void) { hseSrvResponse_t srvResponse = HSE_SRV_RSP_GENERAL_ERROR; /*导入与 SMR#0 关联的密钥*/ srvResponse = ImportPlainSymKeyReqMuChannel( MU0, 1U NVM_AES128_BOOT_KEY, HSE_KEY_TYPE_AES, ( HSE_KF_USAGE_VERIFY ), 0U, aesEcbKeyLength, aesEcbKey, 真的 ); ASSERT(HSE_SRV_RSP_OK == srvResponse); 如果(HSE_SRV_RSP_OK != srvResponse) 跳转到出口; /* 加载 SHE 安全启动的密钥 */ srvResponse = LoadBootMacKey(); ASSERT(HSE_SRV_RSP_OK == srvResponse); 如果(HSE_SRV_RSP_OK != srvResponse) 跳转到出口; 出口: 返回 srvResponse; } 请查看附件 global_defs.h 文件。有关参数的更多详细信息。 感谢并致意 斯瓦普尼尔·加瓦德 Re: MWCT2016 HSE 2.40.0 Secure Boot Configuration Failure- ImportPlainSymKeyReqMuChannel 嗨@SwapnilGawade
感谢您分享信息。根据您的配置,我有以下几点看法:
SHE 密钥组配置的所有者为 HSE_KEY_OWNER_CUST。但是,HSE 服务 API 参考手册规定,对于 SHE 密钥目录配置,SHE 密钥组的所有者必须设置为 HSE_KEY_OWNER_ANY。NVM SHE 密钥目录配置示例也证明了这一点。
传递给 ImportPlainSymKeyReqMuChannel() 的 targetKeyHandle 定义如下: #define NVM_AES128_BOOT_KEY GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_NVM, 1, 1) 但是,根据您的 NVM 密钥目录配置,AES 密钥组是第三组 (NvmKeyGroup_2)。基于此配置,NVM_AES128_BOOT_KEY 的正确定义应该是: GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_NVM, 2, 0)
Re: MWCT2016 HSE 2.40.0 Secure Boot Configuration Failure- ImportPlainSymKeyReqMuChannel 嗨@VaneB , 根据您的建议,我已经进行了更改,但它仍然给出与HSE_SRV_RSP_INVALID_PARAM (0x55a5a399) 类似的响应。 经过调试,我们发现ImportPlainSymKeyReqMuChannel (...)-> EraseKeyReq (targetKeyHandle, HSE_ERASE_NOT_USED))-> HSE_Send (muIf, muChannelIdx, gSyncTxOption, pHseSrvDesc)-> Hse_Ip_ServiceRequest (u8MuInstance, u8MuChannel, pHseIp_Request , HSE_DTCM_ADDR(pHseSrvDesc))-> Mu_Ip_SetTxRegister (Hse_Ip_apMuBase[u8MuInstance], u8MuChannel, (uint32)pHseSrvDesc) 返回的响应为HSE_SRV_RSP_INVALID_PARAM (0x55a5a399) 。 pHseSrvDesc 的参数已添加到附件 Mu_Ip_SetTxRegister-pHseSrvDesc.xlsx 中。 感谢并致意 斯瓦普尼尔·加瓦德 Re: MWCT2016 HSE 2.40.0 Secure Boot Configuration Failure- ImportPlainSymKeyReqMuChannel 嗨@SwapnilGawade
根据您的描述,我注意到您似乎将 DemoApp 框架与 Hse_Ip 驱动程序结合使用了。我的理解正确吗?如果进行了修改,具体做了哪些修改?
另外,您是否已在项目中禁用数据缓存?这是导致 HSE_SRV_RSP_INVALID_PARAM 错误的一个常见原因。所有用于与 HSE 通信的数据对象都必须强制存储在不可缓存的内存中。
我还注意到,您将 HSE_DTCM_ADDR(pHseSrvDesc) 作为 pHseSrvDesc 参数传递给了 Hse_Ip_ServiceRequest() 函数。请参阅HSE_ReadAdkp 返回 HSE_SRV_RSP_INVALID_ADDR 的线程,我的同事在其中解释了有关将 HSE 与 DTCM 内存一起使用的一些注意事项。
您可能还想了解一下 Hse_Ip_ToAHBAddress(),当启用 TCM 支持时,它会将本地地址转换为 HSE 主机地址。在这种情况下,它或许有用。 Re: MWCT2016 HSE 2.40.0 Secure Boot Configuration Failure- ImportPlainSymKeyReqMuChannel 嗨@VaneB , 在 HSE 2.6.0 的工作环境中,我们使用了以下库: 1. RTD AUTOSAR 4.4 2.主要目录如下 /* 包含 NVM 密钥目录条目的表 */ const hseKeyGroupCfgEntry_t aHseNvmKeyCatalog[] = { /* NvmKeyGroup_0 */ {(HSE_MU0_MASK), HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_SHE, 1U, 128U, {0U, 0U}}, /* NvmKeyGroup_1 */ {(HSE_MU0_MASK), HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_ECC_PAIR, 1U, 256U, {0U, 0U}}, /* NvmKeyGroup_2 */ {(HSE_MU0_MASK), HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_AES, 1U, 256U, {0U, 0U}}, /* 关键目录结束标记 */ {0U, 0U, 0U, 0U, 0U, {0U, 0U}} }; /* 包含 RAM 键目录条目的表 */ const hseKeyGroupCfgEntry_t aHseRamKeyCatalog[] = { /* RamKeyGroup_0 */ {(HSE_MU0_MASK), HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_SHE, 1U, 128U, {0U, 0U}}, /* 关键目录结束标记 */ {0U, 0U, 0U, 0U, 0U, {0U, 0U}} }; 我们使用的是与 HSE 2.40.0相同的RTD AUTOSAR 4.4和密钥目录,但我们遇到了问题。ImportPlainSymKeyReqMuChannel(...) 函数返回 HSE 响应为HSE_SRV_RSP_INVALID_PARAM 。 此RTD AUTOSAR 4.4中不提供 Hse_Ip_ToAHBAddress() 函数。 感谢并致意 斯瓦普尼尔·加瓦德 Re: MWCT2016 HSE 2.40.0 Secure Boot Configuration Failure- ImportPlainSymKeyReqMuChannel 嗨@SwapnilGawade
如前所述,SHE 密钥组配置的所有者为 HSE_KEY_OWNER_CUST。但是,HSE 服务 API 参考手册规定,对于 SHE 密钥目录配置,SHE 密钥组的所有者必须设置为 HSE_KEY_OWNER_ANY。
你的项目中是否禁用了数据缓存?这是导致 HSE_SRV_RSP_INVALID_PARAM 错误的一个常见原因。所有用于与 HSE 通信的数据对象都必须强制存储在不可缓存的内存中。
另外,能否分享一个简单的示例,展示您导入密钥的所有步骤? Re: MWCT2016 HSE 2.40.0 Secure Boot Configuration Failure- ImportPlainSymKeyReqMuChannel 你好@VaneB , 我们已根据您的建议和应用要求修正了密钥目录日志。 如果使用S2TP 版本 1.1.0 或跳过 S2TP刷写,安全启动可以正常工作。请参考下表了解更多信息。我们怀疑S2TP ver2.1.0版本是否发生了某些变化。其中,Qi 密钥导入的 CatLog 已更改,与我们配置的以下密钥 CatLog 不匹配。 HSE 版本 S2TP 版本 结果 2.40 1.1.1 1. 安全启动功能正常 2. 25瓦充电失败 -> Qi密钥导入失败 身份验证:初始化错误:5,身份验证:初始化错误 - 证书导入/验证失败 2.40 2.1.0 1. 安全启动在导入密钥时失败,错误代码:0x55A5A399 2. 25瓦充电无需安全启动软件即可工作(独立应用程序) 3. 如果跳过 S2TP 刷写,安全启动可以正常工作。但是充电功能无法使用。 闪流 擦除软件:擦除和格式化密钥目录 ↓ 电源循环 ↓ 使用 S2TP 闪充 Qi 密钥 ↓ 电源循环 ↓ Flash SECBoot 代码:密钥导入 ↓ 闪存启动 + 应用程序代码 关键目录: /* 包含 NVM 密钥目录条目的表 */ const hseKeyGroupCfgEntry_t aHseNvmKeyCatalog[] = { /* NvmKeyGroup_0:用于隐式 SHE 函数操作 */ {(HSE_MU0_MASK), HSE_KEY_OWNER_ANY, HSE_KEY_TYPE_SHE, 12U, 128U, {0U, 0U}}, /* NvmKeyGroup_1:配置为 AES 以满足 NVM_AES128_BOOT_KEY(组 1,插槽 1)*/ {(HSE_MU0_MASK), HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_AES, 4U, 128U, {0U, 0U}}, /* NvmKeyGroup_2:扩展为 3 个插槽,用于 PROVISION_KEY0(插槽 0)和 APP_MAC_KEY(插槽 2) */ {(HSE_MU0_MASK), HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_AES, 4U, 256U, {0U, 0U}}, /* HMAC 密钥 */ { HSE_ALL_MU_MASK, HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_HMAC, 2U, HSE_KEY512_BITS, {0U, 0U} }, \ /* ECC 密钥 */ \ { HSE_ALL_MU_MASK, HSE_KEY_OWNER_CUST, WRP_KEY_TYPE_ECC_PAIR, 4U, WRP_ECC_KEY_SIZE, {0U, 0U} }, \ { HSE_ALL_MU_MASK, HSE_KEY_OWNER_CUST, WRP_KEY_TYPE_ECC_PUB, 2U, WRP_ECC_KEY_SIZE, {0U, 0U} }, \ { HSE_ALL_MU_MASK, HSE_KEY_OWNER_CUST, WRP_KEY_TYPE_ECC_PUB_EXT, 1U, WRP_ECC_KEY_SIZE, {0U, 0U} }, \ /* RSA 密钥 */ \ { HSE_ALL_MU_MASK, HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_RSA_PAIR, 2U, HSE_KEY4096_BITS, {0U, 0U}}, \ /* NvmKeyGroup_8:NVM_RSA2048_PUB_CUSTAUTH_HANDLE0 的显式 RSA 公钥组 */ {(HSE_MU0_MASK), HSE_KEY_OWNER_CUST, HSE_KEY_TYPE_RSA_PUB, 1U, 2048U, {0U, 0U}}, /* 关键目录结束标记 */ {0U, 0U, 0U, 0U, 0U, {0U, 0U}} }; /* 包含 RAM 键目录条目的表 */ const hseKeyGroupCfgEntry_t aHseRamKeyCatalog[] = { /* RamKeyGroup_0 */ {(HSE_MU0_MASK), HSE_KEY_OWNER_ANY, HSE_KEY_TYPE_SHE, 1U, 128U, {0U, 0U}}, /* 关键目录结束标记 */ {0U, 0U, 0U, 0U, 0U, {0U, 0U}} }; 使用 S2TP 版本 2.1.0 时,SecBoot 代码中的密钥导入失败: #define NVM_AES128_BOOT_KEY GET_KEY_HANDLE ( HSE_KEY_CATALOG_ID_NVM , 1 , 1 ) Re: MWCT2016 HSE 2.40.0 Secure Boot Configuration Failure- ImportPlainSymKeyReqMuChannel 你好@Bhushan1312
我们先来尝试找出问题所在。我已通过私信向您发送了一个简单的演示程序,该程序会导入一个 AES-128 密钥,将其删除,然后再重新导入。虽然该示例并非基于您当前使用的 RTD 版本,但仍应作为有用的参考,引用。
请根据您的设置调整演示,并验证基本的密钥导入和删除操作是否正常工作。这将有助于我们找到一个已知的有效工作基准,并从最基本的功能开始分析问题。由此,我们可以确定是什么原因导致您的应用程序中的 HSE 返回 HSE_SRV_RSP_INVALID_PARAM。
記事全体を表示