当前位置:   article > 正文

ATSHA204A(二)——基本特性

ATSHA204A(二)——基本特性

1. 主要特性

  • SHA-256哈希算法
  • 256位密钥长度;最多可存储 16个密钥
  • 惟一 72位序列号
  • 内部高质量随机数发生器(RandomNumberGenerator,RNG)
  • 用于存储密钥和数据的 4.5kbEEPROM
  • 用于固定信息的 512位可一次性编程(OneTimeProgrammable,OTP)位
  • 多个 I/O选项:   兼容 UART的高速单线接口;  1MHz  I2C接口

2. 接口

NC无连接
GND
SDA串行数据
SCL串行时钟输入
VCC电源

通过标准 I2C接口访问器件,速度最高 1Mbps。

3. 内部组成:EEPROM+SRAM

  我们只看EEPROM:共有 664 字节(5312 位),分为以下几个区域

88个字节的config区,     512字节的slot区,     64个字节的OTP区

  (1)关于config区,放的是SN和每个slot的访问权限信息等。唤醒之后,我们需要配置slot区的访问权限,就在这个区。

        (2)关于slot区,这个区有16个slot,每个slot可以放32字节。在config区lock之后,data区(slot区和OTP区)lock之前,只能写slot区而不能读。在config区和data区都lock之后,按照config区对于slot的访问权限进行读写。

        (3)关于OTP,一次可编程,固定信息。在锁定 OTP 区域之前,可以使用标准Write 命令自由写入相应位。


4. 读写命令数据包

1byte

1byte

Nbyte

2byte

Command

Count

Data

CRC(LSB:MSB)

  • Command指示这个数据包是为何作用,也就是word address;
  • count是数据包的长度,包括count本身, data, crc;
  • data是数据内容;
  • CRC16是数据包的校验码,校验内容从count到data。

4.1 Command域

如下值:

复位0x00复位地址计数器。下一个读取或写入事务将从 I/O 缓冲区起始处开始。
休眠(低功耗)0x01ATSHA204A 志。器件的整个易失性状态将复位。 进入低功耗休眠模式,忽略所有后续的 I/O 转换,直到下一个唤醒标
空闲0x02ATSHA204A 进入空闲状态,忽略所有后续的 I/O 转换,直到下一个唤醒标志。
TempKey 和 RNGSeed 寄存器的内容将保留。
命令0x03将后续字节写入输入命令缓冲区中先前写入内容之后的连续地址。这是正常操作。
保留0x04-0xFF这些地址不应发送到器件。

 

4.2 数据包data域格式

写:

opcode
 
Write10x12
Param1Zone1

Bit 7:
        0 = 4 字节数据写入指定的区域。
        1 = 32 字节数据写入指定的区域。

Bit 6:
        0 = 数据以明文写入。
        1= 输入数据必须加密。
       如果数据/OTP 区域锁定,则必须为 0。

Bit 5-2:

         必须为 0。
Bit 1-0 :

          在 Config、OTP 或 Data 中进行选择。
 

Param2Address2区域内要写入的第一个字的地址。
Data_1Value4 或 32要写入区域的信息;可进行加密。
Data_2Mac0 或 32用于使地址和数据生效的报文验证代码。

 

 读:

opcodeRead10x02
Param1Zone1

Bit 7:
        0 = 读取 4 字节。
        1 = 读取 32 字节。在传统模式下,从 OTP 区域读取时必须为 0。
Bit6-2:

        所有位必须为 0。
Bit1-0 :

         在 Config、OTP 或 Data 中进行选择。

Param2Address2区域内要读取的第一个字的地址。请参见 一节。
data0

 

  • 第一个字节是操作码,Read command 的操作码是0x02, Write command 的操作码是0x12
  • 第二个字节的最高位bit7指示是读写32字节还是4字节,1为读写32字节。bit0-1指示读写哪个区,0:Config区,1:OTP区,2:Data区。 
  • 第三和第四个字节是Address地址。
  • 其他为数据。

