赞
踩
NC | 无连接 |
GND | 地 |
SDA | 串行数据 |
SCL | 串行时钟输入 |
VCC | 电源 |
通过标准 I2C接口访问器件,速度最高 1Mbps。
我们只看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 命令自由写入相应位。
1byte | 1byte | Nbyte | 2byte |
Command | Count | Data | CRC(LSB:MSB) |
如下值:
复位 | 0x00 | 复位地址计数器。下一个读取或写入事务将从 I/O 缓冲区起始处开始。 |
休眠(低功耗) | 0x01 | ATSHA204A 志。器件的整个易失性状态将复位。 进入低功耗休眠模式,忽略所有后续的 I/O 转换,直到下一个唤醒标 |
空闲 | 0x02 | ATSHA204A 进入空闲状态,忽略所有后续的 I/O 转换,直到下一个唤醒标志。 TempKey 和 RNGSeed 寄存器的内容将保留。 |
命令 | 0x03 | 将后续字节写入输入命令缓冲区中先前写入内容之后的连续地址。这是正常操作。 |
保留 | 0x04-0xFF | 这些地址不应发送到器件。 |
写:
opcode | Write | 1 | 0x12 |
Param1 | Zone | 1 | Bit 7: Bit 6: Bit 5-2: 必须为 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。 在 Config、OTP 或 Data 中进行选择。 |
Param2 | Address | 2 | 区域内要读取的第一个字的地址。请参见 一节。 |
data | — | 0 | — |
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。
Param1 | ||||
config | 0 | 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 控制。 请参见 一节。 |
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两个区也是这个规则。
读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区的具体内容和配置,参见下一篇文章。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。