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 緩衝區起始處開始。
休眠(低功耗) 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 0

 

  • 第一個字節是操作碼,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 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 控制。
請參見 一節。

 

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章