4.2.1 opcode

DeriveKey0x1C从目标密钥或父密钥得出目标密钥值。
DevRev0x30返回器件版本信息。
GenDig0x15通过随机或输入种子和密钥生成数据保护摘要。
HMAC0x11使用 HMAC/SHA-256 计算密钥和其他内部数据的响应。
CheckMac0x28验证在另一个 MicrochipCryptoAuthentication 器件上计算的MAC。
Lock0x17防止进一步修改器件的某个区域。
MAC0x08使用 SHA-256 计算密钥和其他内部数据的响应。
Nonce0x16生成一个 32 字节的随机数和一个内部存储的临时值。
Pause0x01选择性地仅将共用总线上的一个器件置于空闲状态。
Random0x1B生成一个随机数。
Read0x02从器件读取 4 个字节,可以使用或不使用身份验证和加密。
SHA0x47计算 SHA256 摘要以用于系统中的任一功能。
UpdateExtra0x20配置区域锁定后,更新配置区域内的字节 84 或 85。
Write0x12向器件写入 4 个或 32 个字节,可以使用或不使用身份验证和加密。

容易看出读的命令为0x02,写操作命令为0x12。

4.2.2 param1的区域编码

Param1
config0704 位
88 字节
3 个槽
始终支持。解锁时,部分支持。
锁定时,始终不支持。
始终不加密。
OTP1512 位
64 字节
2 个槽
解锁时,始终不支持。锁定时始
终支持,传统模式除外。
请参见 OTP
一节。
LockConfig 解锁时不允许。
LockConfig 锁定且 LockValue 解锁时,均可写。
LockValue 锁定时由 OTPmode 控制。
请参见 OTP 一节。
data24096 位
512 字节
16 个槽
解锁时,始终不支持;其他情况
下,由 IsSecret 和 EncryptRead
控制。
LockConfig 解锁时不允许。
LockConfig 锁定且 LockValue 解锁时,均可写。
LockValue 锁定时由 WriteConfig 控制。
请参见 一节。

 

4.2.3 param2的地址编码

Param2 包含一个地址,表示要访问的存储器。所有读操作和写操作均以字(4 字节)为单位。合法ATSHA204A 地址的最高有效字节始终为 0。所有未使用地址位均应始终设为 0。地址中的低位描述了块/槽内要访问的第一个字的偏移量,而高位指定了槽号,如下表所示:

可以看出字节1的高8位全为0,低8位的前3位是偏移量,高5位是block(不同的区域block占的位数不一样),一个block为32字节,所以config 分3个block(0-2),slot分16个block(0-15),otp分2个block(0-1),如果是使用32字节进行读写的话,则忽略前3位offset。

偏移量的意思就是某个block第一个字的偏移量,例如config区的0x10就是block2,所以block就是2,offset就是0,所以(0001 0000b) = (10h),没有问题。如果block还是2,但offset是1,则(0001 0001b) = (11h),就是word的0x11处。

又为什么是block2呢?看一下config的block划分,每个word对应是4字节,所以一个block就是8个word,那么0x00 -0x07这8个就是block,0,0x08-0x0F这8个为block1,0x10-0x15(最后一个)这6个是block2,同样的slot和otp两个区也是这个规则。

4.3 例

读config区的第一个word 0x00:

word addresscountopcodeparam1param2crc
0x030x070x020x000x00002bytes

根据上述总结

0x03: 表示命令操作;

 0x07:字节数=自己1字节+opcode的1字节+param1的1字节+param2的2字节+crc的2字节= 0x07 ; 

0x02::表示读操作;

0x00:0表示config区;

0x0000:word的0x00处
       

有了上述命令包,就有了操作方式、操作区域、区域中的具体哪个位置,这样config区域的0x00处的4个地址的数据就读出了,也就是SN号的一部分值。

【注】config区的具体内容和配置,参见下一篇文章。

 

 

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

闽ICP备14008679号