1. 程式人生 > >MODBUS CRC校驗原理整理

MODBUS CRC校驗原理整理

 MODBUS通訊協議的CRC校驗原理多項式為8005的逆序A001

列01的CRC校驗原理:

1111111111111111
0000000000000001
----------------
1111111111111110	FFFE
0111111111111111|0	7FFF
0011111111111111|1	3FFF
1010000000000001
----------------
1001111111111110	9FFE
0100111111111111|0	4FFF
0010011111111111|1	27FF
1010000000000001
----------------
1000011111111110	87FE
0100001111111111|0	43FF
0010000111111111|1	21FF
1010000000000001
----------------
1000000111111110	81FE
0100000011111111|0	40FF
0010000001111111|1	207F
1010000000000001
----------------
1000000001111110	807E

CRC多項式種類很多,採用的方法有逆序、..上面這個是多項式8005的逆序演算法。

ModBus 通訊協議的 CRC ( 冗餘迴圈校驗碼)含2個位元組, 即 16 位二進位制數。
CRC 碼由傳送裝置計算, 放置於所傳送資訊幀的尾部。
接收資訊裝置再重新計算所接收資訊 (除 CRC 之外的部分)的 CRC, 比較CRC 結果


1)預置 1 個 16 位的暫存器為十六進位制FFFF(即全為 1) , 稱此暫存器為 CRC暫存器。
2) 把第一個 8 位二進位制資料 (通訊資訊幀的第一個位元組) 與 16 位的 CRC暫存器的低 8 位相異或, 把結果放於 CRC暫存器。
3) 把 CRC 暫存器的內容右移一位( 朝低位)用 0 填補最高位, 並檢查右移後的移出位


4) 如果移出位為 0, 重複第 3 步 ( 再次右移一位); 如果移出位為 1, CRC 暫存器與多項式A001 ( 1010 0000 0000 0001) 進行異或。
5) 重複步驟 3 和步驟 4, 直到右移 8 次,這樣整個8位資料全部進行了處理。
6) 重複步驟 2 到步驟 5, 進行通訊資訊幀下一個位元組的處理。
7) 計算完成後,得到的16位CRC暫存器的高、低位元組進行交換。
8) 最後得到的 CRC暫存器內容即為 CRC碼。

相關推薦

MODBUS CRC原理整理

 MODBUS通訊協議的CRC校驗原理多項式為8005的逆序A001 列01的CRC校驗原理: 1111111111111111 0000000000000001 ---------------- 1111111111111110 FFFE 011111111111111

MODBUS CRC原理及C語言實現

MODBUS通訊協議的CRC校驗原理多項式為8005的逆序A001列01的CRC校驗原理:1111111111111111                 初始化CRC寄存機0000000000000

CRC原理及步驟

ext 是把 nsf 其它 結果 aci 發送 二進制 padding 什麽是CRC校驗? CRC即循環冗余校驗碼:是數據通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環冗余檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,並將

CRC原理及步驟(轉載只是為了查閱方便,若侵權立刪)

什麼是CRC校驗? CRC即迴圈冗餘校驗碼:是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊欄位和校驗欄位的長度可以任意選定。迴圈冗餘檢查(CRC)是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。 &n

CRC原理(cyclic redundancy check)

1、CRC基於“模二運算”。 模二運算類似於普通二進位制運算,但是區別在於無進位和借位。 例如: 加法:010+110=100 減法:010-110=100 無進位和借位使得模二運算的加減法相當於異

CRC原理及STM32 IAP線上升級程式

CRC校驗原理: 什麼是CRC校驗? CRC即迴圈冗餘校驗碼:是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊欄位和校驗欄位的長度可以任意選定。迴圈冗餘檢查(CRC)是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,

[技術棧]CRC原理及C#程式碼實現CRC16、CRC32計算FCS

1.CRC、FCS是什麼 CRC,全稱Cyclic Redundancy Check,中文名稱為迴圈冗餘校驗,是一種根據網路資料包或計算機檔案等資料產生簡短固定位數校驗碼的一種通道編碼技術,主要用來檢測或校驗資料傳輸或者儲存後可能出現的錯誤。它是利用除法及餘數的原理來作錯誤偵測的。 FCS,全稱Frame C

