天天看点

ATSHA204A(二)——基本特性1. 主要特性2. 接口3. 内部组成:EEPROM+SRAM4. 读写命令数据包

1. 主要特性

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

2. 接口

ATSHA204A(二)——基本特性1. 主要特性2. 接口3. 内部组成:EEPROM+SRAM4. 读写命令数据包
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 缓冲区起始处开始。
休眠(低功耗) 0x01 ATSHA204A 志。器件的整个易失性状态将复位。 进入低功耗休眠模式,忽略所有后续的 I/O 转换,直到下一个唤醒标
空闲 0x02

ATSHA204A 进入空闲状态,忽略所有后续的 I/O 转换,直到下一个唤醒标志。

TempKey 和 RNGSeed 寄存器的内容将保留。

命令 0x03 将后续字节写入输入命令缓冲区中先前写入内容之后的连续地址。这是正常操作。
保留 0x04-0xFF 这些地址不应发送到器件。

4.2 数据包data域格式

写:

opcode Write 1 0x12
Param1 Zone 1

Bit 7:

        0 = 4 字节数据写入指定的区域。

        1 = 32 字节数据写入指定的区域。

Bit 6:

        0 = 数据以明文写入。

        1= 输入数据必须加密。

       如果数据/OTP 区域锁定,则必须为 0。

Bit 5-2:

         必须为 0。

Bit 1-0 :

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

Param2 Address 2 区域内要写入的第一个字的地址。
Data_1 Value 4 或 32 要写入区域的信息;可进行加密。
Data_2 Mac 0 或 32 用于使地址和数据生效的报文验证代码。

 读:

opcode Read 1 0x02
Param1 Zone 1

Bit 7:

        0 = 读取 4 字节。

        1 = 读取 32 字节。在传统模式下,从 OTP 区域读取时必须为 0。

Bit6-2:

        所有位必须为 0。

Bit1-0 :

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

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

4.2.1 opcode

DeriveKey 0x1C 从目标密钥或父密钥得出目标密钥值。
DevRev 0x30 返回器件版本信息。
GenDig 0x15 通过随机或输入种子和密钥生成数据保护摘要。
HMAC 0x11 使用 HMAC/SHA-256 计算密钥和其他内部数据的响应。
CheckMac 0x28 验证在另一个 MicrochipCryptoAuthentication 器件上计算的MAC。
Lock 0x17 防止进一步修改器件的某个区域。
MAC 0x08 使用 SHA-256 计算密钥和其他内部数据的响应。
Nonce 0x16 生成一个 32 字节的随机数和一个内部存储的临时值。
Pause 0x01 选择性地仅将共用总线上的一个器件置于空闲状态。
Random 0x1B 生成一个随机数。
Read 0x02 从器件读取 4 个字节,可以使用或不使用身份验证和加密。
SHA 0x47 计算 SHA256 摘要以用于系统中的任一功能。
UpdateExtra 0x20 配置区域锁定后,更新配置区域内的字节 84 或 85。
Write 0x12 向器件写入 4 个或 32 个字节,可以使用或不使用身份验证和加密。

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

4.2.2 param1的区域编码

Param1
config

704 位

88 字节

3 个槽

始终支持。

解锁时,部分支持。

锁定时,始终不支持。

始终不加密。

OTP 1

512 位

64 字节

2 个槽

解锁时,始终不支持。锁定时始

终支持,传统模式除外。

请参见 OTP

一节。

LockConfig 解锁时不允许。

LockConfig 锁定且 LockValue 解锁时,均可写。

LockValue 锁定时由 OTPmode 控制。

请参见 OTP 一节。

data 2

4096 位

512 字节

16 个槽

解锁时,始终不支持;其他情况

下,由 IsSecret 和 EncryptRead

控制。

LockConfig 解锁时不允许。

LockConfig 锁定且 LockValue 解锁时,均可写。

LockValue 锁定时由 WriteConfig 控制。

请参见 一节。

4.2.3 param2的地址编码

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

ATSHA204A(二)——基本特性1. 主要特性2. 接口3. 内部组成:EEPROM+SRAM4. 读写命令数据包

可以看出字节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 address count opcode param1 param2 crc
0x03 0x07 0x02 0x00 0x0000 2bytes

根据上述总结

0x03: 表示命令操作;

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

0x02::表示读操作;

0x00:0表示config区;

0x0000:word的0x00处

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

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

继续阅读