0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用數(shù)據(jù)包錯(cuò)誤檢查來(lái)保護(hù)您的溫度讀數(shù)

星星科技指導(dǎo)員 ? 來(lái)源:ADI ? 作者:ADI ? 2023-02-13 10:48 ? 次閱讀

“數(shù)據(jù)包錯(cuò)誤檢查”(PEC)是一種在數(shù)據(jù)傳輸過(guò)程中廣泛使用的錯(cuò)誤檢測(cè)機(jī)制。Maxim集成產(chǎn)品采用PEC模式,以提高數(shù)據(jù)傳輸?shù)目煽啃浴1緫?yīng)用筆記討論了PEC字節(jié)在具有1線和2線接口的溫度傳感器產(chǎn)品上的詳細(xì)實(shí)現(xiàn)。

背景

通信無(wú)處不在,錯(cuò)誤會(huì)導(dǎo)致通信效率下降。為了使溝通更準(zhǔn)確,人們使用不同的方法來(lái)檢測(cè)溝通錯(cuò)誤。例如,在為網(wǎng)站登錄創(chuàng)建新密碼時(shí),用戶需要輸入兩次密碼,以減少密碼中出現(xiàn)拼寫錯(cuò)誤的機(jī)會(huì)。

當(dāng)人們寫銀行路由號(hào)碼等號(hào)碼時(shí),他們可能會(huì)犯錯(cuò)誤。創(chuàng)建校驗(yàn)位是為了捕獲這些轉(zhuǎn)錄錯(cuò)誤。校驗(yàn)位是一種冗余校驗(yàn),由算法從序列中的其他數(shù)字計(jì)算出的一個(gè)或多個(gè)數(shù)字組成。銀行路由號(hào)碼的最后一位數(shù)字是根據(jù)前八位數(shù)字計(jì)算的校驗(yàn)位,用于在交易過(guò)程中驗(yàn)證銀行路由號(hào)碼的真實(shí)性。

數(shù)據(jù)通信可能會(huì)出錯(cuò),例如通道噪聲、電氣失真、隨機(jī)位錯(cuò)誤和串?dāng)_。循環(huán)冗余校驗(yàn) (CRC) 是一種錯(cuò)誤檢測(cè)代碼,用于檢測(cè)數(shù)據(jù)傳輸中的意外錯(cuò)誤。CRC用于多款具有1-Wire接口的Maxim溫度傳感器產(chǎn)品(即DS18B20、MAX31850)。部分產(chǎn)品帶有 I?2C/SMBus兼容串行接口(即DS1862、MAX31875)以分組錯(cuò)誤檢查(PEC)的形式實(shí)現(xiàn)CRC,這是最初在SMBus中定義的機(jī)制。在數(shù)據(jù)傳輸系統(tǒng)中,可以在每個(gè)事務(wù)的末尾附加一個(gè)PEC字節(jié)作為錯(cuò)誤檢測(cè)代碼。PEC 字節(jié)是根據(jù)多項(xiàng)式 C(X) = X 表示的 CRC-8 字節(jié)計(jì)算的8+ X2+ X1+ 1.PEC 機(jī)制提高了可靠性和通信魯棒性,PEC 實(shí)現(xiàn)對(duì)于 SMBus 設(shè)備是可選的。

描述

每款1-Wire器件都有一個(gè)唯一的64位串行碼存儲(chǔ)在板載ROM中。當(dāng)多個(gè)設(shè)備在同一總線上時(shí),總線主站使用64位唯一ROM ID唯一標(biāo)識(shí)總線上的每個(gè)從設(shè)備,這允許主站確定從設(shè)備的數(shù)量及其設(shè)備類型。當(dāng)主設(shè)備想要與一個(gè)特定的從設(shè)備通信時(shí),主機(jī)向總線上的設(shè)備發(fā)出命令,然后是目標(biāo)設(shè)備的64位ROM代碼序列,以尋址該特定的從設(shè)備。只有與64位ROM碼序列完全匹配的從機(jī)才會(huì)響應(yīng)主站發(fā)出的功能命令。

在1-Wire接口產(chǎn)品中,CRC字節(jié)作為64位ROM碼的一部分(圖1)和暫存器存儲(chǔ)器的第9個(gè)字節(jié)(圖2)提供。64位ROM碼中的CRC字節(jié)是從ROM碼的前56位計(jì)算得出的,其中包括序列號(hào)和家族代碼。

