1 如何使用数据包错误检查来保护您的温度读数-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用数据包错误检查来保护您的温度读数

星星科技指导员 来源:ADI 作者:ADI 2023-02-13 10:48 次阅读

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

背景

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

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

数据通信可能会出错,例如通道噪声、电气失真、随机位错误和串扰。循环冗余校验 (CRC) 是一种错误检测代码,用于检测数据传输中的意外错误。CRC用于多款具有1-Wire接口的Maxim温度传感器产品(即DS18B20、MAX31850)。部分产品带有 I®2C/SMBus兼容串行接口(即DS1862、MAX31875)以分组错误检查(PEC)的形式实现CRC,这是最初在SMBus中定义的机制。在数据传输系统中,可以在每个事务的末尾附加一个PEC字节作为错误检测代码。PEC 字节是根据多项式 C(X) = X 表示的 CRC-8 字节计算的8+ X2+ X1+ 1.PEC 机制提高了可靠性和通信鲁棒性,PEC 实现对于 SMBus 设备是可选的。

描述

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

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

暂存器内存中的 CRC 字节从暂存器的字节 0 到 7 计算得出,并在暂存器中的数据更改时更改。暂存器中的 CRC 字节是只读的。例如,为了从1-Wire温度传感器读取温度值,主机发出读取暂存器命令以读取暂存器,包括CRC字节。然后,主站从暂存器重新计算前八个数据字节的CRC字节,并将计算出的CRC字节与读取的CRC字节进行比较。如果它们匹配,则接收到的数据没有错误。

poYBAGPppO-ARxHLAAAQYd2YLno455.png?imgver=1

图1.64位1线ROM码。

pYYBAGPppPCAffPjAADfXMY7rYw088.png?imgver=1

图2.DS18B20暂存存储器。

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

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

对于读事务,主机发送MAX31875的地址和目标寄存器地址,并从从机接收每次发送的ACK位。主机产生重复启动(Sr)字节,写入MAX31875地址和读位。MAX31875确认地址/读字节并发送两个数据字节。PEC模式开启时,数据传输后MAX31875附加一个PEC字节。CRC字节是使用具有写入位的从地址,寄存器地址,具有读取位的从地址以及传输的数据计算的。

poYBAGPppPKAEDGFAABw4ayjGB0363.png?imgver=1

图3.2字节写入MAX31875,PEC码。

pYYBAGPppPOAJU3aAACG5GvnnK4852.png?imgver=1

图4.SMBus 2 字节与 PEC 字节一起读取。

示例1:使用CRC进行1线读取

DS18B20是Maxim采用1-Wire接口的数字温度计之一。CRC字节作为DS18B20的64位ROM码的一部分和暂存器存储器的第9个字节提供。 DS18B20的ROM CRC字节采用48位序列号和8位家族码(28h)计算。表 1 中的示例使用序列号 04 16 74 8A 15 FF。

格式 CRC-8 (MSB) 序号 家庭代码
十六进制 72 04 16 74 8安 15 FF 28
二元的 0111 0010 0000 0100 0001 0110 0111 0100 1000 1010 0001 0101 1111 1111 0010 1000

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

poYBAGPppPWAD7a5AACcZOxTCnA644.png?imgver=1

图5.用于 CRC 的 CRC 发生器 = X8+ X5+ X4+ 1.

有关示例 CRC 字节计算的更多详细信息

在此示例中,主站根据接收到的 8 位 ROM 代码计算 CRC-56 字节,从而产生值0x72。主机将计算出的CRC值(0x72)与存储在DS18B20的ROM (0x72)中的CRC字节进行比较,后者与计算值相同,并确认主站读数正确。

DS18B20的暂存存储器CRC字节使用暂存器中的字节0至字节7计算。有关暂存器内存内容的示例,请参阅表 2。

字节 8
CRC 字节
字节 7 字节 6 字节 5 字节 4 字节 3 字节 2 字节 1
温度 MSB
字节 0
温度 LSB
0 瓦 1 0 0 摄氏度 F F 7 % 1 8 1 字节 0 5 5 0
0000 0101 0001 0000 0000 1100 1111 1111 0111 1111 0001 1000 0001 1011 0000 0101 0101 0000

从暂存器中字节 0 的最低有效位 (LSB) 开始,一次一个位移入 CRC 发生器的移位寄存器。从暂存器移入第 0 位后,主机将05x8计算为 64 位 CRC 值。

主机将计算值 (0x05) 与暂存器 CRC 字节 (0x05) 进行比较。如果匹配,则大师确认暂存器中的读数正确。

示例 2:I2使用 PEC 编写 C/SMBus

温度阈值寄存器(T这) 用于设置MAX31875的温度限值。如果MAX31875测得的温度超过TOS,则配置寄存器显示过热状态。TOS 的上电状态为 80°C (0x5000),地址0x03。设置 T 的步骤这至95°C (0x5F00),主机写入MAX31875,如表3所示。

方向 M->S M->S M->S S->M M->S S->M M->S S->M M->S S->M M->S S->M M->S
内容 S 从地址 水利 一个 寄存器地址 一个 数据高 一个 数据低 一个 PEC 字节 一个 P
二元的 1001 000 0 0000 0011 0101 1111 0000 0000 0010 0100

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

主机向MAX0发送90035x0024F31875并接收ACK,因为0x24与从机产生的PEC字节匹配。如果收到的PEC字节是匹配的,则从站向主站发送ACK。

pYYBAGPppPaAJ1WCAAChAlhjG0U963.png?imgver=1