CRC原理和verilog實現方法(一)

1.CRC簡介  CRC全稱迴圈冗餘校驗(Cyclic Redundancy Check, CRC),是通訊領域資料傳輸技術中常用的檢錯方法,用於保證資料傳輸的可靠性。網上有關這方面的部落格和資料很多,本文儘量簡潔的梳理一下它的原理。後面還會結合自己的實踐經驗(不多),說一說如何使用verilog語

java modbus crc16碼 socket給傳送的資料新增crc

首先crc16校驗碼的生成的原理在上一篇部落格裡面已經說過了; 前提:xframe配置京金華伺服器的埠號,繫結ip地址和埠號 程式要實現什麼? 這個程式主要實現的是伺服器傳送資料到客戶端,然後客戶端傳送資料到伺服器端; 是一問一答的形式; 只有伺服器傳送,客戶端才會應答 傳送

CRC碼計算及原理的最通俗詮釋

5.3.2 迴圈冗餘校驗檢錯方案       奇偶校驗碼(PCC)只能校驗一位錯誤,本節所要介紹的迴圈冗餘校驗碼(CRC)的檢錯能力更強,可以檢出多位錯誤。        1. CRC校驗原理    &nb

CRC 原理及功用

1.CRC介紹: 迴圈冗餘碼校驗英文名稱為Cyclical Redundancy Check,簡稱CRC。它是利用除法及餘數的原理來作錯誤偵測(Error Detecting)的。實際應用時,傳送裝置計算出CRC值並隨資料一同傳送給接收裝置,接收裝置對收到的資料重新計算CR

modbus協議CRC

https://blog.csdn.net/u013625451/article/details/81239572 http://cht.nahua.com.tw/index.php?url=http://cht.nahua.com.tw/software/crc16/&key=Modb

CRC原理CRC的用途。

一、迴圈冗餘校驗碼(CRC) CRC校驗採用多項式編碼方法。被處理的資料塊可以看作是一個n階的二進位制多項式,由 。如一個8位二進位制數10110101可以表示為: 。多項式乘除法運算過程與普通代數多項式的乘除法相同。多項式的加減法運算以2為模,加減時不進,錯位,和邏輯異或運算一致。 採用CRC校驗時,傳送

CRC原理及硬體、軟體演算法實現

轉自:http://blog.163.com/yucheng_xiao/blog/static/76600192201393092918776/  一、基本原理     CRC檢驗原理實際上就是在一個p位二進位制資料序列之後附加一個r位二進位制檢驗碼(序列),從而構成一個總長為n=p+r位的二進位制序

CRC實現原理以及程式實現研究

在學習mdobus過程中,曾遇到過CRC校驗,之前一直不是很明白其原理,現在利用一點閒暇時間學習下。 不同別的校驗方式,想弄明白CRC校驗的原理以及程式實現過程還真得有點耐心,琢磨一下數學公式。 1.      什麼是CRC校驗 一句話總結:將需要傳遞的資料塊看成一個資訊多

CRC原理以及例子

一、基本原理     CRC檢驗原理實際上就是在一個p位二進位制資料序列之後附加一個r位二進位制檢驗碼(序列),從而構成一個總長為n=p+r位的二進位制序列;附加在資料序列之後的這個檢驗碼與資料序列的

CRC的C語言實現

ins rcc param into phoenix 兩個 The ide align 文章轉自 循環冗余校驗(CRC)算法入門引導 - Ivan 的專欄 - 博客頻道 - CSDN.NET http://blog.csdn.net/liyuanbhu/article/de

串列埠通訊之 CRC

一、CRC16簡介       迴圈冗餘碼CRC檢驗技術廣泛應用於測控及通訊領域。CRC計算可以靠專用的硬體來實現,但是對於低成本的微控制器系統,在沒有硬體支援下實現CRC檢驗,關鍵的問題就是如何通過軟體來完成CRC計算,也就是CRC演算法的問題。下

STM32 modbus CRC16

//TxBuf[9]; //014600000001020064 typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef int int32_t; const uint16_t polynom = 0xA00

java 進行檔案的crc

import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; impor