暫存器內(nèi)存中的 CRC 字節(jié)從暫存器的字節(jié) 0 到 7 計(jì)算得出,并在暫存器中的數(shù)據(jù)更改時(shí)更改。暫存器中的 CRC 字節(jié)是只讀的。例如,為了從1-Wire溫度傳感器讀取溫度值,主機(jī)發(fā)出讀取暫存器命令以讀取暫存器,包括CRC字節(jié)。然后,主站從暫存器重新計(jì)算前八個(gè)數(shù)據(jù)字節(jié)的CRC字節(jié),并將計(jì)算出的CRC字節(jié)與讀取的CRC字節(jié)進(jìn)行比較。如果它們匹配,則接收到的數(shù)據(jù)沒(méi)有錯(cuò)誤。

poYBAGPppO-ARxHLAAAQYd2YLno455.png?imgver=1

圖1.64位1線ROM碼。

pYYBAGPppPCAffPjAADfXMY7rYw088.png?imgver=1

圖2.DS18B20暫存存儲(chǔ)器。

對(duì)于我2支持PEC、CRC字節(jié)的C/SMBus組件可用于寫入和讀取。例如,MAX31875,一個(gè)微小的微功耗本地溫度傳感器,具有I2C/SMBus接口,支持可選PEC模式。

在寫事務(wù)中,主機(jī)寫入MAX31875的地址,等待MAX31875的ACK位,然后主機(jī)發(fā)送目標(biāo)寄存器,然后發(fā)送MAX31875的另一個(gè)ACK位。主機(jī)寫入兩個(gè)數(shù)據(jù)字節(jié),并從MAX31875接收每個(gè)數(shù)據(jù)字節(jié)的ACK位。PEC模式開(kāi)啟時(shí),主機(jī)再發(fā)送一個(gè)CRC字節(jié),并從MAX31875接收最后一個(gè)ACK位,停止交易。該CRC字節(jié)是使用從地址、寄存器地址和傳輸?shù)臄?shù)據(jù)計(jì)算的。

對(duì)于讀事務(wù),主機(jī)發(fā)送MAX31875的地址和目標(biāo)寄存器地址,并從從機(jī)接收每次發(fā)送的ACK位。主機(jī)產(chǎn)生重復(fù)啟動(dòng)(Sr)字節(jié),寫入MAX31875地址和讀位。MAX31875確認(rèn)地址/讀字節(jié)并發(fā)送兩個(gè)數(shù)據(jù)字節(jié)。PEC模式開(kāi)啟時(shí),數(shù)據(jù)傳輸后MAX31875附加一個(gè)PEC字節(jié)。CRC字節(jié)是使用具有寫入位的從地址,寄存器地址,具有讀取位的從地址以及傳輸?shù)臄?shù)據(jù)計(jì)算的。

poYBAGPppPKAEDGFAABw4ayjGB0363.png?imgver=1

圖3.2字節(jié)寫入MAX31875,PEC碼。

pYYBAGPppPOAJU3aAACG5GvnnK4852.png?imgver=1

圖4.SMBus 2 字節(jié)與 PEC 字節(jié)一起讀取。

示例1:使用CRC進(jìn)行1線讀取

DS18B20是Maxim采用1-Wire接口的數(shù)字溫度計(jì)之一。CRC字節(jié)作為DS18B20的64位ROM碼的一部分和暫存器存儲(chǔ)器的第9個(gè)字節(jié)提供。 DS18B20的ROM CRC字節(jié)采用48位序列號(hào)和8位家族碼(28h)計(jì)算。表 1 中的示例使用序列號(hào) 04 16 74 8A 15 FF。

格式 CRC-8 (MSB) 序號(hào) 家庭代碼
十六進(jìn)制 72 04 16 74 8安 15 FF 28
二元的 0111 0010 0000 0100 0001 0110 0111 0100 1000 1010 0001 0101 1111 1111 0010 1000

為了計(jì)算CRC-8字節(jié),主站使用多項(xiàng)式生成器,如圖5所示。CRC發(fā)生器由移位寄存器和XOR門組成,所有移位寄存器位初始化為0。從ROM代碼的最低有效位開(kāi)始,一次將一位移入移位寄存器。從ROM移入第56位后,多項(xiàng)式發(fā)生器包含一個(gè)8位CRC值。

poYBAGPppPWAD7a5AACcZOxTCnA644.png?imgver=1

圖5.用于 CRC 的 CRC 發(fā)生器 = X8+ X5+ X4+ 1.

有關(guān)示例 CRC 字節(jié)計(jì)算的更多詳細(xì)信息 ?

