一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

如何使用数据包错误检查来确保您的温度安全?

来源:analog 发布时间:2023-07-27

摘要: “分组错误检测”(Packet-Error Checking, PEC)是一种广泛应用于数据传输过程中的错误检测机制。一些Maxim集成产品采用PEC模式,以提高数据传输的可靠性。本应用笔记详细讨论了PEC字节在具有1线和2线接口的温度传感器产品上的实现。

背景

通信无处不在,错误会导致通信效率的降低。为了使沟通更加准确,人们使用不同的方法来检测沟通错误。例如,在为网站登录创建新密码时,用户需要输入两次密码,以减少密码输入错误的可能性。

当人们写诸如银行路由号码之类的数字时,他们有可能出错。创建校验数字是为了捕获这些转录错误。校验位是一种冗余校验,由一个或多个数字组成,由算法从序列中的其他数字计算得出。银行路由号码的最后一位是根据前八位数字计算出来的校验位,用于在交易过程中验证银行路由号码的真实性。

数据通信可能受到错误的影响,例如信道噪声、电畸变、随机比特错误和串扰。循环冗余校验(CRC)是一种错误检测码,用于检测数据传输中的意外错误。crc用于具有1线 接口的几种Maxim温度传感器产品(即DS18B20, MAX31850)。一些具有I(2)C/SMBus兼容串行接口的产品(即DS1862, MAX31875)以分组错误检查(PEC)的形式实现crc,这是一种最初在SMBus中定义的机制。在数据传输系统中,可以在每个事务的末尾附加一个PEC字节作为错误检测代码。PEC字节是基于CRC-8字节计算的,表示为多项式C(X) = X(8) + X(2) + X(1) + 1。PEC机制提高了可靠性和通信健壮性,对于SMBus设备来说PEC实现是可选的。

描述

每个1-Wire设备都有一个唯一的64位串行代码存储在板载ROM中。当多个设备在同一总线上时,总线主机使用64位唯一的ROM ID唯一地标识总线上的每个从设备,这允许主机确定从设备的数量及其设备类型。当主设备想要与一个特定的从设备通信时,主设备向总线上的设备发出一个命令,后跟目标设备的64位ROM代码序列,以寻址该特定的从设备。只有与64位ROM代码序列完全匹配的从机才会响应主机发出的功能命令。

在1- wire接口产品中,CRC字节作为64位ROM代码的一部分(图1)和在刮刮板存储器的第9个字节中(图2)提供。64位ROM代码中的CRC字节从ROM代码的前56位计算,其中包括序列号和族码。

scratchpad内存中的CRC字节从scratchpad的字节0到字节7计算,并随着scratchpad中的数据变化而变化。scratchpad中的CRC字节是只读的。例如,要从1线温度传感器读取温度值,主机发出read Scratchpad命令来读取包含CRC字节的Scratchpad。主机然后重新计算来自刮擦板的前八个数据字节的CRC字节,并将计算的CRC字节与读取的CRC字节进行比较。如果它们匹配,则接收到的数据没有错误。


图1所示、64位1线ROM代码


图2、DS18B20刮板存储器

对于支持PEC的I(2)C/SMBus组件,CRC字节可以用于写入和读取。例如,MAX31875,一个微型,微功率本地温度传感器,具有I(2)C/SMBus接口,支持可选的PEC模式。

在写事务期间,主服务器写MAX31875的地址,等待来自MAX31875的ACK位,然后主服务器发送目标寄存器,随后发送来自MAX31875的另一个ACK位。主机写入两个数据字节,并从MAX31875接收每个数据字节的ACK位。在PEC模式开启的情况下,主机再发送一个CRC字节,并从MAX31875接收最后一个ACK位,停止交易。这个CRC字节是使用从地址、寄存器地址和传输数据来计算的。

对于读事务,主站发送MAX31875的地址和目标寄存器地址,并从站接收每次传输的ACK位。主机生成一个REPEAT START (Sr)字节,并写入MAX31875地址和一个读位。然后,MAX31875确认地址/读字节并传输两个数据字节。开启PEC模式后,MAX31875在数据传输后附加一个PEC字节。一个CRC字节是用一个带写位的从地址、一个寄存器地址、一个带读位的从地址和传输的数据来计算的。


图3、用PEC代码写2字节到MAX31875


图4、SMBus 2字节读取与PEC字节

例1:带CRC的1线连接


DS18B20是Maxim的数字温度计之一,带有1线接口。CRC字节作为DS18B20的64位ROM代码的一部分提供,并且位于刮刮板存储器的第9个字节中。DS18B20的ROM CRC字节是使用48位序列号和8位族码(28h)计算的。表1中的示例使用序列号为04 16 74 8A 15 FF。

