“數(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ò)誤。
圖1.64位1線ROM碼。
圖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ì)算的。
圖3.2字節(jié)寫入MAX31875,PEC碼。
圖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值。
圖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。
圖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ò)誤檢查方法。
審核編輯:郭婷
-
傳感器
+關(guān)注
關(guān)注
2551文章
51099瀏覽量
753572 -
ROM
+關(guān)注
關(guān)注
4文章
572瀏覽量
85769 -
總線
+關(guān)注
關(guān)注
10文章
2881瀏覽量
88085
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論