在此示例中,主站根據(jù)接收到的 8 位 ROM 代碼計(jì)算 CRC-56 字節(jié),從而產(chǎn)生值0x72。主機(jī)將計(jì)算出的CRC值(0x72)與存儲(chǔ)在DS18B20的ROM (0x72)中的CRC字節(jié)進(jìn)行比較,后者與計(jì)算值相同,并確認(rèn)主站讀數(shù)正確。

DS18B20的暫存存儲(chǔ)器CRC字節(jié)使用暫存器中的字節(jié)0至字節(jié)7計(jì)算。有關(guān)暫存器內(nèi)存內(nèi)容的示例,請(qǐng)參閱表 2。

字節(jié) 8
CRC 字節(jié)
字節(jié) 7 字節(jié) 6 字節(jié) 5 字節(jié) 4 字節(jié) 3 字節(jié) 2 字節(jié) 1
溫度 MSB
字節(jié) 0
溫度 LSB
0 瓦 1 0 0 攝氏度 F F 7 % 1 8 1 字節(jié) 0 5 5 0
0000 0101 0001 0000 0000 1100 1111 1111 0111 1111 0001 1000 0001 1011 0000 0101 0101 0000

從暫存器中字節(jié) 0 的最低有效位 (LSB) 開(kāi)始,一次一個(gè)位移入 CRC 發(fā)生器的移位寄存器。從暫存器移入第 0 位后,主機(jī)將05x8計(jì)算為 64 位 CRC 值。

主機(jī)將計(jì)算值 (0x05) 與暫存器 CRC 字節(jié) (0x05) 進(jìn)行比較。如果匹配,則大師確認(rèn)暫存器中的讀數(shù)正確。

示例 2:I2使用 PEC 編寫 C/SMBus

溫度閾值寄存器(T這) 用于設(shè)置MAX31875的溫度限值。如果MAX31875測(cè)得的溫度超過(guò)TOS,則配置寄存器顯示過(guò)熱狀態(tài)。TOS 的上電狀態(tài)為 80°C (0x5000),地址0x03。設(shè)置 T 的步驟這至95°C (0x5F00),主機(jī)寫入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
內(nèi)容 S 從地址 水利 一個(gè) 寄存器地址 一個(gè) 數(shù)據(jù)高 一個(gè) 數(shù)據(jù)低 一個(gè) PEC 字節(jié) 一個(gè) P
二元的 1001 000 0 0000 0011 0101 1111 0000 0000 0010 0100

主機(jī)使用圖 8 所示的 PEC 生成器計(jì)算 PEC-6 字節(jié)。從從地址(MSB)的第一位開(kāi)始,0x90035F00一次移入移位寄存器以計(jì)算0x24。

主機(jī)向MAX0發(fā)送90035x0024F31875并接收ACK,因?yàn)?x24與從機(jī)產(chǎn)生的PEC字節(jié)匹配。如果收到的PEC字節(jié)是匹配的,則從站向主站發(fā)送ACK。

pYYBAGPppPaAJ1WCAAChAlhjG0U963.png?imgver=1

圖6.用于 CRC 的 PEC 發(fā)生器 = X8+ X2+ X1+ 1.

示例 3:I2帶 PEC 的 C/SMBus 讀取

將MAX31875分辨率設(shè)置為12位。LSB的值為0.0625°C。 PEC模式開(kāi)啟時(shí),讀取MAX31875的溫度寄存器值(地址0x00)。MAX31875溫度數(shù)據(jù)格式為16位,二進(jìn)制補(bǔ)碼,寄存器以2個(gè)字節(jié)讀出:上字節(jié)和下字節(jié)。溫度寄存器位 D[15:3] 包含溫度數(shù)據(jù)。為了讀取MAX31875的溫度寄存器,主機(jī)通過(guò)寫命令(0x90)發(fā)送從地址,接收ACK位,發(fā)送溫度寄存器地址(0x00),并接收ACK位。繼續(xù)重復(fù)啟動(dòng),主機(jī)通過(guò)讀命令(0x91)發(fā)送從地址,接收ACK位,MAX31875發(fā)回兩個(gè)數(shù)據(jù)字節(jié)值,并附加一個(gè)PEC字節(jié)。

表4是MAX31875溫度寄存器值23.00°C (0x1700)的主讀數(shù)示例。

方向 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
內(nèi)容 S 從地址 水利 一個(gè) 寄存器地址 一個(gè) 1 從地址 研發(fā) 一個(gè) 數(shù)據(jù)高 一個(gè) 數(shù)據(jù)低 一個(gè) PEC 字節(jié) N P
二元的 1001 000 0 0000 0011 1001 000 1 0001 0111 0000 0000 0101 1011

