one-wire協議和sha1算法在DS28E01上驗證(一)

1.DS28E01簡介
DS28E01通過1條單總線與MCU通信,單總線不多說了,要求時間非常嚴格,精確到us級別。DS28E01有四個存儲區:數據存儲器(EEPROM)(共分4頁,每頁32個字節)**存儲器(secret)(8字節)含有特定功能和用戶字節的寄存器頁(register page)易失性暫存器(scratchpad)(8字節)MCU通過單總線只能讀寫暫存器,而不能直接讀寫其它存儲區。向數據存儲器寫數據、載入初始**或者向寄存器頁寫數據時,先把數據寫入暫存器,然後通過相應的命令,讓芯片自行從暫存器拷貝數據至目的地址。
2.DS28E01工作原理
芯片內部有一個SHA-160加密模塊,參與SHA算法的爲512位特定格式的數據,這些數據包含8字節**,5字節用戶指定的隨機數,32字節EEPROM內容,7字節ROMID,1字節EEPROM的地址TA1及固定數。MCU可以讀取芯片通過SHA加密後的20字節哈希值,並與MCU自己通過同樣的算法計算出的哈希值進行比對。既然MCU要進行同樣的加密操作,要麼肯定要生成與芯片內部完全相同的55字節消息,怎麼得來的呢?8字節**是自己生成並寫進去的
5字節隨機數是在芯片執行SHA之前寫進暫存器的值.
32字節EEPROM數據,在讀回20字節哈希值之前,芯片會傳回這32字節內容。
7字節ROMID,可以在任何時候讀到芯片的ROMID.
2字節固定值,看手冊可以知道
1字節TA1,自己寫進去的
3.其他
以上部分是從網絡獲取的,可以快速數據該器件的工作原理,詳細技術文檔請參考數據手冊。
4.ROMID分析
fpga通過ila抓取8字節的romid爲:F1000001B21B942F2F:器件碼F1:crc校驗碼000001B21B:串行序列下面驗證crc是否正確,crc計算器可在線計算,其參數配置和輸入、輸出結果如下:
在這裏插入圖片描述

輸出結果爲F1,與抓取到的數據一致
5.MAC驗證
5.1驗證MAC前crc16
寫入A5命令後,器件輸出32字節eeprom數據和一字節FF和兩字節crc16校驗,後面接着就是20字節的MAC值,要是繼續讀會返回AA如果是新的芯片,eeprom通常爲0,但是不一定,這點要明確,可讀eeprom查看值,這裏爲0。crc16校驗輸入數據爲命令+地址+32字節數(0)+FF通過ila抓取到的數據如下圖:
在這裏插入圖片描述
通過數據分析FF後面接着的爲crc16校驗0d6d通過crc16在線計算器,配置和輸入、輸出結果如下:
在這裏插入圖片描述

其中A5爲命令,後面兩字節爲地址,接着爲32字節0和一個字節FF輸出結果爲0d6d,驗證正確

5.2驗證MAC
讀完MAC後,繼續讀,會返回AA,通過ila抓取的數據如下:
在這裏插入圖片描述
可見數據結尾爲AAAA,剩下兩字節22d2爲crc16校驗,剩下20字節爲mac值crc校驗採用crc16在線計算器,其配置和輸入輸出數據如下:
在這裏插入圖片描述
可見輸入結果爲22D2,與抓取的CRC一致

6.結果
通過以上步驟,基本實現了DS28E01的驗證工作,具體細節參數需要參考設計文檔
7.注意
在寫入5A命令之後,最好延時10ms以上,再讀取判斷是否返回AA,本設計延時爲40ms,測試了十幾片都能正常工作,無問題發生

在這裏插入圖片描述