天天看點

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區的具體内容和配置,參見下一篇文章。

繼續閱讀