在讀取操作期間,MAX31875向主機(jī)發(fā)送溫度寄存器值(0x1700)和PEC字節(jié)(0x5B)。主站使用圖 6 所示的 PEC 生成器計(jì)算 PEC 字節(jié)。從從地址的MSB開(kāi)始,0x9000911700一次移入移位寄存器。主機(jī)將接收到的PEC字節(jié)與PEC發(fā)生器計(jì)算出的PEC字節(jié)進(jìn)行比較,后者的值相同,并確認(rèn)溫度寄存器的讀數(shù)正確。

結(jié)論

通過(guò)使用CRC或PEC,主站和從站可以驗(yàn)證接收到的數(shù)據(jù)并檢測(cè)傳輸錯(cuò)誤。特別是在多個(gè)設(shè)備同時(shí)連接同一主機(jī)的情況下,循環(huán)冗余檢查提供了一種有效的錯(cuò)誤檢查方法。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2551

    文章

    51099

    瀏覽量

    753572
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    572

    瀏覽量

    85769
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2881

    瀏覽量

    88085
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    NONOS如何檢查是否實(shí)際發(fā)送了UDP數(shù)據(jù)包?

    我發(fā)現(xiàn)進(jìn)入深度睡眠通常無(wú)法傳輸發(fā)送的最后一個(gè) UDP 數(shù)據(jù)包。我現(xiàn)在將睡眠延遲 30 毫秒,這是一個(gè)黑客。 我寧愿有一種方法來(lái)檢查是否可以休眠,或者以其他方式能夠注冊(cè)指示數(shù)據(jù)包已發(fā)送
    發(fā)表于 07-12 06:14

    怎么跟蹤每個(gè)連接間隔的數(shù)據(jù)包數(shù)

    你好,我想知道是否有一種方法來(lái)跟蹤每個(gè)連接間隔發(fā)送的數(shù)據(jù)包的數(shù)量。實(shí)際使用一個(gè)延遲等于我的連接間隔的計(jì)時(shí)器來(lái)計(jì)算我使用BLE堆棧API推送數(shù)據(jù)的次數(shù)。但我正在尋找其他解決方案。我需要這
    發(fā)表于 09-16 06:14

    uart引導(dǎo)加載程序數(shù)據(jù)包長(zhǎng)度無(wú)效

    加載程序的例子。我修改的項(xiàng)目支持UART bootloader和它不工作。我收到以下錯(cuò)誤:“引導(dǎo)程序報(bào)告錯(cuò)誤數(shù)據(jù)包長(zhǎng)度無(wú)效:數(shù)據(jù)包的長(zhǎng)度不符合要求的
    發(fā)表于 09-26 12:21

    怎樣來(lái)發(fā)送接收一個(gè)完整的數(shù)據(jù)包?

    怎樣來(lái)發(fā)送接收一個(gè)完整的數(shù)據(jù)包
    發(fā)表于 12-09 06:52

    如何發(fā)送音頻/視頻ISOC數(shù)據(jù)包?

    我想開(kāi)發(fā)帶有音頻和/或視頻類的 USB 主機(jī)應(yīng)用程序。是否有任何工作示例項(xiàng)目或代碼片段?我檢查了 STM32 HCD 驅(qū)動(dòng)文件 - -ux_hcd_stam32_periodic_schedule.c,但它總是生成 EP_TYPE_INTR 數(shù)據(jù)包。如何發(fā)送音頻/視頻 I
    發(fā)表于 12-26 08:18

    網(wǎng)絡(luò)數(shù)據(jù)包捕獲機(jī)制研究

    網(wǎng)絡(luò)數(shù)據(jù)包捕獲技術(shù),是實(shí)現(xiàn)入侵檢測(cè)、網(wǎng)絡(luò)安全審計(jì)的關(guān)鍵技術(shù)。本文改進(jìn)了國(guó)外傳統(tǒng)的數(shù)據(jù)包捕獲函數(shù)庫(kù)Libpcap 捕獲數(shù)據(jù)包的方案。原方案在網(wǎng)卡捕獲到數(shù)據(jù)包后,
    發(fā)表于 09-01 10:09 ?9次下載

    基于Jpcap的數(shù)據(jù)包捕獲器的設(shè)計(jì)與實(shí)現(xiàn)

    本文研究了以太網(wǎng)數(shù)據(jù)包的捕獲機(jī)制,實(shí)現(xiàn)了基于JPcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲工具,其基本原理是通過(guò)調(diào)用Jpcap庫(kù)捕獲本地網(wǎng)絡(luò)上的所有數(shù)據(jù)包,然后對(duì)數(shù)據(jù)包進(jìn)行協(xié)議解碼,從而可以實(shí)
    發(fā)表于 01-15 13:47 ?38次下載

    數(shù)據(jù)包過(guò)濾原理

    數(shù)據(jù)包過(guò)濾技術(shù)數(shù)據(jù)包過(guò)濾原理              數(shù)據(jù)包過(guò)濾技術(shù)是防火墻最常用的技術(shù)。對(duì)于一
    發(fā)表于 06-16 23:44 ?4613次閱讀
    <b class='flag-5'>數(shù)據(jù)包</b>過(guò)濾原理

    什么是數(shù)據(jù)包?

    什么是數(shù)據(jù)包? 您在互聯(lián)網(wǎng)上做的一切都涉及到數(shù)據(jù)包。例如,接收的每個(gè)網(wǎng)頁(yè)都以一系列數(shù)據(jù)包的形式傳入,發(fā)送的每封電子郵件都以一系列
    發(fā)表于 08-03 09:13 ?2024次閱讀

    ZigBee3.0數(shù)據(jù)包解析

    ZigBee3.0是ZigBee聯(lián)盟推出的可以互聯(lián)互通的標(biāo)準(zhǔn)協(xié)議,用之前的Packet Sniffer抓包工具是無(wú)法解析ZigBee3.0的數(shù)據(jù)包,因ZigBee3.0的安全機(jī)制所有的數(shù)據(jù)包都是加密
    發(fā)表于 02-28 11:48 ?2670次閱讀
    ZigBee3.0<b class='flag-5'>數(shù)據(jù)包</b>解析

    數(shù)據(jù)包的發(fā)送流程

    一個(gè)數(shù)據(jù)包,從聊天框里發(fā)出,消息會(huì)從聊天軟件所在的用戶空間拷貝到內(nèi)核空間的發(fā)送緩沖區(qū)(send buffer),數(shù)據(jù)包就這樣順著傳輸層、網(wǎng)絡(luò)層,進(jìn)入到數(shù)據(jù)鏈路層,在這里數(shù)據(jù)包會(huì)經(jīng)過(guò)流控
    的頭像 發(fā)表于 08-19 14:38 ?2670次閱讀

    網(wǎng)絡(luò)數(shù)據(jù)包分析軟件wireshark的基本使用

    Wireshark(前稱Ethereal)是一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包分析軟件。網(wǎng)絡(luò)數(shù)據(jù)包分析軟件的功能是截取網(wǎng)絡(luò)數(shù)據(jù)包,并盡可能顯示出最為詳細(xì)的網(wǎng)絡(luò)數(shù)據(jù)包數(shù)據(jù)
    的頭像 發(fā)表于 09-29 14:48 ?3035次閱讀

    如何使用數(shù)據(jù)包錯(cuò)誤檢查來(lái)保護(hù)溫度讀數(shù)

    發(fā)表于 11-16 21:01 ?0次下載
    如何使用<b class='flag-5'>數(shù)據(jù)包</b><b class='flag-5'>錯(cuò)誤</b><b class='flag-5'>檢查</b><b class='flag-5'>來(lái)</b><b class='flag-5'>保護(hù)</b><b class='flag-5'>您</b>的<b class='flag-5'>溫度</b><b class='flag-5'>讀數(shù)</b>

    虹科分享 | 什么是深度數(shù)據(jù)包檢測(cè)(DPI)

    深度數(shù)據(jù)包檢測(cè)(DPI)是一種分析通過(guò)網(wǎng)絡(luò)發(fā)送的流量的高級(jí)方法。DPI使用數(shù)據(jù)處理來(lái)檢查數(shù)據(jù)包的特定細(xì)節(jié),作為
    的頭像 發(fā)表于 10-13 09:48 ?1658次閱讀
    虹科分享 | 什么是深度<b class='flag-5'>數(shù)據(jù)包</b>檢測(cè)(DPI)

    虹科分享 | 網(wǎng)絡(luò)流量監(jiān)控 | 數(shù)據(jù)包丟失101

    是我們?cè)诰€發(fā)送或接收的所有內(nèi)容的構(gòu)建塊。當(dāng)下載圖像、發(fā)送電子郵件、登錄縮放通話或使用阿里巴巴購(gòu)物車結(jié)賬時(shí),數(shù)據(jù)包會(huì)為所有這些行為提供支持。什么是丟?當(dāng)一個(gè)或多
    的頭像 發(fā)表于 03-15 14:15 ?832次閱讀
    虹科分享 | 網(wǎng)絡(luò)流量監(jiān)控 | <b class='flag-5'>數(shù)據(jù)包</b>丟失101