当前位置:   article > 正文

关于ATSHA204a的使用流程_atsha204a写程序

atsha204a写程序

ATSHA204含有一个EEPROM  和 一个 SRAM

EEPROM :包含

1个 Data Zone(512Bytes)  :一般用来存储密钥的

1个 configration Zone(88Bytes)  :

用来设置Data区中的数据使用的方法:

1)作为密钥使用 还是简单的数据,作为密钥是否可读可写     是明文读写 还是 加密读写   使用的次数

2)存储有9位的芯片唯一序列号

3)对OTP区的使用模式

3)configration Zone   和 Data Zone 锁住的控的控制位

1个OTP Zone

ATSHA204在使用:

首先,要对配置区进行配置目的:规定好密钥的使用方式和存储地点,和最后验证的MAC的方式

然后,然后将密钥写入Data区中指定的位置

最后,通过官方提供的库里面的MAC验证命令,进行密钥的验证

各个区的配置条件:

  1. 芯片的config区和data区一旦锁定,没有办法解锁,锁的方法只能通过lock command来进行锁定。
  2. config区在没锁定的时候,可以使用write command来进行写操作,但注意,0x00-0x03地址(word地址,详情请参考手册)不能被写,0x15word地址不能使用write command来写。
  3. 在config锁定前,data区(包括slot区和OTP区)既不能写也不能读。而在config锁定后,data区锁定前,data区只能写不能读,在data区锁定后,可以根据config中的配置来进行读写。

官方提供的库里面有一个执行各种命令的函数:

uint8_t sha204m_execute(uint8_t op_code,  uint8_t param1,     uint16_t param2,
                                         uint8_t datalen1 , uint8_t *data1,     uint8_t datalen2, uint8_t *data2, uint8_t datalen3, uint8_t *data3,  
                                         uint8_t tx_size,  uint8_t *tx_buffer, uint8_t rx_size, uint8_t *rx_buffer)

以下参数的具体值  需要参看数据手册没有 明确的介绍

uint8_t op_code:命令码                   uint8_t param1  :命令对应的第一个参数         uint16_t param2:命令对应的第二个参数

   uint8_t datalen1 , uint8_t *data1 :完成命令需要发送的数据 长度   和指向数据的指针    没有 可以 填写 0x00 , 0x00

  uint8_t datalen2 , uint8_t *data2 :完成命令需要发送的数据 长度   和指向数据的指针    没有 可以 填写 0x00 , 0x00

  uint8_t datalen3 , uint8_t *data3:完成命令需要发送的数据 长度   和指向数据的指针    没有 可以 填写 0x00 , 0x00

uint8_t tx_size,  uint8_t *tx_buffer :需要发送数据的长度  和指向数据的指针  以上参数的集合

uint8_t rx_size, uint8_t *rx_buffer:命令执行完,返回的数据

配置流程:

注意: 芯片开始工作前要唤醒,并且延时至少2.5ms, 芯片才能开始工作

      芯片的config区和data区一旦锁定,没有办法解锁

第一步

Configration Zone 进行配置,(详细的说明参看配置说明,这里只对代码进行说明)

  1. 芯片唤醒后,打开宏定义 ATSHA204_Configration 进入配置函数ATSHA204_Config(),
  2. 打开宏定义 Configration_Zone 先对Configration Zone进行配置

通过对16slotx_configration 区写入 0x80,0x80,

<配置数据说明详见 atsha204配置 配置说明两个文档>

Data Zone配置成存储密钥,          钥不可读写

  1. 写完成后,在读取一下 Configration Zone 的数据查看与配置的数据想通过后,
  2. 通过Lock_ConfigrationZone(); 函数将Configration Zone 锁住,
  3. 读取一下0x15地址的 lockconfig 0x00表示锁定完成

第二步,   Data Zone 写入密钥

注意: Configration Zone 锁定后,才能对Data Zone进行读写操作

data区一旦锁定,没有办法解锁

  1. 通过Write Command 命令,写入预先准备好的密钥
  2. 写入完成后,读取查看 写入的数据是否正确
  3. 通过函数DataZone_Init()锁定Data Zone ;
  4. 最后读取一下0x15地址下的lockData 0x00 表示锁定完成

密钥验证流程:

注意: 芯片开始工作前要唤醒,并且延时至少2.5ms, 芯片才能开始工作

  1. 对ATSHA204A芯片的配置完成后,将DataZone配置成 密钥区(SlotX) 并且锁定后对数据不可读写。
  2. 主控MCU与芯片相连,在启动时候,首先我们要获取芯片序列号,为后面计算MAC。
  3. 进入函数

主控MCU通过RNG寄存去 让MCU产生20字节的随机数,

  1. 发送一个nonce命令给ATSHA204A,利用上面产生的20字节的随机数,让ATSHA204A           内部的产生Tempkey的值,
  2.  MCU发送MAC命令,ATSHA204A 就可以根据host_tempkey、序列号、以及秘钥计算,计算出一个摘要degest1,返回给MCU
  3. MCU内部通过官方库计算出来一个摘要 degest2

MCU判断digest1和digest2是否匹配,不匹配将程序挂起即可

 

关于配置可以参考博客:https://blog.csdn.net/a5882230/article/details/52214845

关于使用可以参考博客:https://blog.csdn.net/u013216061/article/details/79159682

关于MAC校验可以参考博客:https://www.cnblogs.com/hjw91blog/articles/7918802.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/81622
推荐阅读
相关标签
  

闽ICP备14008679号