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计算器可在线计算,其参数配置和输入、输出结果如下:
one-wire协议和sha1算法在DS28E01上验证(一)

输出结果为F1,与抓取到的数据一致
5.MAC验证
5.1验证MAC前crc16
写入A5命令后,器件输出32字节eeprom数据和一字节FF和两字节crc16校验,后面接着就是20字节的MAC值,要是继续读会返回AA如果是新的芯片,eeprom通常为0,但是不一定,这点要明确,可读eeprom查看值,这里为0。crc16校验输入数据为命令+地址+32字节数(0)+FF通过ila抓取到的数据如下图:
one-wire协议和sha1算法在DS28E01上验证(一)
通过数据分析FF后面接着的为crc16校验0d6d通过crc16在线计算器,配置和输入、输出结果如下:
one-wire协议和sha1算法在DS28E01上验证(一)

其中A5为命令,后面两字节为地址,接着为32字节0和一个字节FF输出结果为0d6d,验证正确

5.2验证MAC
读完MAC后,继续读,会返回AA,通过ila抓取的数据如下:
one-wire协议和sha1算法在DS28E01上验证(一)
可见数据结尾为AAAA,剩下两字节22d2为crc16校验,剩下20字节为mac值crc校验采用crc16在线计算器,其配置和输入输出数据如下:
one-wire协议和sha1算法在DS28E01上验证(一)
可见输入结果为22D2,与抓取的CRC一致

6.结果
通过以上步骤,基本实现了DS28E01的验证工作,具体细节参数需要参考设计文档
7.注意
在写入5A命令之后,最好延时10ms以上,再读取判断是否返回AA,本设计延时为40ms,测试了十几片都能正常工作,无问题发生

one-wire协议和sha1算法在DS28E01上验证(一)