ID²和硬件主控的驱动移植
接下去部分实现ID² SE芯片移植
移植准备
SE安全芯片:FM1230
硬件电路:主控—iic—FM1230
原厂提供了STM32下的IIC下的驱动示例
根据自己主控来移植IIC驱动部分,这里是采用GPIO模拟IIC来实现
IIC驱动移植
模拟IIC驱动部分比较常见,我也是从网上找的,贴出几个参考:
https://blog.csdn.net/shaguahaha/article/details/70766665
https://blog.csdn.net/return_oops/article/details/80965437
几个需要注意点是:
- SE芯片的IIC地址,FM1230是 0xE2
- 在移植过程中设备FM1230从机有回复,但是数据始终不对
计算算法时不通过,原来是模拟IIC和采用ST 标准IIC库的有不同的地方【原厂支持很重要】
IIC和FM1230的通讯,移植过程中采用逻辑分析仪抓包的记录:
hal相关移植
IIC驱动OK后,主要涉及std_se_adapter.c、se_driver.c两个函数移植
参考原厂示例基本不会有问题
验证ID2相关
我没有将此部分代码一开始就移植到ID²的sdk中去跑,而是单独将此部分调试通过后,跑FM1230部分的示例代码,SM4的加密。
这里需要注意几点:
- irot_hal_get_id2中,函数中注释异常判断
irot_result_t irot_hal_get_id2(uint8_t* id, uint32_t* len)
{
irot_result_t ret;
irot_result_t close_ret;
void* handle = NULL;
uint8_t cmd_buf[MAX_CMD_APDU_LENGTH];
uint8_t rsp_buf[MAX_RSP_APDU_LENGTH];
uint32_t rsp_len = sizeof(rsp_buf);
// open session
ret = open_session(&handle);
if (ret != IROT_SUCCESS)
{
goto EXIT;
}
// selec