主题中讨论的其他器件: TCA6424
工具与软件:
您好!
我正在尝试将 SK-AM62B-P1开发板上的密钥版本从1递增到2。 器件已使用密钥进行编程(辅助密钥使用 TI 提供的虚拟主密钥、备用密钥由我生成用于测试)、并作为 HS-SE 器件运行。
我正在使用一个将 TCA6424配置为启用1.8V 编程电压的 R5F 程序、经过一段延迟后、我发送一个 TISCI 请求来更新 Keyrev。
我已经按照这里的说明生成了证书: https://software-dl.ti.com/tisci/esd/latest/2_tisci_msgs/security/otp_revision.html#sec-api-wr-keyrev-otp
生成第一个已签名证书、我将 模板用于主证书、并运行以下命令对证书进行签名:
openssl req -new -key SMPK.pem -config primary_cert.cnf -out primary_cert.csr openssl x509 -req -in primary_cert.csr -signkey SMPK.pem -out primary_cert.pem -days 3650 -extensions v3_ca -extfile primary_cert.cnf
之后、我复制了辅助证书、并使用 shar512sum of primary_cert.pem 修改了 IMAGE_TEST_SHA512字段、并运行以下命令:
openssl req -new -key BMPK.pem -config secondary_cert.cnf -out secondary_cert.csr openssl x509 -req -in secondary_cert.csr -signkey BMPK.pem -out secondary_cert.pem -days 3650 -extensions v3_ca -extfile secondary_cert.cnf
然后,我连接了两个文件,并使用"xxd -i"转储它们,以生成一个阵列,我可以导入到我的程序。
我使用以下代码来发送 TISCI 请求:
int32_t otp_set_keyrev2(void)
{
int32_t status = SystemP_SUCCESS;
Sciclient_ReqPrm_t reqParam;
Sciclient_RespPrm_t respParam;
struct tisci_msg_set_keyrev_req request;
struct tisci_msg_set_keyrev_resp response;
request.value = 2;
request.cert_addr_lo = (uint32_t)final_certificate_pem;
request.cert_addr_hi = (uint32_t)(request.cert_addr_lo + final_certificate_pem_len);
reqParam.messageType = (uint16_t) TISCI_MSG_WRITE_KEYREV;
reqParam.flags = (uint32_t)TISCI_MSG_FLAG_AOP;
reqParam.pReqPayload = (const uint8_t *)&request;
reqParam.reqPayloadSize = (uint32_t) sizeof (request);
reqParam.timeout = (uint32_t) SystemP_WAIT_FOREVER;
respParam.flags = 0U; /* API will populate */
respParam.pRespPayload = (uint8_t *)&response;
respParam.respPayloadSize = (uint32_t) sizeof (response);
status = Sciclient_service(&reqParam, &respParam);
if((SystemP_SUCCESS == status) && ((respParam.flags & TISCI_MSG_FLAG_ACK) == TISCI_MSG_FLAG_ACK))
{
DebugP_logInfo("Success writing Key REV\r\n");
}
else
{
DebugP_logError("Error writing Key REV!!! \r\n");
status = SystemP_FAILURE;
}
return status;
}
我注意到 AM64的示例将 cert_addr_hi 设置为0。 我也尝试过、但编程仍然失败。
有人知道我在生成 KEYREV 请求时可能会做什么错误吗?
谢谢!