基于I2C的驱动:https://github.com/Tvirus/atsha204a_driver
驱动MAC验证运算的地方有点问题。slot的ID写的不对,需要修改一下。
芯片应用:参考https://blog.csdn.net/zhanghaochen_/article/details/88693749
配置流程:
注意: 芯片开始工作前要唤醒,并且延时至少2.5ms后, 芯片才能开始工作 芯片的config区和data区一旦锁定,没有办法解锁
第一步
1.在Configration Zone 进行配置,
通过对16个slotx_configration 区写入 0x80,0x80,将Configration Zone 锁住,。此配置使得data区的数据不可读。
实现秘钥存储的功能。<配置数据说明详见 atsha204配置 和 配置说明两个文档>
2.将Data 区配置成存储密钥,密钥不可读写
读取一下0x15地址的 lockconfig位 为0x00表示锁定完成
第二步, 往Data Zone 写入密钥,并锁定
注意: 在Configration Zone 锁定后,才能对Data Zone进行读写操作data区一旦锁定,没有办法解锁
通过Write Command 命令,写入预先准备好的密钥
写入完成后,读取查看 写入的数据是否正确
最后读取一下0x15地址下的lockData位 为0x00 表示锁定完成
密钥验证流程:
注意: 芯片开始工作前要唤醒,并且延时至少2.5ms后, 芯片才能开始工作
对ATSHA204A芯片的配置完成后,将DataZone配置成 密钥区(SlotX) 并且锁定后对数据不可读写。
主控MCU与芯片相连,在启动时候,首先我们要获取芯片序列号,为后面计算MAC。
进入函数
主控MCU通过RNG寄存去 让MCU产生20字节的随机数,
发送一个nonce命令给ATSHA204A,利用上面产生的20字节的随机数,让ATSHA204A 内部的产生Tempkey的值,
MCU发送MAC命令,ATSHA204A 就可以根据host_tempkey、序列号、以及秘钥计算,计算出一个摘要degest1,返回给MCU
MCU内部通过官方库计算出来一个摘要 degest2
MCU判断digest1和digest2是否匹配,不匹配将程序挂起即可