表1、带值的64位1线ROM代码
格式CRC-8 (MSB)序列号家庭守则(LSB)
十六进制72041674815FF28
二进制0111 00100000 01000001 01100111 01001000 10100001 01011111 11110010 1000

为了计算CRC-8字节,主机使用一个多项式生成器,如图5所示。CRC生成器由移位寄存器和异或门组成,所有移位寄存器位初始化为0。从ROM代码的最低有效位开始,每次将一位移到移位寄存器中。从ROM移入第56位后,多项式生成器包含一个8位的CRC值。


图5、用于CRC = X(8) + X(5) + X(4) + 1的CRC生成器

关于示例CRC字节计算的进一步详细信息›

在本例中,主机根据收到的56位ROM代码计算CRC-8字节,结果为0x72。主机将计算出的CRC值(0x72)与DS18B20的ROM中存储的CRC字节(0x72)进行比较,结果与计算值相同,并确认主服务器是正确的。

DS18B20的刮记板内存CRC字节是使用刮记板中的字节0到字节7来计算的。请参见表2中的一个刮记板内存内容示例。

表2、DS18B20刮刮板内存示例
8字节
CRC字节
7字节6字节5字节4字节3字节2字节1字节
温度最高有效位
字节0
温度LSB
0 51 00 CF F7 F1 81 B0 55 0
0000 01010001 00000000 11001111 11110111 11110001 10000001 10110000 01010101 0000

从刮擦板中第0字节的最低有效位(LSB)开始,每次将一位移到CRC生成器的移位寄存器中。主机计算0x05作为8位CRC值后,移到第64位。

关于示例CRC字节计算的进一步详细信息›

主机将计算值(0x05)与scratchpad CRC字节(0x05)进行比较。如果匹配,主控确认刮刮板上的数字是正确的。

例2:I(2)C/SMBus写入与PEC


温度阈值寄存器(T(OS))用于设置MAX31875的温度限制。如果MAX31875测量温度超过TOS,配置寄存器显示过温状态。TOS上电状态为80℃(0x5000),地址为0x03。为了将T(OS)设置为95°C (0x5F00),主控写入到MAX31875,如表3所示。

表3、打开PEC模式写到T(OS)
方向M→SM→SM→SS→MM→SS→MM→SS→MM→SS→MM→SS→MM→S
内容年代从设备地址或者说是一个寄存器地址一个数据高一个数据低一个压电陶瓷字节一个P
二进制
1001 0000
0000 0011
0101 1111
0000 0000
0010 0100

主机使用图6所示的PEC生成器计算PEC-8字节。从从地址(MSB)的第一个位开始,0x90035F00每次被移到移位寄存器中一个位,以计算0x24。

关于示例PEC字节计算的进一步详细信息

主机向MAX31875发送0x90035F0024并接收ACK,因为0x24与从机生成的PEC字节匹配。如果接收到的PEC字节是匹配的,从服务器将向主服务器发送ACK。


图6、用于CRC的PEC发生器= X(8) + X(2) + X(1) + 1

例3:I(2)C/SMBus Re与PEC


设置MAX31875分辨率为12位。LSB值为0.0625℃。打开PEC模式,读取MAX31875的温度寄存器值(地址0x00)。MAX31875温度数据格式为16位,两个补码,寄存器以2个字节读出:一个上字节和一个下字节。温度寄存器位D[15:3]包含温度数据。为了读取MAX31875的温度寄存器,主机发送带有写命令的从地址(0x90),接收一个ACK位,发送温度寄存器地址(0x00),并接收一个ACK位。继续重复启动,主设备发送带有读取命令(0x91)的从设备地址,接收一个ACK位,MAX31875返回两个数据字节值,并附加一个PEC字节。

表4是MAX31875的温度寄存器值23.00°C (0x1700)的主控值的一个例子。

表4、带PEC模式的MAX31875温度记录仪
方向M→SM→SM→SS→MM→SS→MM→SM→SM→SS→MS→MM→SS→MM→SS→MM→SM→S
内容年代从设备地址或者说是一个寄存器地址一个1从设备地址理查德·道金斯一个数据高一个数据低一个压电陶瓷字节NP
二进制
1001 0000
0000 0011
1001 0001
0001 0111
0000 0000
0101 1011

在读取操作期间,MAX31875向主机发送温度寄存器值(0x1700)和PEC字节(0x5B)。主机使用图6所示的PEC生成器计算PEC字节。从从地址的MSB开始,0x9000911700每次移到移位寄存器中一位。主机将接收到的PEC字节与从PEC生成器计算出的PEC字节进行比较,这是相同的值,并确认温度寄存器的记录是正确的。

关于示例PEC字节计算的进一步详细信息

结论

通过使用CRC或PEC,主从端可以验证接收到的数据并检测传输错误。特别是在多台设备同时连接到同一台主机的情况下,循环冗余检查提供了一种有效的错误检查方法。


声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: