Qiキーのプロビジョニングとセキュアブートのフローはそのまま維持しつつ、HSE FW v2.6.0からHSE FW v2.40.0への移行を進めています。
HSE FW v2.6.0では、プロビジョニングシーケンス全体が正常に実行されます。
HSE FW v2.40.0では、セキュアブート構成が開始されるまで、すべてのプロビジョニング手順が正常に完了します。
セキュアブートの設定中に、以下のAPIが失敗します。
| 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 |
| 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 |
| セキュアブートCFGプログラムを実行中 |
| 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 |
| HseStatus: 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 |
| UMLソフトウェアバージョン:WSB00.3B_UART_ENABLE |
| セキュアブートCFGプログラムを実行中 |
| 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 |
| ImportPlainSymKeyReqMuChannel-hseResp: 0x55a5a399 |
ECUがセキュアブートのみで停止する
こんにちは、 @ShrikantM さん。
ImportPlainSymKeyReqMuChannel() 関数呼び出しで使われているパラメータと、キーカタログを教えていただけますか?報告されたエラーは、1つ以上のHSEリクエストパラメータが無効であることを示しています。
BR、VaneB
こんにちは、 @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 );
if(HSE_SRV_RSP_OK != srvResponse)
出口へ移動;
/* SHEセキュアブート用のキーをロード */
srvResponse = LoadBootMacKey();
ASSERT(HSE_SRV_RSP_OK == srvResponse );
if(HSE_SRV_RSP_OK != srvResponse)
出口へ移動;
出口:
return srvResponse;
}
添付のglobal_defs.hをご確認ください。パラメータの詳細については、こちらをご覧ください。
よろしくお願いいたします。
スワプニル・ガワデ
こんにちは、 @SwapnilGawade さん。
情報共有ありがとうございます。お客様の設定に基づき、以下の点を確認いたしました。
#define NVM_AES128_BOOT_KEY GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_NVM, 1, 1)ただし、NVMキーカタログの設定によると、AESキーグループは3番目のグループ(NvmKeyGroup_2)となります。この構成に基づくと、NVM_AES128_BOOT_KEY の正しい定義は次のようになります。GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_NVM, 2, 0)こんにちは、 @SwapnilGawade さん。
あなたの説明によると、DemoAppフレームワークとHse_Ipドライバーを組み合わせているように見えました。私の理解は正しいでしょうか?もしそうなら、どのような修正が加えられましたか?
また、プロジェクトでデータキャッシュを無効にしていますか?これは、HSE_SRV_RSP_INVALID_PARAM エラーの一般的な原因です。HSEとの通信に使用されるすべてのデータオブジェクトは、キャッシュ不可能なメモリに強制的に格納されなければならない。
また、Hse_Ip_ServiceRequest() 関数に pHseSrvDesc パラメータとして HSE_DTCM_ADDR(pHseSrvDesc) を渡していることに気づきました。HSE_ReadAdkp returning HSE_SRV_RSP_INVALID_ADDR Threadを参照してください。同僚がDTCMメモリでのHSE使用に関するいくつかの考慮点を説明しています。
また、TCMサポートを有効にするとローカルアドレスをHSEホストアドレスに変換する機能Hse_Ip_ToAHBAddress()も検討すると良いでしょう。この状況では役立つかもしれません。
こんにちは、 @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 に追加されています。
よろしくお願いいたします。
スワプニル・ガワデ