图6.用于 CRC 的 PEC 发生器 = X8+ X2+ X1+ 1.

示例 3:I2带 PEC 的 C/SMBus 读取

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

表4是MAX31875温度寄存器值23.00°C (0x1700)的主读数示例。

方向 M->S M->S M->S S->M M->S S->M ... M->S M->S M->S S->M S->M M->S S->M M->S S->M M->S M->S
内容 S 从地址 水利 一个 寄存器地址 一个 1 从地址 研发 一个 数据高 一个 数据低 一个 PEC 字节 N P
二元的 1001 000 0 0000 0011 1001 000 1 0001 0111 0000 0000 0101 1011

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

结论

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

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2550

    文章

    51035

    浏览量

    753056
  • ROM
    ROM
    +关注

    关注

    4

    文章

    563

    浏览量

    85731
  • 总线
    +关注

    关注

    10

    文章

    2878

    浏览量

    88051
收藏 人收藏

    评论

    相关推荐

    NONOS如何检查是否实际发送了UDP数据包

    我发现进入深度睡眠通常无法传输发送的最后一个 UDP 数据包。我现在将睡眠延迟 30 毫秒,这是一个黑客。 我宁愿有一种方法检查是否可以休眠,或者以其他方式能够注册指示数据包已发送
    发表于 07-12 06:14

    怎么跟踪每个连接间隔的数据包

    你好,我想知道是否有一种方法跟踪每个连接间隔发送的数据包的数量。实际使用一个延迟等于我的连接间隔的计时器计算我使用BLE堆栈API推送数据的次数。但我正在寻找其他解决方案。我需要这
    发表于 09-16 06:14

    uart引导加载程序数据包长度无效

    加载程序的例子。我修改的项目支持UART bootloader和它不工作。我收到以下错误:“引导程序报告错误数据包长度无效:数据包的长度不符合要求的
    发表于 09-26 12:21

    怎样发送接收一个完整的数据包

    怎样发送接收一个完整的数据包
    发表于 12-09 06:52

    如何发送音频/视频ISOC数据包

    我想开发带有音频和/或视频类的 USB 主机应用程序。是否有任何工作示例项目或代码片段?我检查了 STM32 HCD 驱动文件 - -ux_hcd_stam32_periodic_schedule.c,但它总是生成 EP_TYPE_INTR 数据包。如何发送音频/视频 I
    发表于 12-26 08:18

    网络数据包捕获机制研究

    网络数据包捕获技术,是实现入侵检测、网络安全审计的关键技术。本文改进了国外传统的数据包捕获函数库Libpcap 捕获数据包的方案。原方案在网卡捕获到数据包后,
    发表于 09-01 10:09 9次下载

    基于Jpcap的数据包捕获器的设计与实现

    本文研究了以太网数据包的捕获机制,实现了基于JPcap的网络数据包捕获工具,其基本原理是通过调用Jpcap库捕获本地网络上的所有数据包,然后对数据包进行协议解码,从而可以实
    发表于 01-15 13:47 38次下载

    数据包过滤原理

    数据包过滤技术数据包过滤原理              数据包过滤技术是防火墙最常用的技术。对于一
    发表于 06-16 23:44 4610次阅读
    <b class='flag-5'>数据包</b>过滤原理

    什么是数据包

    什么是数据包? 您在互联网上做的一切都涉及到数据包。例如,接收的每个网页都以一系列数据包的形式传入,发送的每封电子邮件都以一系列
    发表于 08-03 09:13 2022次阅读

    ZigBee3.0数据包解析

    ZigBee3.0是ZigBee联盟推出的可以互联互通的标准协议,用之前的Packet Sniffer抓包工具是无法解析ZigBee3.0的数据包,因ZigBee3.0的安全机制所有的数据包都是加密
    发表于 02-28 11:48 2667次阅读
    ZigBee3.0<b class='flag-5'>数据包</b>解析

    数据包的发送流程

    一个数据包,从聊天框里发出,消息会从聊天软件所在的用户空间拷贝到内核空间的发送缓冲区(send buffer),数据包就这样顺着传输层、网络层,进入到数据链路层,在这里数据包会经过流控
    的头像 发表于 08-19 14:38 2660次阅读

    网络数据包分析软件wireshark的基本使用

    Wireshark(前称Ethereal)是一个网络数据包分析软件。网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据
    的头像 发表于 09-29 14:48 3028次阅读

    如何使用数据包错误检查保护温度读数

    发表于 11-16 21:01 0次下载
    如何使用<b class='flag-5'>数据包</b><b class='flag-5'>错误</b><b class='flag-5'>检查</b><b class='flag-5'>来</b><b class='flag-5'>保护</b><b class='flag-5'>您</b>的<b class='flag-5'>温度</b><b class='flag-5'>读数</b>

    虹科分享 | 什么是深度数据包检测(DPI)

    深度数据包检测(DPI)是一种分析通过网络发送的流量的高级方法。DPI使用数据处理检查数据包的特定细节,作为
    的头像 发表于 10-13 09:48 1649次阅读
    虹科分享 | 什么是深度<b class='flag-5'>数据包</b>检测(DPI)

    虹科分享 | 网络流量监控 | 数据包丢失101

    是我们在线发送或接收的所有内容的构建块。当下载图像、发送电子邮件、登录缩放通话或使用阿里巴巴购物车结账时,数据包会为所有这些行为提供支持。什么是丢?当一个或多
    的头像 发表于 03-15 14:15 817次阅读
    虹科分享 | 网络流量监控 | <b class='flag-5'>数据包</b>丢失101